Spaces:
Runtime error
Runtime error
add files via commit
Browse files- app.ipynb +1 -0
- app.py +81 -4
- app.py:Zone.Identifier +3 -0
- cat.jpg +0 -0
- cat.jpg:Zone.Identifier +0 -0
- challenge.jpg +0 -0
- challenge.jpg:Zone.Identifier +0 -0
- dog-v-cat.ipynb:Zone.Identifier +3 -0
- dog.jpg +0 -0
- dog.jpg:Zone.Identifier +0 -0
app.ipynb
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"#|default_exp app","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-07-21T08:29:25.596102Z","iopub.execute_input":"2023-07-21T08:29:25.596719Z","iopub.status.idle":"2023-07-21T08:29:25.627316Z","shell.execute_reply.started":"2023-07-21T08:29:25.596686Z","shell.execute_reply":"2023-07-21T08:29:25.626121Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"code","source":"!pip install -Uqq fastai","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:32:15.348607Z","iopub.execute_input":"2023-07-21T08:32:15.348970Z","iopub.status.idle":"2023-07-21T08:32:27.116094Z","shell.execute_reply.started":"2023-07-21T08:32:15.348943Z","shell.execute_reply":"2023-07-21T08:32:27.114419Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"code","source":"!pip install gradio","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install nbdev","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:55:35.421170Z","iopub.execute_input":"2023-07-21T08:55:35.421571Z","iopub.status.idle":"2023-07-21T08:55:46.185794Z","shell.execute_reply.started":"2023-07-21T08:55:35.421541Z","shell.execute_reply":"2023-07-21T08:55:46.184279Z"},"trusted":true},"execution_count":20,"outputs":[{"name":"stdout","text":"Collecting nbdev\n Downloading nbdev-2.3.12-py3-none-any.whl (64 kB)\n\u001b[2K \u001b[90mββββββββββββββββββββββββββββββββββββββββ\u001b[0m \u001b[32m64.8/64.8 kB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hRequirement already satisfied: fastcore>=1.5.27 in /opt/conda/lib/python3.10/site-packages (from nbdev) (1.5.29)\nCollecting execnb>=0.1.4 (from nbdev)\n Downloading execnb-0.1.5-py3-none-any.whl (13 kB)\nRequirement already satisfied: astunparse in /opt/conda/lib/python3.10/site-packages (from nbdev) (1.6.3)\nCollecting ghapi>=1.0.3 (from nbdev)\n Downloading ghapi-1.0.4-py3-none-any.whl (58 kB)\n\u001b[2K \u001b[90mββββββββββββββββββββββββββββββββββββββββ\u001b[0m \u001b[32m58.7/58.7 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hCollecting watchdog (from nbdev)\n Downloading watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl (82 kB)\n\u001b[2K \u001b[90mββββββββββββββββββββββββββββββββββββββββ\u001b[0m \u001b[32m82.1/82.1 kB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hRequirement already satisfied: asttokens in /opt/conda/lib/python3.10/site-packages (from nbdev) (2.2.1)\nRequirement already satisfied: PyYAML in /opt/conda/lib/python3.10/site-packages (from nbdev) (6.0)\nRequirement already satisfied: ipython in /opt/conda/lib/python3.10/site-packages (from execnb>=0.1.4->nbdev) (8.14.0)\nRequirement already satisfied: pip in /opt/conda/lib/python3.10/site-packages (from fastcore>=1.5.27->nbdev) (23.1.2)\nRequirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from fastcore>=1.5.27->nbdev) (21.3)\nRequirement already satisfied: six in /opt/conda/lib/python3.10/site-packages (from asttokens->nbdev) (1.16.0)\nRequirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.10/site-packages (from astunparse->nbdev) (0.40.0)\nRequirement already satisfied: backcall in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (0.2.0)\nRequirement already satisfied: decorator in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (5.1.1)\nRequirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (0.18.2)\nRequirement already satisfied: matplotlib-inline in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (0.1.6)\nRequirement already satisfied: pickleshare in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (0.7.5)\nRequirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (3.0.38)\nRequirement already satisfied: pygments>=2.4.0 in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (2.15.1)\nRequirement already satisfied: stack-data in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (0.6.2)\nRequirement already satisfied: traitlets>=5 in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (5.9.0)\nRequirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.10/site-packages (from ipython->execnb>=0.1.4->nbdev) (4.8.0)\nRequirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.10/site-packages (from packaging->fastcore>=1.5.27->nbdev) (3.0.9)\nRequirement already satisfied: parso<0.9.0,>=0.8.0 in /opt/conda/lib/python3.10/site-packages (from jedi>=0.16->ipython->execnb>=0.1.4->nbdev) (0.8.3)\nRequirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.10/site-packages (from pexpect>4.3->ipython->execnb>=0.1.4->nbdev) (0.7.0)\nRequirement already satisfied: wcwidth in /opt/conda/lib/python3.10/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython->execnb>=0.1.4->nbdev) (0.2.6)\nRequirement already satisfied: executing>=1.2.0 in /opt/conda/lib/python3.10/site-packages (from stack-data->ipython->execnb>=0.1.4->nbdev) (1.2.0)\nRequirement already satisfied: pure-eval in /opt/conda/lib/python3.10/site-packages (from stack-data->ipython->execnb>=0.1.4->nbdev) (0.2.2)\nInstalling collected packages: watchdog, ghapi, execnb, nbdev\nSuccessfully installed execnb-0.1.5 ghapi-1.0.4 nbdev-2.3.12 watchdog-3.0.0\n","output_type":"stream"}]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Dog or cat","metadata":{}},{"cell_type":"code","source":"#|export\nfrom fastai.vision.all import *\nimport gradio as gr\n\ndef is_cat(x): \n return x[0].isupper()","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:38:28.637767Z","iopub.execute_input":"2023-07-21T08:38:28.638143Z","iopub.status.idle":"2023-07-21T08:38:28.643710Z","shell.execute_reply.started":"2023-07-21T08:38:28.638112Z","shell.execute_reply":"2023-07-21T08:38:28.642497Z"},"trusted":true},"execution_count":11,"outputs":[]},{"cell_type":"code","source":"im = PILImage.create('/kaggle/input/dog-or-cat-test/dog.jpg')\nim.thumbnail((192,192))\nim","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:39:39.248125Z","iopub.execute_input":"2023-07-21T08:39:39.248487Z","iopub.status.idle":"2023-07-21T08:39:39.271159Z","shell.execute_reply.started":"2023-07-21T08:39:39.248416Z","shell.execute_reply":"2023-07-21T08:39:39.270088Z"},"trusted":true},"execution_count":12,"outputs":[{"execution_count":12,"output_type":"execute_result","data":{"text/plain":"PILImage mode=RGB size=183x122","image/png":"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\n"},"metadata":{}}]},{"cell_type":"code","source":"#|export\nlearn = load_learner('/kaggle/input/models/model.pkl')","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:42:55.688046Z","iopub.execute_input":"2023-07-21T08:42:55.688368Z","iopub.status.idle":"2023-07-21T08:42:56.242945Z","shell.execute_reply.started":"2023-07-21T08:42:55.688342Z","shell.execute_reply":"2023-07-21T08:42:56.241857Z"},"trusted":true},"execution_count":13,"outputs":[]},{"cell_type":"code","source":"learn.predict(im)","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:43:24.832722Z","iopub.execute_input":"2023-07-21T08:43:24.833049Z","iopub.status.idle":"2023-07-21T08:43:25.152244Z","shell.execute_reply.started":"2023-07-21T08:43:24.833024Z","shell.execute_reply":"2023-07-21T08:43:25.151569Z"},"trusted":true},"execution_count":14,"outputs":[{"output_type":"display_data","data":{"text/plain":"<IPython.core.display.HTML object>","text/html":"\n<style>\n /* Turns off some styling */\n progress {\n /* gets rid of default border in Firefox and Opera. */\n border: none;\n /* Needs to be in here for Safari polyfill so background images work as expected. */\n background-size: auto;\n }\n progress:not([value]), progress:not([value])::-webkit-progress-bar {\n background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n }\n .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n background: #F44336;\n }\n</style>\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<IPython.core.display.HTML object>","text/html":""},"metadata":{}},{"execution_count":14,"output_type":"execute_result","data":{"text/plain":"('False', tensor(0), tensor([0.9911, 0.0089]))"},"metadata":{}}]},{"cell_type":"code","source":"#|export\ncategories = ('Dog', 'Cat')\ndef classify_image(img):\n pred, idx, probs = learn.predict(img)\n return dict(zip(categories, map(float, probs)))\n","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:45:41.484565Z","iopub.execute_input":"2023-07-21T08:45:41.484901Z","iopub.status.idle":"2023-07-21T08:45:41.491090Z","shell.execute_reply.started":"2023-07-21T08:45:41.484878Z","shell.execute_reply":"2023-07-21T08:45:41.489934Z"},"trusted":true},"execution_count":15,"outputs":[]},{"cell_type":"code","source":"classify_image(im)","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:45:50.517529Z","iopub.execute_input":"2023-07-21T08:45:50.517872Z","iopub.status.idle":"2023-07-21T08:45:50.589937Z","shell.execute_reply.started":"2023-07-21T08:45:50.517837Z","shell.execute_reply":"2023-07-21T08:45:50.589050Z"},"trusted":true},"execution_count":16,"outputs":[{"output_type":"display_data","data":{"text/plain":"<IPython.core.display.HTML object>","text/html":"\n<style>\n /* Turns off some styling */\n progress {\n /* gets rid of default border in Firefox and Opera. */\n border: none;\n /* Needs to be in here for Safari polyfill so background images work as expected. */\n background-size: auto;\n }\n progress:not([value]), progress:not([value])::-webkit-progress-bar {\n background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n }\n .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n background: #F44336;\n }\n</style>\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<IPython.core.display.HTML object>","text/html":""},"metadata":{}},{"execution_count":16,"output_type":"execute_result","data":{"text/plain":"{'Dog': 0.99107426404953, 'Cat': 0.008925721980631351}"},"metadata":{}}]},{"cell_type":"code","source":"#|export\nimage = gr.inputs.Image(shape=(192,192))\nlabel = gr.outputs.Label()\nexamples = ['/kaggle/input/dog-or-cat-test/dog.jpg','/kaggle/input/dog-or-cat-test/cat.jpg', '/kaggle/input/dog-or-cat-test/challenge.jpg']\n\nintf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)\nintf.launch(inline=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"m = learn.model","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:57:01.192005Z","iopub.execute_input":"2023-07-21T08:57:01.192417Z","iopub.status.idle":"2023-07-21T08:57:01.196850Z","shell.execute_reply.started":"2023-07-21T08:57:01.192384Z","shell.execute_reply":"2023-07-21T08:57:01.196062Z"},"trusted":true},"execution_count":21,"outputs":[]},{"cell_type":"code","source":"ps = list(m.parameters())","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:57:51.126868Z","iopub.execute_input":"2023-07-21T08:57:51.127945Z","iopub.status.idle":"2023-07-21T08:57:51.133701Z","shell.execute_reply.started":"2023-07-21T08:57:51.127906Z","shell.execute_reply":"2023-07-21T08:57:51.132368Z"},"trusted":true},"execution_count":22,"outputs":[]},{"cell_type":"code","source":"ps[1]","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:57:58.454022Z","iopub.execute_input":"2023-07-21T08:57:58.454387Z","iopub.status.idle":"2023-07-21T08:57:58.463269Z","shell.execute_reply.started":"2023-07-21T08:57:58.454358Z","shell.execute_reply":"2023-07-21T08:57:58.462376Z"},"trusted":true},"execution_count":23,"outputs":[{"execution_count":23,"output_type":"execute_result","data":{"text/plain":"Parameter containing:\ntensor([ 2.3698e-01, 2.6464e-01, -5.1096e-08, 5.1736e-01, 3.4404e-09,\n 2.2246e-01, 4.2287e-01, 1.3153e-07, 2.5117e-01, 1.5152e-06,\n 3.1797e-01, 2.5037e-01, 3.7843e-01, 1.0862e-05, 2.7563e-01,\n 2.3771e-01, 2.4135e-01, 3.9426e-01, 4.6984e-01, 2.9022e-01,\n 2.7238e-01, 2.7887e-01, 2.9154e-01, 2.0574e-01, 2.6032e-01,\n 2.7765e-01, 2.9126e-01, 3.1590e-01, 3.8782e-01, 3.0372e-01,\n 2.6836e-01, 2.0942e-01, 2.8614e-01, 3.3151e-01, 4.2780e-01,\n 3.7317e-01, 7.4804e-08, 1.8977e-01, 1.4740e-08, 2.2375e-01,\n 1.7954e-01, 2.4913e-01, 2.7366e-01, 2.6011e-01, 2.9506e-01,\n 3.0007e-01, 2.2407e-01, 2.6344e-01, 2.2001e-08, 2.6499e-01,\n 2.2158e-01, 2.8276e-01, 3.2911e-01, 2.2805e-01, 3.6648e-01,\n 2.1239e-01, 2.3830e-01, 2.5042e-01, 5.2609e-01, 2.4795e-01,\n 2.9495e-01, 2.5872e-01, 4.8332e-01, 2.6686e-01],\n requires_grad=True)"},"metadata":{}}]},{"cell_type":"markdown","source":"# Export","metadata":{}},{"cell_type":"code","source":"from nbdev.export import nb_export","metadata":{"execution":{"iopub.status.busy":"2023-07-21T08:59:59.010989Z","iopub.execute_input":"2023-07-21T08:59:59.011326Z","iopub.status.idle":"2023-07-21T08:59:59.015294Z","shell.execute_reply.started":"2023-07-21T08:59:59.011302Z","shell.execute_reply":"2023-07-21T08:59:59.014495Z"},"trusted":true},"execution_count":26,"outputs":[]},{"cell_type":"code","source":"nb_export('dog_v_cat.ipynb', 'app')","metadata":{"execution":{"iopub.status.busy":"2023-07-21T09:00:44.175736Z","iopub.execute_input":"2023-07-21T09:00:44.176095Z","iopub.status.idle":"2023-07-21T09:00:44.253274Z","shell.execute_reply.started":"2023-07-21T09:00:44.176064Z","shell.execute_reply":"2023-07-21T09:00:44.251908Z"},"trusted":true},"execution_count":28,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn[28], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mnb_export\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdog_v_cat.ipynb\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mapp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/nbdev/export.py:48\u001b[0m, in \u001b[0;36mnb_export\u001b[0;34m(nbname, lib_path, procs, debug, mod_maker, name)\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m lib_path \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: lib_path \u001b[38;5;241m=\u001b[39m get_config()\u001b[38;5;241m.\u001b[39mlib_path\n\u001b[1;32m 47\u001b[0m exp \u001b[38;5;241m=\u001b[39m ExportModuleProc()\n\u001b[0;32m---> 48\u001b[0m nb \u001b[38;5;241m=\u001b[39m \u001b[43mNBProcessor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnbname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mexp\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43mL\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprocs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdebug\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdebug\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 49\u001b[0m nb\u001b[38;5;241m.\u001b[39mprocess()\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m mod,cells \u001b[38;5;129;01min\u001b[39;00m exp\u001b[38;5;241m.\u001b[39mmodules\u001b[38;5;241m.\u001b[39mitems():\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/nbdev/process.py:92\u001b[0m, in \u001b[0;36mNBProcessor.__init__\u001b[0;34m(self, path, procs, nb, debug, rm_directives, process)\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, procs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, nb\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, debug\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, rm_directives\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, process\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m---> 92\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnb \u001b[38;5;241m=\u001b[39m \u001b[43mread_nb\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mif\u001b[39;00m nb \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m nb\n\u001b[1;32m 93\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlang \u001b[38;5;241m=\u001b[39m nb_lang(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnb)\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m cell \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnb\u001b[38;5;241m.\u001b[39mcells: cell\u001b[38;5;241m.\u001b[39mdirectives_ \u001b[38;5;241m=\u001b[39m extract_directives(cell, remove\u001b[38;5;241m=\u001b[39mrm_directives, lang\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlang)\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/execnb/nbio.py:57\u001b[0m, in \u001b[0;36mread_nb\u001b[0;34m(path)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mread_nb\u001b[39m(path):\n\u001b[1;32m 56\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mReturn notebook at `path`\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 57\u001b[0m res \u001b[38;5;241m=\u001b[39m dict2nb(\u001b[43m_read_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mutf-8\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 58\u001b[0m res[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpath_\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(path)\n\u001b[1;32m 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/execnb/nbio.py:16\u001b[0m, in \u001b[0;36m_read_json\u001b[0;34m(self, encoding, errors)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_read_json\u001b[39m(\u001b[38;5;28mself\u001b[39m, encoding\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, errors\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m---> 16\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m loads(\u001b[43mPath\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_text\u001b[49m\u001b[43m(\u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m)\n","File \u001b[0;32m/opt/conda/lib/python3.10/pathlib.py:1134\u001b[0m, in \u001b[0;36mPath.read_text\u001b[0;34m(self, encoding, errors)\u001b[0m\n\u001b[1;32m 1130\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;124;03mOpen the file in text mode, read it, and close the file.\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1133\u001b[0m encoding \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mtext_encoding(encoding)\n\u001b[0;32m-> 1134\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m 1135\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m f\u001b[38;5;241m.\u001b[39mread()\n","File \u001b[0;32m/opt/conda/lib/python3.10/pathlib.py:1119\u001b[0m, in \u001b[0;36mPath.open\u001b[0;34m(self, mode, buffering, encoding, errors, newline)\u001b[0m\n\u001b[1;32m 1117\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m mode:\n\u001b[1;32m 1118\u001b[0m encoding \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mtext_encoding(encoding)\n\u001b[0;32m-> 1119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_accessor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffering\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1120\u001b[0m \u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[43m)\u001b[49m\n","\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'dog_v_cat.ipynb'"],"ename":"FileNotFoundError","evalue":"[Errno 2] No such file or directory: 'dog_v_cat.ipynb'","output_type":"error"}]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}
|
app.py
CHANGED
@@ -1,7 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import gradio as gr
|
2 |
|
3 |
-
def
|
4 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
-
|
7 |
-
|
|
|
1 |
+
# AUTOGENERATED! DO NOT EDIT! File to edit: dog_v_cat.ipynb.
|
2 |
+
|
3 |
+
# %% auto 0
|
4 |
+
__all__ = ['learn', 'categories', 'image', 'label', 'examples', 'intf', 'is_cat', 'classify_image']
|
5 |
+
|
6 |
+
# %% dog_v_cat.ipynb 1
|
7 |
+
from fastai.vision.all import *
|
8 |
+
import gradio as gr
|
9 |
+
|
10 |
+
def is_cat(x):
|
11 |
+
return x[0].isupper()
|
12 |
+
|
13 |
+
# %% dog_v_cat.ipynb 2
|
14 |
+
from fastai.vision.all import *
|
15 |
+
import gradio as gr
|
16 |
+
|
17 |
+
def is_cat(x):
|
18 |
+
return x[0].isupper()
|
19 |
+
|
20 |
+
# %% dog_v_cat.ipynb 4
|
21 |
+
from fastai.vision.all import *
|
22 |
+
import gradio as gr
|
23 |
+
|
24 |
+
def is_cat(x):
|
25 |
+
return x[0].isupper()
|
26 |
+
|
27 |
+
# %% dog_v_cat.ipynb 6
|
28 |
+
from fastai.vision.all import *
|
29 |
+
import gradio as gr
|
30 |
+
|
31 |
+
def is_cat(x):
|
32 |
+
return x[0].isupper()
|
33 |
+
|
34 |
+
# %% dog_v_cat.ipynb 7
|
35 |
+
from fastai.vision.all import *
|
36 |
import gradio as gr
|
37 |
|
38 |
+
def is_cat(x):
|
39 |
+
return x[0].isupper()
|
40 |
+
|
41 |
+
# %% dog_v_cat.ipynb 8
|
42 |
+
from fastai.vision.all import *
|
43 |
+
import gradio as gr
|
44 |
+
|
45 |
+
def is_cat(x):
|
46 |
+
return x[0].isupper()
|
47 |
+
|
48 |
+
# %% dog_v_cat.ipynb 9
|
49 |
+
from fastai.vision.all import *
|
50 |
+
import gradio as gr
|
51 |
+
|
52 |
+
def is_cat(x):
|
53 |
+
return x[0].isupper()
|
54 |
+
|
55 |
+
# %% dog_v_cat.ipynb 10
|
56 |
+
from fastai.vision.all import *
|
57 |
+
import gradio as gr
|
58 |
+
|
59 |
+
def is_cat(x):
|
60 |
+
return x[0].isupper()
|
61 |
+
|
62 |
+
# %% dog_v_cat.ipynb 12
|
63 |
+
learn = load_learner('/kaggle/input/models/model.pkl')
|
64 |
+
|
65 |
+
# %% dog_v_cat.ipynb 14
|
66 |
+
categories = ('Dog', 'Cat')
|
67 |
+
def classify_image(img):
|
68 |
+
pred, idx, probs = learn.predict(img)
|
69 |
+
return dict(zip(categories, map(float, probs)))
|
70 |
+
|
71 |
+
# %% dog_v_cat.ipynb 16
|
72 |
+
image = gr.inputs.Image(shape=(192,192))
|
73 |
+
label = gr.outputs.Label()
|
74 |
+
examples = ['/kaggle/input/dog-or-cat-test/dog.jpg','/kaggle/input/dog-or-cat-test/cat.jpg', '/kaggle/input/dog-or-cat-test/challenge.jpg']
|
75 |
+
|
76 |
+
intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)
|
77 |
+
|
78 |
+
# %% dog_v_cat.ipynb 17
|
79 |
+
image = gr.inputs.Image(shape=(192,192))
|
80 |
+
label = gr.outputs.Label()
|
81 |
+
examples = ['/kaggle/input/dog-or-cat-test/dog.jpg','/kaggle/input/dog-or-cat-test/cat.jpg', '/kaggle/input/dog-or-cat-test/challenge.jpg']
|
82 |
|
83 |
+
intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)
|
84 |
+
intf.launch(inline=False)
|
app.py:Zone.Identifier
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
[ZoneTransfer]
|
2 |
+
ZoneId=3
|
3 |
+
HostUrl=https://www.kaggle.com/
|
cat.jpg
ADDED
cat.jpg:Zone.Identifier
ADDED
File without changes
|
challenge.jpg
ADDED
challenge.jpg:Zone.Identifier
ADDED
File without changes
|
dog-v-cat.ipynb:Zone.Identifier
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
[ZoneTransfer]
|
2 |
+
ZoneId=3
|
3 |
+
HostUrl=https://www.kaggle.com/
|
dog.jpg
ADDED
dog.jpg:Zone.Identifier
ADDED
File without changes
|