{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "#! default_exp app" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: nbdev in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (2.3.6)\n", "Requirement already satisfied: execnb>=0.1.3 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (0.1.3)\n", "Requirement already satisfied: ghapi>=1.0.3 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (1.0.3)\n", "Requirement already satisfied: fastcore>=1.5.27 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (1.5.27)\n", "Requirement already satisfied: astunparse in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (1.6.3)\n", "Requirement already satisfied: PyYAML in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (6.0)\n", "Requirement already satisfied: asttokens in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (2.0.8)\n", "Requirement already satisfied: watchdog in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from nbdev) (2.1.9)\n", "Requirement already satisfied: ipython in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from execnb>=0.1.3->nbdev) (8.5.0)\n", "Requirement already satisfied: pip in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from fastcore>=1.5.27->nbdev) (22.2.2)\n", "Requirement already satisfied: packaging in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from fastcore>=1.5.27->nbdev) (21.3)\n", "Requirement already satisfied: six in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from asttokens->nbdev) (1.16.0)\n", "Requirement already satisfied: wheel<1.0,>=0.23.0 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from astunparse->nbdev) (0.37.1)\n", "Requirement already satisfied: pickleshare in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (0.7.5)\n", "Requirement already satisfied: decorator in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (5.1.1)\n", "Requirement already satisfied: pygments>=2.4.0 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (2.13.0)\n", "Requirement already satisfied: traitlets>=5 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (5.4.0)\n", "Requirement already satisfied: appnope in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (0.1.3)\n", "Requirement already satisfied: prompt-toolkit<3.1.0,>3.0.1 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (3.0.31)\n", "Requirement already satisfied: pexpect>4.3 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (4.8.0)\n", "Requirement already satisfied: jedi>=0.16 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (0.18.1)\n", "Requirement already satisfied: matplotlib-inline in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (0.1.6)\n", "Requirement already satisfied: backcall in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (0.2.0)\n", "Requirement already satisfied: stack-data in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from ipython->execnb>=0.1.3->nbdev) (0.5.0)\n", "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from packaging->fastcore>=1.5.27->nbdev) (3.0.9)\n", "Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from jedi>=0.16->ipython->execnb>=0.1.3->nbdev) (0.8.3)\n", "Requirement already satisfied: ptyprocess>=0.5 in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from pexpect>4.3->ipython->execnb>=0.1.3->nbdev) (0.7.0)\n", "Requirement already satisfied: wcwidth in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from prompt-toolkit<3.1.0,>3.0.1->ipython->execnb>=0.1.3->nbdev) (0.2.5)\n", "Requirement already satisfied: pure-eval in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from stack-data->ipython->execnb>=0.1.3->nbdev) (0.2.2)\n", "Requirement already satisfied: executing in /Users/christian.sheehan/mambaforge/lib/python3.10/site-packages (from stack-data->ipython->execnb>=0.1.3->nbdev) (1.0.0)\n" ] } ], "source": [ "!pip install -U nbdev" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", "execution": { "iopub.status.busy": "2022-09-24T02:08:05.869026Z", "iopub.status.idle": "2022-09-24T02:08:05.869612Z", "shell.execute_reply": "2022-09-24T02:08:05.869333Z", "shell.execute_reply.started": "2022-09-24T02:08:05.869306Z" } }, "outputs": [], "source": [ "#! export\n", "from fastai.vision.all import *\n", "import gradio as gr\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "PILImage mode=RGB size=192x192" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "im = PILImage.create('chair1.jpg')\n", "im.thumbnail((192, 192))\n", "im" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "#! export\n", "learn = load_learner('model.pkl')" ] }, { "cell_type": "code", "execution_count": 23, "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": [ "('vitra standard chair',\n", " TensorBase(5),\n", " TensorBase([8.9706e-07, 4.6544e-05, 3.0273e-07, 1.7658e-05, 4.2272e-06,\n", " 9.9993e-01]))" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.predict(im)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "#! export\n", "categories = ('Ahrend Result Chair', 'Borge Mogenson J39 Chair', 'Breuer Cesca Chair', 'PK22 Chair', 'Series 7 Chair', 'Vitra Standard Chair')\n", "def classify_image(img):\n", " pred, idx, probs = learn.predict(img)\n", " return dict(zip(categories, map(float, probs)))" ] }, { "cell_type": "code", "execution_count": 25, "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": [ "{'Ahrend Result Chair': 8.970602038971265e-07,\n", " 'Borge Mogenson J39 Chair': 4.654424265027046e-05,\n", " 'Breuer Cesca Chair': 3.027328432381182e-07,\n", " 'PK22 Chair': 1.765757770044729e-05,\n", " 'Series 7 Chair': 4.2271908569091465e-06,\n", " 'Vitra Standard Chair': 0.9999303817749023}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "classify_image(im)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/christian.sheehan/mambaforge/lib/python3.10/site-packages/gradio/inputs.py:256: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components\n", " warnings.warn(\n", "/Users/christian.sheehan/mambaforge/lib/python3.10/site-packages/gradio/deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect\n", " warnings.warn(value)\n", "/Users/christian.sheehan/mambaforge/lib/python3.10/site-packages/gradio/outputs.py:196: UserWarning: Usage of gradio.outputs is deprecated, and will not be supported in the future, please import your components from gradio.components\n", " warnings.warn(\n", "/Users/christian.sheehan/mambaforge/lib/python3.10/site-packages/gradio/deprecation.py:40: UserWarning: The 'type' parameter has been deprecated. Use the Number component instead.\n", " warnings.warn(value)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7861\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/plain": [ "(, 'http://127.0.0.1:7861/', None)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#! export\n", "image = gr.inputs.Image(shape=(192, 192))\n", "label = gr.outputs.Label()\n", "examples = ['chair1.jpg', 'chair2.jpg', 'chair3.jpg']\n", "\n", "intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)\n", "intf.launch(inline=False)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "from nbdev.export import nb_export\n", "nb_export('notebook.ipynb', '.')" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cat: app.py: No such file or directory\r\n" ] } ], "source": [ "!cat app.py" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m.\u001b[m\u001b[m/ .gitattributes chair1.jpg \u001b[34mflagged\u001b[m\u001b[m/\r\n", "\u001b[34m..\u001b[m\u001b[m/ \u001b[34m.ipynb_checkpoints\u001b[m\u001b[m/ chair2.jpg model.pkl\r\n", "\u001b[34m.git\u001b[m\u001b[m/ README.md chair3.jpg notebook.ipynb\r\n" ] } ], "source": [ "ls -a" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" }, "vscode": { "interpreter": { "hash": "b0fa6594d8f4cbf19f97940f81e996739fb7646882a419484c72d19e05852a7e" } } }, "nbformat": 4, "nbformat_minor": 4 }