{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Create a script from this notebook to run gradio with the model" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "#|default_exp app" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Retrieving notices: ...working... DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/r/notices.json HTTP/1.1\" 404 None\n", "DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/main/notices.json HTTP/1.1\" 404 None\n", "DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/notices.json HTTP/1.1\" 404 None\n", "done\n", "Collecting package metadata (current_repodata.json): / DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "- DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/r/osx-arm64/current_repodata.json HTTP/1.1\" 304 0\n", "DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/main/noarch/current_repodata.json HTTP/1.1\" 200 None\n", "DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/r/noarch/current_repodata.json HTTP/1.1\" 304 0\n", "DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/main/osx-arm64/current_repodata.json HTTP/1.1\" 200 None\n", "\\ DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/osx-arm64/current_repodata.json HTTP/1.1\" 404 None\n", "\\ DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/noarch/current_repodata.json HTTP/1.1\" 404 None\n", "| DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/osx-arm64/repodata.json HTTP/1.1\" 200 None\n", "/ DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/noarch/repodata.json HTTP/1.1\" 200 None\n", "done\n", "Solving environment: done\n", "\n", "## Package Plan ##\n", "\n", " environment location: /Users/simonoob/anaconda3\n", "\n", " added / updated specs:\n", " - nbdev\n", "\n", "\n", "The following packages will be downloaded:\n", "\n", " package | build\n", " ---------------------------|-----------------\n", " astunparse-1.6.3 | py_0 17 KB\n", " cryptography-39.0.1 | py311h834c97f_0 1.1 MB\n", " execnb-0.1.5 | py_0 20 KB fastai\n", " fastcore-1.5.29 | py_0 60 KB fastai\n", " ghapi-1.0.3 | py_0 55 KB fastai\n", " nbdev-2.3.12 | py_0 62 KB fastai\n", " ------------------------------------------------------------\n", " Total: 1.3 MB\n", "\n", "The following NEW packages will be INSTALLED:\n", "\n", " astunparse pkgs/main/noarch::astunparse-1.6.3-py_0 \n", " execnb fastai/noarch::execnb-0.1.5-py_0 \n", " fastcore fastai/noarch::fastcore-1.5.29-py_0 \n", " ghapi fastai/noarch::ghapi-1.0.3-py_0 \n", " nbdev fastai/noarch::nbdev-2.3.12-py_0 \n", "\n", "The following packages will be DOWNGRADED:\n", "\n", " cryptography 41.0.2-py311h6e31b35_0 --> 39.0.1-py311h834c97f_0 \n", "\n", "\n", "\n", "Downloading and Extracting Packages\n", "execnb-0.1.5 | 20 KB | | 0% \n", "astunparse-1.6.3 | 17 KB | | 0% \u001b[A\n", "\n", "fastcore-1.5.29 | 60 KB | | 0% \u001b[A\u001b[A\n", "\n", "\n", "nbdev-2.3.12 | 62 KB | | 0% \u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "ghapi-1.0.3 | 55 KB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "\n", "cryptography-39.0.1 | 1.1 MB | | 0% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[ADEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): repo.anaconda.com:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conda.anaconda.org:443\n", "DEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/main/noarch/astunparse-1.6.3-py_0.conda HTTP/1.1\" 200 17240\n", "\n", "astunparse-1.6.3 | 17 KB | ###################################1 | 95% \u001b[A\n", "astunparse-1.6.3 | 17 KB | ##################################### | 100% \u001b[ADEBUG:urllib3.connectionpool:https://repo.anaconda.com:443 \"GET /pkgs/main/osx-arm64/cryptography-39.0.1-py311h834c97f_0.conda HTTP/1.1\" 200 1112394\n", "\n", "\n", "\n", "\n", "\n", "cryptography-39.0.1 | 1.1 MB | 5 | 1% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "\n", "cryptography-39.0.1 | 1.1 MB | ###################6 | 53% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "\n", "cryptography-39.0.1 | 1.1 MB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "\n", "cryptography-39.0.1 | 1.1 MB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\u001b[ADEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/noarch/fastcore-1.5.29-py_0.tar.bz2 HTTP/1.1\" 200 None\n", "DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/noarch/execnb-0.1.5-py_0.tar.bz2 HTTP/1.1\" 200 None\n", "execnb-0.1.5 | 20 KB | ##################################### | 100% \n", "\n", "fastcore-1.5.29 | 60 KB | ##################################### | 100% \u001b[A\u001b[A\n", "\n", "fastcore-1.5.29 | 60 KB | ##################################### | 100% \u001b[A\u001b[ADEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/noarch/ghapi-1.0.3-py_0.tar.bz2 HTTP/1.1\" 200 None\n", "DEBUG:urllib3.connectionpool:https://conda.anaconda.org:443 \"GET /fastai/noarch/nbdev-2.3.12-py_0.tar.bz2 HTTP/1.1\" 200 None\n", "\n", "\n", "\n", "\n", "ghapi-1.0.3 | 55 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "ghapi-1.0.3 | 55 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "nbdev-2.3.12 | 62 KB | ##################################### | 100% \u001b[A\u001b[A\u001b[A\n", "\n", "\n", " \u001b[A\u001b[A\u001b[A\n", " \u001b[A\n", "\n", " \u001b[A\u001b[A\n", "\n", "\n", " \u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", " \u001b[A\u001b[A\u001b[A\u001b[A\n", "\n", "\n", "\n", "\n", " \u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\n", "Preparing transaction: done\n", "Verifying transaction: done\n", "Executing transaction: done\n", "\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%conda install -c fastai nbdev" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#|export\n", "\n", "from fastai.vision.all import *\n", "import gradio as gr\n", "\n", "#dependencies\n", "textLabels = ['Porygon', 'Goldeen', 'Hitmonlee', 'Hitmonchan', 'Gloom', 'Aerodactyl', 'Mankey', 'Seadra', 'Gengar', 'Venonat', 'Articuno', 'Seaking', 'Dugtrio', 'Machop', 'Jynx', 'Oddish', 'Dodrio', 'Dragonair', 'Weedle', 'Golduck', 'Flareon', 'Krabby', 'Parasect', 'Ninetales', 'Nidoqueen', 'Kabutops', 'Drowzee', 'Caterpie', 'Jigglypuff', 'Machamp', 'Clefairy', 'Kangaskhan', 'Dragonite', 'Weepinbell', 'Fearow', 'Bellsprout', 'Grimer', 'Nidorina', 'Staryu', 'Horsea', 'Electabuzz', 'Dratini', 'Machoke', 'Magnemite', 'Squirtle', 'Gyarados', 'Pidgeot', 'Bulbasaur', 'Nidoking', 'Golem', 'Dewgong', 'Moltres', 'Zapdos', 'Poliwrath', 'Vulpix', 'Beedrill', 'Charmander', 'Abra', 'Zubat', 'Golbat', 'Wigglytuff', 'Charizard', 'Slowpoke', 'Poliwag', 'Tentacruel', 'Rhyhorn', 'Onix', 'Butterfree', 'Exeggcute', 'Sandslash', 'Pinsir', 'Rattata', 'Growlithe', 'Haunter', 'Pidgey', 'Ditto', 'Farfetchd', 'Pikachu', 'Raticate', 'Wartortle', 'Vaporeon', 'Cloyster', 'Hypno', 'Arbok', 'Metapod', 'Tangela', 'Kingler', 'Exeggutor', 'Kadabra', 'Seel', 'Voltorb', 'Chansey', 'Venomoth', 'Ponyta', 'Vileplume', 'Koffing', 'Blastoise', 'Tentacool', 'Lickitung', 'Paras', 'Clefable', 'Cubone', 'Marowak', 'Nidorino', 'Jolteon', 'Muk', 'Magikarp', 'Slowbro', 'Tauros', 'Kabuto', 'Spearow', 'Sandshrew', 'Eevee', 'Kakuna', 'Omastar', 'Ekans', 'Geodude', 'Magmar', 'Snorlax', 'Meowth', 'Pidgeotto', 'Venusaur', 'Persian', 'Rhydon', 'Starmie', 'Charmeleon', 'Lapras', 'Alakazam', 'Graveler', 'Psyduck', 'Rapidash', 'Doduo', 'Magneton', 'Arcanine', 'Electrode', 'Omanyte', 'Poliwhirl', 'Mew', 'Alolan Sandslash', 'Mewtwo', 'Weezing', 'Gastly', 'Victreebel', 'Ivysaur', 'MrMime', 'Shellder', 'Scyther', 'Diglett', 'Primeape', 'Raichu']\n", "\n", "textLabels.sort() # important for gradio to get the labels in the right order\n", "\n", "\n", "\n", "def get_x(o): return o['image_file_path'] # get the image path\n", "def get_y(o): return textLabels[o['labels']] # get the label" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PILImage mode=RGB size=192x192" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img = PILImage.create('charizard.png')\n", "\n", "img.thumbnail((192,192))\n", "img" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#|export\n", "\n", "learn = load_learner('pokemonClassifier.pkl')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 339 ms, sys: 319 ms, total: 658 ms\n", "Wall time: 186 ms\n" ] }, { "data": { "text/plain": [ "('Charizard',\n", " tensor(14),\n", " tensor([1.6294e-11, 2.0247e-11, 1.0328e-10, 1.6482e-11, 2.0166e-13, 1.2074e-10,\n", " 1.0535e-10, 7.9430e-12, 3.2703e-12, 2.2811e-10, 1.5804e-12, 2.1864e-13,\n", " 4.6053e-11, 2.7612e-10, 1.0000e+00, 2.9166e-09, 2.7352e-09, 6.2743e-12,\n", " 5.7040e-12, 1.6504e-12, 3.0238e-10, 1.2190e-12, 3.8244e-12, 1.3876e-12,\n", " 2.7526e-11, 4.0809e-11, 3.9962e-12, 3.3808e-08, 6.3109e-12, 1.1081e-11,\n", " 1.9765e-11, 4.3113e-11, 8.6860e-13, 6.3310e-11, 4.0973e-12, 6.8163e-13,\n", " 1.4500e-12, 9.5233e-11, 7.4777e-11, 1.5134e-10, 5.0226e-12, 2.5508e-12,\n", " 9.2954e-12, 4.9776e-11, 1.6037e-09, 5.7774e-13, 3.5998e-11, 3.1026e-11,\n", " 3.2192e-12, 1.1869e-13, 1.5274e-10, 1.7022e-10, 9.6923e-12, 3.0035e-12,\n", " 5.0917e-11, 9.3440e-13, 3.3650e-12, 3.9613e-12, 1.0874e-12, 5.1693e-12,\n", " 2.5724e-11, 7.2556e-12, 6.0580e-11, 1.5532e-09, 2.5581e-13, 4.8831e-08,\n", " 8.7632e-11, 2.2403e-12, 1.6054e-11, 1.5024e-10, 3.0340e-13, 1.6080e-11,\n", " 5.9702e-12, 1.1579e-14, 6.2445e-11, 1.1506e-10, 1.1411e-10, 8.6987e-13,\n", " 1.7675e-11, 2.1116e-10, 2.6802e-12, 3.2734e-11, 4.8214e-12, 6.1318e-12,\n", " 5.1872e-11, 5.0435e-12, 7.2060e-11, 8.4718e-10, 1.9139e-10, 4.9749e-13,\n", " 5.1288e-12, 6.0713e-11, 1.6556e-11, 5.1379e-14, 7.4517e-13, 6.3343e-13,\n", " 1.1125e-11, 7.1771e-10, 6.9467e-11, 5.5323e-10, 3.0324e-11, 2.0448e-10,\n", " 1.8076e-12, 3.2984e-12, 3.8678e-14, 2.0709e-10, 1.3247e-11, 2.5830e-12,\n", " 1.0946e-11, 2.6509e-12, 1.2348e-11, 1.1275e-08, 1.0885e-10, 9.8887e-11,\n", " 2.9328e-11, 8.8127e-13, 9.1365e-12, 3.6297e-12, 1.2275e-11, 1.4795e-10,\n", " 1.1259e-11, 2.1077e-13, 3.6575e-13, 3.4803e-12, 4.5221e-12, 1.8477e-11,\n", " 1.1668e-10, 1.2937e-10, 1.9657e-12, 1.6585e-10, 4.0932e-11, 6.6750e-13,\n", " 1.1825e-12, 2.8705e-12, 1.9462e-11, 5.1734e-11, 3.1526e-13, 8.2118e-13,\n", " 5.7200e-12, 5.0604e-11, 3.5651e-11, 3.1711e-12, 1.4307e-11, 2.9015e-12,\n", " 7.9247e-13, 1.4506e-12, 2.0225e-11, 5.1560e-12, 3.6228e-10, 6.5015e-10]))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time learn.predict(img)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "#|export\n", "\n", "\n", "categories = textLabels\n", "\n", "def classify_img(img):\n", " img = PILImage.create(img)\n", " pred,pred_idx,probs = learn.predict(img)\n", " return dict(zip(categories, map(float, probs)))\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'Abra': 1.6293888113749766e-11,\n", " 'Aerodactyl': 2.0247269139073154e-11,\n", " 'Alakazam': 1.0328406185866612e-10,\n", " 'Alolan Sandslash': 1.6481836728754473e-11,\n", " 'Arbok': 2.0166080448320162e-13,\n", " 'Arcanine': 1.2074347077728476e-10,\n", " 'Articuno': 1.0534847993959318e-10,\n", " 'Beedrill': 7.942960525419984e-12,\n", " 'Bellsprout': 3.2703340903383893e-12,\n", " 'Blastoise': 2.2811047495352454e-10,\n", " 'Bulbasaur': 1.5803808999306779e-12,\n", " 'Butterfree': 2.1864118588538206e-13,\n", " 'Caterpie': 4.605293577042424e-11,\n", " 'Chansey': 2.761200712519951e-10,\n", " 'Charizard': 0.9999998807907104,\n", " 'Charmander': 2.9166107307077027e-09,\n", " 'Charmeleon': 2.7352133891156427e-09,\n", " 'Clefable': 6.274345192708308e-12,\n", " 'Clefairy': 5.703982425275811e-12,\n", " 'Cloyster': 1.6504446464019051e-12,\n", " 'Cubone': 3.0237948256406355e-10,\n", " 'Dewgong': 1.2189873676432539e-12,\n", " 'Diglett': 3.8243999980758225e-12,\n", " 'Ditto': 1.3876125725884036e-12,\n", " 'Dodrio': 2.7525806287065357e-11,\n", " 'Doduo': 4.080935936401353e-11,\n", " 'Dragonair': 3.996173617709653e-12,\n", " 'Dragonite': 3.3808071009389096e-08,\n", " 'Dratini': 6.3109040562836505e-12,\n", " 'Drowzee': 1.1081285195002621e-11,\n", " 'Dugtrio': 1.976534387548856e-11,\n", " 'Eevee': 4.311313805960282e-11,\n", " 'Ekans': 8.686041794679633e-13,\n", " 'Electabuzz': 6.330992674552505e-11,\n", " 'Electrode': 4.097343558190358e-12,\n", " 'Exeggcute': 6.816322137802311e-13,\n", " 'Exeggutor': 1.4500425599833777e-12,\n", " 'Farfetchd': 9.523325184002118e-11,\n", " 'Fearow': 7.477667790523057e-11,\n", " 'Flareon': 1.5133941322353905e-10,\n", " 'Gastly': 5.0225552883365054e-12,\n", " 'Gengar': 2.550755179991926e-12,\n", " 'Geodude': 9.295406458442734e-12,\n", " 'Gloom': 4.977648501713894e-11,\n", " 'Golbat': 1.6036855177148368e-09,\n", " 'Goldeen': 5.777362095671368e-13,\n", " 'Golduck': 3.599813155896747e-11,\n", " 'Golem': 3.1025581409549474e-11,\n", " 'Graveler': 3.219196176990069e-12,\n", " 'Grimer': 1.1869055272038104e-13,\n", " 'Growlithe': 1.5274093101425024e-10,\n", " 'Gyarados': 1.702197410802242e-10,\n", " 'Haunter': 9.692313791831442e-12,\n", " 'Hitmonchan': 3.0034722538901937e-12,\n", " 'Hitmonlee': 5.0917162847108344e-11,\n", " 'Horsea': 9.3440001829731e-13,\n", " 'Hypno': 3.365032211211094e-12,\n", " 'Ivysaur': 3.96131825258772e-12,\n", " 'Jigglypuff': 1.087383221659577e-12,\n", " 'Jolteon': 5.16925391380596e-12,\n", " 'Jynx': 2.5723661048471236e-11,\n", " 'Kabuto': 7.255622318236288e-12,\n", " 'Kabutops': 6.05802560893487e-11,\n", " 'Kadabra': 1.5531657071576888e-09,\n", " 'Kakuna': 2.558086392451947e-13,\n", " 'Kangaskhan': 4.883055382265411e-08,\n", " 'Kingler': 8.763197112404697e-11,\n", " 'Koffing': 2.240282612198108e-12,\n", " 'Krabby': 1.6053823201356288e-11,\n", " 'Lapras': 1.502393071062258e-10,\n", " 'Lickitung': 3.0339638678981984e-13,\n", " 'Machamp': 1.607965843808401e-11,\n", " 'Machoke': 5.9702021971974606e-12,\n", " 'Machop': 1.1579162311598466e-14,\n", " 'Magikarp': 6.244489647588836e-11,\n", " 'Magmar': 1.1506313957188041e-10,\n", " 'Magnemite': 1.1411393358029542e-10,\n", " 'Magneton': 8.69867546049452e-13,\n", " 'Mankey': 1.7674538915768423e-11,\n", " 'Marowak': 2.1116335069404357e-10,\n", " 'Meowth': 2.6802496853883806e-12,\n", " 'Metapod': 3.273362483846576e-11,\n", " 'Mew': 4.8214275454039335e-12,\n", " 'Mewtwo': 6.131818143517709e-12,\n", " 'Moltres': 5.187241608473059e-11,\n", " 'MrMime': 5.043453935732467e-12,\n", " 'Muk': 7.205962909706543e-11,\n", " 'Nidoking': 8.471841006496561e-10,\n", " 'Nidoqueen': 1.9138537976637338e-10,\n", " 'Nidorina': 4.974852994832357e-13,\n", " 'Nidorino': 5.128771973089696e-12,\n", " 'Ninetales': 6.07129346796853e-11,\n", " 'Oddish': 1.6555909421178683e-11,\n", " 'Omanyte': 5.137901619455855e-14,\n", " 'Omastar': 7.451732915615683e-13,\n", " 'Onix': 6.334296151835894e-13,\n", " 'Paras': 1.1125355844909812e-11,\n", " 'Parasect': 7.17707893116426e-10,\n", " 'Persian': 6.946727221235349e-11,\n", " 'Pidgeot': 5.53234569267147e-10,\n", " 'Pidgeotto': 3.0324277811022426e-11,\n", " 'Pidgey': 2.044788505184414e-10,\n", " 'Pikachu': 1.807614604873442e-12,\n", " 'Pinsir': 3.2983732932423404e-12,\n", " 'Poliwag': 3.867809257552743e-14,\n", " 'Poliwhirl': 2.0708737502594943e-10,\n", " 'Poliwrath': 1.3246836787217386e-11,\n", " 'Ponyta': 2.582989377941658e-12,\n", " 'Porygon': 1.0945752117186291e-11,\n", " 'Primeape': 2.650934376527414e-12,\n", " 'Psyduck': 1.2348256965555304e-11,\n", " 'Raichu': 1.1275403721811017e-08,\n", " 'Rapidash': 1.0884923518084122e-10,\n", " 'Raticate': 9.888743296437852e-11,\n", " 'Rattata': 2.9328074691026274e-11,\n", " 'Rhydon': 8.812668476909646e-13,\n", " 'Rhyhorn': 9.13653961515104e-12,\n", " 'Sandshrew': 3.6297128497286835e-12,\n", " 'Sandslash': 1.227473418047298e-11,\n", " 'Scyther': 1.4795492608854488e-10,\n", " 'Seadra': 1.125913945410062e-11,\n", " 'Seaking': 2.1077070481729382e-13,\n", " 'Seel': 3.657544102655952e-13,\n", " 'Shellder': 3.480283118986738e-12,\n", " 'Slowbro': 4.522078458218948e-12,\n", " 'Slowpoke': 1.847664035659058e-11,\n", " 'Snorlax': 1.1667999899600545e-10,\n", " 'Spearow': 1.2937266535839598e-10,\n", " 'Squirtle': 1.965701906803119e-12,\n", " 'Starmie': 1.6584837669864072e-10,\n", " 'Staryu': 4.093221595002916e-11,\n", " 'Tangela': 6.674953016531926e-13,\n", " 'Tauros': 1.1824862920437051e-12,\n", " 'Tentacool': 2.8705122046696063e-12,\n", " 'Tentacruel': 1.9462214825849422e-11,\n", " 'Vaporeon': 5.1733693717803675e-11,\n", " 'Venomoth': 3.1525555278279216e-13,\n", " 'Venonat': 8.211819895950767e-13,\n", " 'Venusaur': 5.719965300021723e-12,\n", " 'Victreebel': 5.060376423449142e-11,\n", " 'Vileplume': 3.5651426255611796e-11,\n", " 'Voltorb': 3.1710589015743196e-12,\n", " 'Vulpix': 1.4306563746180334e-11,\n", " 'Wartortle': 2.9015140984300913e-12,\n", " 'Weedle': 7.924691718813603e-13,\n", " 'Weepinbell': 1.450642882726283e-12,\n", " 'Weezing': 2.0224998759088564e-11,\n", " 'Wigglytuff': 5.1559802434486546e-12,\n", " 'Zapdos': 3.622799837899038e-10,\n", " 'Zubat': 6.501473803766089e-10}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "classify_img(img)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/7b/sp7tfsln0qd98lw0fdt6qfwh0000gp/T/ipykernel_2586/2391479500.py:3: GradioDeprecationWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components\n", " image = gr.inputs.Image(shape=(224,224))\n", "/var/folders/7b/sp7tfsln0qd98lw0fdt6qfwh0000gp/T/ipykernel_2586/2391479500.py:3: GradioDeprecationWarning: `optional` parameter is deprecated, and it has no effect\n", " image = gr.inputs.Image(shape=(224,224))\n", "/var/folders/7b/sp7tfsln0qd98lw0fdt6qfwh0000gp/T/ipykernel_2586/2391479500.py:4: GradioDeprecationWarning: Usage of gradio.outputs is deprecated, and will not be supported in the future, please import your components from gradio.components\n", " label = gr.outputs.Label(num_top_classes=3)\n", "/var/folders/7b/sp7tfsln0qd98lw0fdt6qfwh0000gp/T/ipykernel_2586/2391479500.py:4: GradioUnusedKwargWarning: You have unused kwarg parameters in Label, please remove them: {'type': 'auto'}\n", " label = gr.outputs.Label(num_top_classes=3)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7860\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/plain": [] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#|export\n", "\n", "image = gr.inputs.Image(shape=(224,224))\n", "label = gr.outputs.Label(num_top_classes=3)\n", "\n", "examples = [\n", " 'charizard.png',\n", " 'cubone.jpeg',\n", " 'garydos.webp',\n", " 'charizard.jpeg'\n", "]\n", "\n", "intf = gr.Interface(inputs=image, outputs=label, fn=classify_img, examples=examples)\n", "intf.launch(inline=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Export to script" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import nbdev\n", "\n", "nbdev.export.nb_export('pokemonScript.ipynb', './')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }