notebook uploaded
Browse files
20220918_dog_cat_classifier_with_gradio.ipynb
ADDED
@@ -0,0 +1,591 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 17,
|
6 |
+
"id": "3343dd65",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [],
|
9 |
+
"source": [
|
10 |
+
"#|default_exp app"
|
11 |
+
]
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"cell_type": "code",
|
15 |
+
"execution_count": 10,
|
16 |
+
"id": "01903d17",
|
17 |
+
"metadata": {},
|
18 |
+
"outputs": [
|
19 |
+
{
|
20 |
+
"name": "stderr",
|
21 |
+
"output_type": "stream",
|
22 |
+
"text": [
|
23 |
+
"/home/noname/mambaforge/envs/fastai22/lib/python3.10/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: libc10_cuda.so: cannot open shared object file: No such file or directory\n",
|
24 |
+
" warn(f\"Failed to load image Python extension: {e}\")\n"
|
25 |
+
]
|
26 |
+
}
|
27 |
+
],
|
28 |
+
"source": [
|
29 |
+
"#|export\n",
|
30 |
+
"from fastai.vision.all import *\n",
|
31 |
+
"import gradio as gr\n",
|
32 |
+
"\n",
|
33 |
+
"def is_cat(x): return x[0].isupper()"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "code",
|
38 |
+
"execution_count": 15,
|
39 |
+
"id": "47886c74",
|
40 |
+
"metadata": {},
|
41 |
+
"outputs": [
|
42 |
+
{
|
43 |
+
"data": {
|
44 |
+
"text/plain": [
|
45 |
+
"['dog_01.jpeg',\n",
|
46 |
+
" '.ipynb_checkpoints',\n",
|
47 |
+
" 'Untitled.ipynb',\n",
|
48 |
+
" 'comments.txt',\n",
|
49 |
+
" 'minima']"
|
50 |
+
]
|
51 |
+
},
|
52 |
+
"execution_count": 15,
|
53 |
+
"metadata": {},
|
54 |
+
"output_type": "execute_result"
|
55 |
+
}
|
56 |
+
],
|
57 |
+
"source": [
|
58 |
+
"import os\n",
|
59 |
+
"os.listdir()"
|
60 |
+
]
|
61 |
+
},
|
62 |
+
{
|
63 |
+
"cell_type": "code",
|
64 |
+
"execution_count": 16,
|
65 |
+
"id": "94399442",
|
66 |
+
"metadata": {},
|
67 |
+
"outputs": [
|
68 |
+
{
|
69 |
+
"data": {
|
70 |
+
"image/png": "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\n",
|
71 |
+
"text/plain": [
|
72 |
+
"PILImage mode=RGB size=192x96"
|
73 |
+
]
|
74 |
+
},
|
75 |
+
"execution_count": 16,
|
76 |
+
"metadata": {},
|
77 |
+
"output_type": "execute_result"
|
78 |
+
}
|
79 |
+
],
|
80 |
+
"source": [
|
81 |
+
"im = PILImage.create('dog_01.jpeg')\n",
|
82 |
+
"im.thumbnail((192,192))\n",
|
83 |
+
"im"
|
84 |
+
]
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"cell_type": "code",
|
88 |
+
"execution_count": 18,
|
89 |
+
"id": "eba17623",
|
90 |
+
"metadata": {},
|
91 |
+
"outputs": [],
|
92 |
+
"source": [
|
93 |
+
"#|export\n",
|
94 |
+
"learner = load_learner('20220918_dogs_cats_model.pkl')"
|
95 |
+
]
|
96 |
+
},
|
97 |
+
{
|
98 |
+
"cell_type": "code",
|
99 |
+
"execution_count": 20,
|
100 |
+
"id": "deacac8c",
|
101 |
+
"metadata": {},
|
102 |
+
"outputs": [
|
103 |
+
{
|
104 |
+
"data": {
|
105 |
+
"text/html": [
|
106 |
+
"\n",
|
107 |
+
"<style>\n",
|
108 |
+
" /* Turns off some styling */\n",
|
109 |
+
" progress {\n",
|
110 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
111 |
+
" border: none;\n",
|
112 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
113 |
+
" background-size: auto;\n",
|
114 |
+
" }\n",
|
115 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
116 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
117 |
+
" }\n",
|
118 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
119 |
+
" background: #F44336;\n",
|
120 |
+
" }\n",
|
121 |
+
"</style>\n"
|
122 |
+
],
|
123 |
+
"text/plain": [
|
124 |
+
"<IPython.core.display.HTML object>"
|
125 |
+
]
|
126 |
+
},
|
127 |
+
"metadata": {},
|
128 |
+
"output_type": "display_data"
|
129 |
+
},
|
130 |
+
{
|
131 |
+
"data": {
|
132 |
+
"text/html": [],
|
133 |
+
"text/plain": [
|
134 |
+
"<IPython.core.display.HTML object>"
|
135 |
+
]
|
136 |
+
},
|
137 |
+
"metadata": {},
|
138 |
+
"output_type": "display_data"
|
139 |
+
},
|
140 |
+
{
|
141 |
+
"name": "stdout",
|
142 |
+
"output_type": "stream",
|
143 |
+
"text": [
|
144 |
+
"CPU times: user 129 ms, sys: 4.03 ms, total: 133 ms\n",
|
145 |
+
"Wall time: 83.4 ms\n"
|
146 |
+
]
|
147 |
+
},
|
148 |
+
{
|
149 |
+
"data": {
|
150 |
+
"text/plain": [
|
151 |
+
"('False', TensorBase(0), TensorBase([9.9993e-01, 7.0497e-05]))"
|
152 |
+
]
|
153 |
+
},
|
154 |
+
"execution_count": 20,
|
155 |
+
"metadata": {},
|
156 |
+
"output_type": "execute_result"
|
157 |
+
}
|
158 |
+
],
|
159 |
+
"source": [
|
160 |
+
"%time learner.predict(im)"
|
161 |
+
]
|
162 |
+
},
|
163 |
+
{
|
164 |
+
"cell_type": "code",
|
165 |
+
"execution_count": 24,
|
166 |
+
"id": "a370586b",
|
167 |
+
"metadata": {},
|
168 |
+
"outputs": [],
|
169 |
+
"source": [
|
170 |
+
"#|export\n",
|
171 |
+
"categories = ('Dog', 'Cat')\n",
|
172 |
+
"\n",
|
173 |
+
"def classify_image(img):\n",
|
174 |
+
" pred, idx, probs = learner.predict(img)\n",
|
175 |
+
" return dict(zip(categories, map(float, probs)))"
|
176 |
+
]
|
177 |
+
},
|
178 |
+
{
|
179 |
+
"cell_type": "code",
|
180 |
+
"execution_count": 25,
|
181 |
+
"id": "84d014cf",
|
182 |
+
"metadata": {},
|
183 |
+
"outputs": [
|
184 |
+
{
|
185 |
+
"data": {
|
186 |
+
"text/html": [
|
187 |
+
"\n",
|
188 |
+
"<style>\n",
|
189 |
+
" /* Turns off some styling */\n",
|
190 |
+
" progress {\n",
|
191 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
192 |
+
" border: none;\n",
|
193 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
194 |
+
" background-size: auto;\n",
|
195 |
+
" }\n",
|
196 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
197 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
198 |
+
" }\n",
|
199 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
200 |
+
" background: #F44336;\n",
|
201 |
+
" }\n",
|
202 |
+
"</style>\n"
|
203 |
+
],
|
204 |
+
"text/plain": [
|
205 |
+
"<IPython.core.display.HTML object>"
|
206 |
+
]
|
207 |
+
},
|
208 |
+
"metadata": {},
|
209 |
+
"output_type": "display_data"
|
210 |
+
},
|
211 |
+
{
|
212 |
+
"data": {
|
213 |
+
"text/html": [],
|
214 |
+
"text/plain": [
|
215 |
+
"<IPython.core.display.HTML object>"
|
216 |
+
]
|
217 |
+
},
|
218 |
+
"metadata": {},
|
219 |
+
"output_type": "display_data"
|
220 |
+
},
|
221 |
+
{
|
222 |
+
"data": {
|
223 |
+
"text/plain": [
|
224 |
+
"{'Dog': 0.9999295473098755, 'Cat': 7.049667328828946e-05}"
|
225 |
+
]
|
226 |
+
},
|
227 |
+
"execution_count": 25,
|
228 |
+
"metadata": {},
|
229 |
+
"output_type": "execute_result"
|
230 |
+
}
|
231 |
+
],
|
232 |
+
"source": [
|
233 |
+
"classify_image(im)"
|
234 |
+
]
|
235 |
+
},
|
236 |
+
{
|
237 |
+
"cell_type": "code",
|
238 |
+
"execution_count": 31,
|
239 |
+
"id": "4db1095c",
|
240 |
+
"metadata": {},
|
241 |
+
"outputs": [
|
242 |
+
{
|
243 |
+
"name": "stdout",
|
244 |
+
"output_type": "stream",
|
245 |
+
"text": [
|
246 |
+
"Running on local URL: http://127.0.0.1:7860\n",
|
247 |
+
"\n",
|
248 |
+
"To create a public link, set `share=True` in `launch()`.\n"
|
249 |
+
]
|
250 |
+
},
|
251 |
+
{
|
252 |
+
"data": {
|
253 |
+
"text/plain": [
|
254 |
+
"(<gradio.routes.App at 0x7f3bf0093880>, 'http://127.0.0.1:7860/', None)"
|
255 |
+
]
|
256 |
+
},
|
257 |
+
"execution_count": 31,
|
258 |
+
"metadata": {},
|
259 |
+
"output_type": "execute_result"
|
260 |
+
},
|
261 |
+
{
|
262 |
+
"data": {
|
263 |
+
"text/html": [
|
264 |
+
"\n",
|
265 |
+
"<style>\n",
|
266 |
+
" /* Turns off some styling */\n",
|
267 |
+
" progress {\n",
|
268 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
269 |
+
" border: none;\n",
|
270 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
271 |
+
" background-size: auto;\n",
|
272 |
+
" }\n",
|
273 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
274 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
275 |
+
" }\n",
|
276 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
277 |
+
" background: #F44336;\n",
|
278 |
+
" }\n",
|
279 |
+
"</style>\n"
|
280 |
+
],
|
281 |
+
"text/plain": [
|
282 |
+
"<IPython.core.display.HTML object>"
|
283 |
+
]
|
284 |
+
},
|
285 |
+
"metadata": {},
|
286 |
+
"output_type": "display_data"
|
287 |
+
},
|
288 |
+
{
|
289 |
+
"data": {
|
290 |
+
"text/html": [],
|
291 |
+
"text/plain": [
|
292 |
+
"<IPython.core.display.HTML object>"
|
293 |
+
]
|
294 |
+
},
|
295 |
+
"metadata": {},
|
296 |
+
"output_type": "display_data"
|
297 |
+
},
|
298 |
+
{
|
299 |
+
"data": {
|
300 |
+
"text/html": [
|
301 |
+
"\n",
|
302 |
+
"<style>\n",
|
303 |
+
" /* Turns off some styling */\n",
|
304 |
+
" progress {\n",
|
305 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
306 |
+
" border: none;\n",
|
307 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
308 |
+
" background-size: auto;\n",
|
309 |
+
" }\n",
|
310 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
311 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
312 |
+
" }\n",
|
313 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
314 |
+
" background: #F44336;\n",
|
315 |
+
" }\n",
|
316 |
+
"</style>\n"
|
317 |
+
],
|
318 |
+
"text/plain": [
|
319 |
+
"<IPython.core.display.HTML object>"
|
320 |
+
]
|
321 |
+
},
|
322 |
+
"metadata": {},
|
323 |
+
"output_type": "display_data"
|
324 |
+
},
|
325 |
+
{
|
326 |
+
"data": {
|
327 |
+
"text/html": [],
|
328 |
+
"text/plain": [
|
329 |
+
"<IPython.core.display.HTML object>"
|
330 |
+
]
|
331 |
+
},
|
332 |
+
"metadata": {},
|
333 |
+
"output_type": "display_data"
|
334 |
+
},
|
335 |
+
{
|
336 |
+
"data": {
|
337 |
+
"text/html": [
|
338 |
+
"\n",
|
339 |
+
"<style>\n",
|
340 |
+
" /* Turns off some styling */\n",
|
341 |
+
" progress {\n",
|
342 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
343 |
+
" border: none;\n",
|
344 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
345 |
+
" background-size: auto;\n",
|
346 |
+
" }\n",
|
347 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
348 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
349 |
+
" }\n",
|
350 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
351 |
+
" background: #F44336;\n",
|
352 |
+
" }\n",
|
353 |
+
"</style>\n"
|
354 |
+
],
|
355 |
+
"text/plain": [
|
356 |
+
"<IPython.core.display.HTML object>"
|
357 |
+
]
|
358 |
+
},
|
359 |
+
"metadata": {},
|
360 |
+
"output_type": "display_data"
|
361 |
+
},
|
362 |
+
{
|
363 |
+
"data": {
|
364 |
+
"text/html": [],
|
365 |
+
"text/plain": [
|
366 |
+
"<IPython.core.display.HTML object>"
|
367 |
+
]
|
368 |
+
},
|
369 |
+
"metadata": {},
|
370 |
+
"output_type": "display_data"
|
371 |
+
},
|
372 |
+
{
|
373 |
+
"data": {
|
374 |
+
"text/html": [
|
375 |
+
"\n",
|
376 |
+
"<style>\n",
|
377 |
+
" /* Turns off some styling */\n",
|
378 |
+
" progress {\n",
|
379 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
380 |
+
" border: none;\n",
|
381 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
382 |
+
" background-size: auto;\n",
|
383 |
+
" }\n",
|
384 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
385 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
386 |
+
" }\n",
|
387 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
388 |
+
" background: #F44336;\n",
|
389 |
+
" }\n",
|
390 |
+
"</style>\n"
|
391 |
+
],
|
392 |
+
"text/plain": [
|
393 |
+
"<IPython.core.display.HTML object>"
|
394 |
+
]
|
395 |
+
},
|
396 |
+
"metadata": {},
|
397 |
+
"output_type": "display_data"
|
398 |
+
},
|
399 |
+
{
|
400 |
+
"data": {
|
401 |
+
"text/html": [],
|
402 |
+
"text/plain": [
|
403 |
+
"<IPython.core.display.HTML object>"
|
404 |
+
]
|
405 |
+
},
|
406 |
+
"metadata": {},
|
407 |
+
"output_type": "display_data"
|
408 |
+
},
|
409 |
+
{
|
410 |
+
"data": {
|
411 |
+
"text/html": [
|
412 |
+
"\n",
|
413 |
+
"<style>\n",
|
414 |
+
" /* Turns off some styling */\n",
|
415 |
+
" progress {\n",
|
416 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
417 |
+
" border: none;\n",
|
418 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
419 |
+
" background-size: auto;\n",
|
420 |
+
" }\n",
|
421 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
422 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
423 |
+
" }\n",
|
424 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
425 |
+
" background: #F44336;\n",
|
426 |
+
" }\n",
|
427 |
+
"</style>\n"
|
428 |
+
],
|
429 |
+
"text/plain": [
|
430 |
+
"<IPython.core.display.HTML object>"
|
431 |
+
]
|
432 |
+
},
|
433 |
+
"metadata": {},
|
434 |
+
"output_type": "display_data"
|
435 |
+
},
|
436 |
+
{
|
437 |
+
"data": {
|
438 |
+
"text/html": [],
|
439 |
+
"text/plain": [
|
440 |
+
"<IPython.core.display.HTML object>"
|
441 |
+
]
|
442 |
+
},
|
443 |
+
"metadata": {},
|
444 |
+
"output_type": "display_data"
|
445 |
+
}
|
446 |
+
],
|
447 |
+
"source": [
|
448 |
+
"#|export\n",
|
449 |
+
"image = gr.inputs.Image(shape=(192, 192))\n",
|
450 |
+
"label = gr.outputs.Label()\n",
|
451 |
+
"examples = ['dog_01.jpeg', 'cat_01.jpeg', 'dunno_01.jpeg']\n",
|
452 |
+
"\n",
|
453 |
+
"intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)\n",
|
454 |
+
"intf.launch(inline=False)"
|
455 |
+
]
|
456 |
+
},
|
457 |
+
{
|
458 |
+
"cell_type": "markdown",
|
459 |
+
"id": "f7e77408",
|
460 |
+
"metadata": {},
|
461 |
+
"source": [
|
462 |
+
"# export"
|
463 |
+
]
|
464 |
+
},
|
465 |
+
{
|
466 |
+
"cell_type": "code",
|
467 |
+
"execution_count": 35,
|
468 |
+
"id": "cf22087d",
|
469 |
+
"metadata": {},
|
470 |
+
"outputs": [
|
471 |
+
{
|
472 |
+
"name": "stdout",
|
473 |
+
"output_type": "stream",
|
474 |
+
"text": [
|
475 |
+
"nbdev 2.3.6 py_0 fastai\r\n"
|
476 |
+
]
|
477 |
+
}
|
478 |
+
],
|
479 |
+
"source": [
|
480 |
+
"!conda list | grep nbd"
|
481 |
+
]
|
482 |
+
},
|
483 |
+
{
|
484 |
+
"cell_type": "code",
|
485 |
+
"execution_count": 39,
|
486 |
+
"id": "e94b2e93",
|
487 |
+
"metadata": {},
|
488 |
+
"outputs": [
|
489 |
+
{
|
490 |
+
"ename": "NameError",
|
491 |
+
"evalue": "name 'nbdev' is not defined",
|
492 |
+
"output_type": "error",
|
493 |
+
"traceback": [
|
494 |
+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
495 |
+
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
|
496 |
+
"Cell \u001b[0;32mIn [39], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mtype\u001b[39m(\u001b[43mnbdev\u001b[49m\u001b[38;5;241m.\u001b[39mexport)\n",
|
497 |
+
"\u001b[0;31mNameError\u001b[0m: name 'nbdev' is not defined"
|
498 |
+
]
|
499 |
+
}
|
500 |
+
],
|
501 |
+
"source": [
|
502 |
+
"type(nbdev.export)"
|
503 |
+
]
|
504 |
+
},
|
505 |
+
{
|
506 |
+
"cell_type": "code",
|
507 |
+
"execution_count": 41,
|
508 |
+
"id": "3529cd88",
|
509 |
+
"metadata": {},
|
510 |
+
"outputs": [
|
511 |
+
{
|
512 |
+
"data": {
|
513 |
+
"text/plain": [
|
514 |
+
"['config.py',\n",
|
515 |
+
" '_modidx.py',\n",
|
516 |
+
" 'serve.py',\n",
|
517 |
+
" 'process.py',\n",
|
518 |
+
" 'imports.py',\n",
|
519 |
+
" 'clean.py',\n",
|
520 |
+
" 'showdoc.py',\n",
|
521 |
+
" '__pycache__',\n",
|
522 |
+
" 'export.py',\n",
|
523 |
+
" 'serve_drv.py',\n",
|
524 |
+
" 'quarto.py',\n",
|
525 |
+
" 'merge.py',\n",
|
526 |
+
" 'extract_attachments.py',\n",
|
527 |
+
" 'migrate.py',\n",
|
528 |
+
" 'processors.py',\n",
|
529 |
+
" 'cli.py',\n",
|
530 |
+
" 'maker.py',\n",
|
531 |
+
" 'frontmatter.py',\n",
|
532 |
+
" 'test.py',\n",
|
533 |
+
" 'doclinks.py',\n",
|
534 |
+
" 'sync.py',\n",
|
535 |
+
" '__init__.py',\n",
|
536 |
+
" 'qmd.py',\n",
|
537 |
+
" 'release.py']"
|
538 |
+
]
|
539 |
+
},
|
540 |
+
"execution_count": 41,
|
541 |
+
"metadata": {},
|
542 |
+
"output_type": "execute_result"
|
543 |
+
}
|
544 |
+
],
|
545 |
+
"source": [
|
546 |
+
"os.listdir('/home/noname/mambaforge/envs/fastai22/lib/python3.10/site-packages/nbdev')"
|
547 |
+
]
|
548 |
+
},
|
549 |
+
{
|
550 |
+
"cell_type": "code",
|
551 |
+
"execution_count": 42,
|
552 |
+
"id": "8017f9ec",
|
553 |
+
"metadata": {},
|
554 |
+
"outputs": [],
|
555 |
+
"source": [
|
556 |
+
"from nbdev.export import nb_export"
|
557 |
+
]
|
558 |
+
},
|
559 |
+
{
|
560 |
+
"cell_type": "code",
|
561 |
+
"execution_count": 43,
|
562 |
+
"id": "ffc4bb56",
|
563 |
+
"metadata": {},
|
564 |
+
"outputs": [],
|
565 |
+
"source": [
|
566 |
+
"nb_export('20220918_dog_cat_classifier_with_gradio.ipynb')"
|
567 |
+
]
|
568 |
+
}
|
569 |
+
],
|
570 |
+
"metadata": {
|
571 |
+
"kernelspec": {
|
572 |
+
"display_name": "fastai-kernel",
|
573 |
+
"language": "python",
|
574 |
+
"name": "fastai-kernel"
|
575 |
+
},
|
576 |
+
"language_info": {
|
577 |
+
"codemirror_mode": {
|
578 |
+
"name": "ipython",
|
579 |
+
"version": 3
|
580 |
+
},
|
581 |
+
"file_extension": ".py",
|
582 |
+
"mimetype": "text/x-python",
|
583 |
+
"name": "python",
|
584 |
+
"nbconvert_exporter": "python",
|
585 |
+
"pygments_lexer": "ipython3",
|
586 |
+
"version": "3.10.4"
|
587 |
+
}
|
588 |
+
},
|
589 |
+
"nbformat": 4,
|
590 |
+
"nbformat_minor": 5
|
591 |
+
}
|