Spaces:
Runtime error
Runtime error
File size: 13,663 Bytes
a9eafd0 73fc5dd a9eafd0 73fc5dd a9eafd0 6d41343 73fc5dd 6d41343 a9eafd0 73fc5dd a9eafd0 6d41343 a9eafd0 73fc5dd a9eafd0 6d41343 a9eafd0 73fc5dd a9eafd0 73fc5dd a9eafd0 6d41343 a9eafd0 73fc5dd a9eafd0 6d41343 a9eafd0 6d41343 a9eafd0 6d41343 a9eafd0 6d41343 a9eafd0 73fc5dd a9eafd0 73fc5dd a9eafd0 73fc5dd 6d41343 73fc5dd 648536d 6d41343 648536d 6d41343 648536d 73fc5dd 6d41343 73fc5dd a9eafd0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
{
"cells": [
{
"cell_type": "markdown",
"id": "fb0b148e",
"metadata": {},
"source": [
"# This notebook is the .ipynb file for the model. \n",
"The code has been commmented in order to explain various parts, including the unused commented out parts."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "e39e2ed1",
"metadata": {},
"outputs": [],
"source": [
"#|default_exp app"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "35ff6d9b",
"metadata": {},
"outputs": [],
"source": [
"# The various ~| comments are needed to turn this into a .py file\n",
"# The export comments specify to export said cell"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "435a6f23",
"metadata": {},
"outputs": [],
"source": [
"# On my computer, I use Anaconda, where these packages are already installed, so there is no need to install them on the notebook\n",
"# On HuggingFaceSpaces, these packages have been put into requirements.txt so that the website installs them\n",
"# Therefore there is no need to install them \n",
"\n",
"#%pip install -q gradio\n",
"#%pip install fastbook\n",
"#%pip install -Uqq fastai"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "a89a7628",
"metadata": {},
"outputs": [],
"source": [
"#|export\n",
"# Importing neccesary modules\n",
"import fastbook\n",
"fastbook.setup_book()\n",
"from fastbook import *\n",
"from fastai.vision.widgets import *\n",
"from fastai.vision.all import *\n",
"import gradio as gr"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8c95d6bd",
"metadata": {},
"outputs": [],
"source": [
"# There was an error with the module Pillow, it was not updated and I attempted to update it within the notebook\n",
"# This was not neccesary as I updated Pillow on my anaconda app and it fixed it.\n",
"\n",
"#!pip uninstall Pillow\n",
"#!pip install Pillow"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "fe4889a5",
"metadata": {},
"outputs": [],
"source": [
"# There was an error the first time I ran this code on the notebook: \"NotImplementedError: cannot instantiate 'PosixPath' on your system\"\n",
"# this code fixed it, but as it is suited for windows,\n",
"# this causes an error on HuggingSpaceFaces, which likely uses linux. \n",
"# Strangely, simply commenting this code out does not cause the initial error on HuggingFaceSpaces and works for it\n",
"\n",
"import pathlib\n",
"temp = pathlib.PosixPath\n",
"pathlib.PosixPath = pathlib.WindowsPath"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d1d0d596",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Adnan\\anaconda3\\lib\\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",
"C:\\Users\\Adnan\\anaconda3\\lib\\site-packages\\gradio\\deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect\n",
" warnings.warn(value)\n",
"C:\\Users\\Adnan\\anaconda3\\lib\\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",
"C:\\Users\\Adnan\\anaconda3\\lib\\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:7860\n",
"\n",
"To create a public link, set `share=True` in `launch()`.\n"
]
},
{
"data": {
"text/plain": [
"(<gradio.routes.App at 0x20adf46c250>, 'http://127.0.0.1:7860/', None)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#|export\n",
"learn_inf = load_learner('NovaOrToastModel.pkl') # Loading the model\n",
"learn_inf.dls.vocab # Returns a list of the categories\n",
"categories = learn_inf.dls.vocab\n",
"\n",
"# Gradio code:\n",
"\n",
"# Function for Gradio to use to classify images\n",
"def classify_image(img):\n",
" pred, idx, probs = learn_inf.predict(img)\n",
" return dict(zip(categories, map(float,probs)))\n",
"\n",
"image = gr.inputs.Image(shape=(192,192)) \n",
"label = gr.outputs.Label()\n",
"examples = [\"ToastTest.jpeg\"]\n",
"\n",
"intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)\n",
"intf.launch(inline=False)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "300585db",
"metadata": {},
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'C:\\\\Users\\\\Adnan\\\\Downloads\\\\Fast AI\\\\Lesson 2 Git\\\\NovaOrToast\\\\NovaOrToast\\\\nbdev\\\\_nbdev.py'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"Input \u001b[1;32mIn [17]\u001b[0m, in \u001b[0;36m<cell line: 8>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mnbdev\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexport\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m notebook2script\n\u001b[0;32m 4\u001b[0m \u001b[38;5;66;03m# There were many problems getting notebook2script to work\u001b[39;00m\n\u001b[0;32m 5\u001b[0m \u001b[38;5;66;03m# The fix was to add a text document into the folder called 'settings.ini', for which I used the author's standard settings\u001b[39;00m\n\u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m# which works\u001b[39;00m\n\u001b[1;32m----> 8\u001b[0m \u001b[43mnotebook2script\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mapp.ipynb\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n",
"File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\nbdev\\export.py:445\u001b[0m, in \u001b[0;36mnotebook2script\u001b[1;34m(fname, silent, to_dict, bare)\u001b[0m\n\u001b[0;32m 443\u001b[0m d \u001b[38;5;241m=\u001b[39m collections\u001b[38;5;241m.\u001b[39mdefaultdict(\u001b[38;5;28mlist\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m to_dict \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 444\u001b[0m modules \u001b[38;5;241m=\u001b[39m create_mod_files(files, to_dict, bare\u001b[38;5;241m=\u001b[39mbare)\n\u001b[1;32m--> 445\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m f \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28msorted\u001b[39m(files): d \u001b[38;5;241m=\u001b[39m \u001b[43m_notebook2script\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodules\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msilent\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msilent\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_dict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43md\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbare\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbare\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 446\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m to_dict: \u001b[38;5;28;01mreturn\u001b[39;00m d\n\u001b[0;32m 447\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m fname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: add_init(get_config()\u001b[38;5;241m.\u001b[39mpath(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlib_path\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n",
"File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\nbdev\\export.py:380\u001b[0m, in \u001b[0;36m_notebook2script\u001b[1;34m(fname, modules, silent, to_dict, bare)\u001b[0m\n\u001b[0;32m 378\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(fname_out, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m, encoding\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf8\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f: f\u001b[38;5;241m.\u001b[39mwrite(code)\n\u001b[0;32m 379\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.py\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m mod\u001b[38;5;241m.\u001b[39mmodules: mod\u001b[38;5;241m.\u001b[39mmodules\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.py\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m--> 380\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_setting: \u001b[43msave_nbdev_module\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmod\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 382\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m silent: \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConverted \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfname\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 383\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m to_dict\n",
"File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\nbdev\\export.py:290\u001b[0m, in \u001b[0;36msave_nbdev_module\u001b[1;34m(mod)\u001b[0m\n\u001b[0;32m 288\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSave `mod` inside <code>_nbdev</code>\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 289\u001b[0m fname \u001b[38;5;241m=\u001b[39m get_config()\u001b[38;5;241m.\u001b[39mpath(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlib_path\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m/\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_nbdev.py\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m--> 290\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mfname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[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[38;5;28;01mas\u001b[39;00m f: code \u001b[38;5;241m=\u001b[39m f\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m 291\u001b[0m t \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m,\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mn \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin([\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mk\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m: \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m k,v \u001b[38;5;129;01min\u001b[39;00m mod\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mitems()])\n\u001b[0;32m 292\u001b[0m code \u001b[38;5;241m=\u001b[39m _re_index_idx\u001b[38;5;241m.\u001b[39msub(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindex = \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m+\u001b[39m t \u001b[38;5;241m+\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m}\u001b[39m\u001b[38;5;124m\"\u001b[39m, code)\n",
"\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'C:\\\\Users\\\\Adnan\\\\Downloads\\\\Fast AI\\\\Lesson 2 Git\\\\NovaOrToast\\\\NovaOrToast\\\\nbdev\\\\_nbdev.py'"
]
}
],
"source": [
"# Notebook2script simply turns the specified cells into a .py file for usage in HuggingFaceSpaces\n",
"from nbdev.export import notebook2script\n",
"\n",
"# There were many problems getting notebook2script to work\n",
"# The fix was to add a text document into the folder called 'settings.ini', for which I used the author's standard settings\n",
"# This works. It creates a file called app.py and a folder called nbdev to place it in\n",
"# But it returns the error \"FileNotFoundError: [Errno 2] No such file or directory: 'C:\\\\Users\\\\Adnan\\\\Downloads\\\\Fast AI\\\\Lesson 2 Git\\\\NovaOrToast\\\\NovaOrToast\\\\nbdev\\\\_nbdev.py'\"\n",
"\n",
"notebook2script('app.ipynb')"
]
}
],
"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.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
|