lcbasu commited on
Commit
93aef43
1 Parent(s): 64f29e0

feat: Add cat classifier app

Browse files
Files changed (6) hide show
  1. app.py +26 -4
  2. cat.jpg +0 -0
  3. dog.jpg +0 -0
  4. dunno.jpg +0 -0
  5. model.pkl +3 -0
  6. test_hugging_face.ipynb +635 -0
app.py CHANGED
@@ -1,7 +1,29 @@
 
 
 
 
 
 
 
1
  import gradio as gr
2
 
3
- def greet(name):
4
- return "Hello " + name + "!!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
- iface = gr.Interface(fn=greet, inputs="text", outputs="text")
7
- iface.launch()
 
1
+ # AUTOGENERATED! DO NOT EDIT! File to edit: ../test_hugging_face.ipynb.
2
+
3
+ # %% auto 0
4
+ __all__ = ['learn', 'categories', 'image', 'label', 'examples', 'iface', 'is_cat', 'classify_image']
5
+
6
+ # %% ../test_hugging_face.ipynb 2
7
+ from fastai.vision.all import *
8
  import gradio as gr
9
 
10
+ def is_cat(): return x[0].isupper()
11
+
12
+ # %% ../test_hugging_face.ipynb 4
13
+ learn = load_learner('model.pkl')
14
+
15
+ # %% ../test_hugging_face.ipynb 6
16
+ categories = ('Dog', 'Cat')
17
+
18
+ def classify_image(img):
19
+ pred, id, prob = learn.predict(img)
20
+ return dict(zip(categories, map(float, prob)))
21
+
22
+ # %% ../test_hugging_face.ipynb 8
23
+ image = gr.components.Image(width=192, height=192)
24
+ label = gr.components.Label()
25
+ examples = ['dog.jpg', 'cat.jpg', 'dunno.jpg']
26
+
27
+ iface = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)
28
+ iface.launch(inline=False)
29
 
 
 
cat.jpg ADDED
dog.jpg ADDED
dunno.jpg ADDED
model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:080428815e5438f820e344f4cb56ac2eec871d2a52a6b839f1d4d8c04b4c6e27
3
+ size 47061419
test_hugging_face.ipynb ADDED
@@ -0,0 +1,635 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 14,
6
+ "id": "6a93906c-400a-4747-82a6-728846c58ab7",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "# Make sure we've got the latest version of fastai:\n",
11
+ "# !pip install -Uqq fastai gradio nbdev"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 2,
17
+ "id": "2aff42ca-eaec-4e00-8688-80937837bcd9",
18
+ "metadata": {},
19
+ "outputs": [],
20
+ "source": [
21
+ "#|default_exp app"
22
+ ]
23
+ },
24
+ {
25
+ "cell_type": "code",
26
+ "execution_count": 3,
27
+ "id": "67c90cb4-c402-440b-84f4-6155652a4fa9",
28
+ "metadata": {},
29
+ "outputs": [
30
+ {
31
+ "name": "stderr",
32
+ "output_type": "stream",
33
+ "text": [
34
+ "/Users/pqrsjk/venv-for-jupyter/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020\n",
35
+ " warnings.warn(\n"
36
+ ]
37
+ }
38
+ ],
39
+ "source": [
40
+ "#|export\n",
41
+ "from fastai.vision.all import *\n",
42
+ "import gradio as gr\n",
43
+ "\n",
44
+ "def is_cat(): return x[0].isupper()"
45
+ ]
46
+ },
47
+ {
48
+ "cell_type": "code",
49
+ "execution_count": 4,
50
+ "id": "24e5f14b-f2f7-4852-ae87-83259aadfc55",
51
+ "metadata": {},
52
+ "outputs": [
53
+ {
54
+ "data": {
55
+ "image/jpeg": "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",
56
+ "image/png": "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",
57
+ "text/plain": [
58
+ "PILImage mode=RGB size=192x128"
59
+ ]
60
+ },
61
+ "execution_count": 4,
62
+ "metadata": {},
63
+ "output_type": "execute_result"
64
+ }
65
+ ],
66
+ "source": [
67
+ "im = PILImage.create('dog.jpg')\n",
68
+ "im.thumbnail((192, 192))\n",
69
+ "im"
70
+ ]
71
+ },
72
+ {
73
+ "cell_type": "code",
74
+ "execution_count": 5,
75
+ "id": "d0e8ae51-04f1-427a-b0ab-0bd05c37a88d",
76
+ "metadata": {},
77
+ "outputs": [],
78
+ "source": [
79
+ "#|export\n",
80
+ "learn = load_learner('model.pkl')"
81
+ ]
82
+ },
83
+ {
84
+ "cell_type": "code",
85
+ "execution_count": 6,
86
+ "id": "4307f94e-e4cd-49ff-86fd-f364e421146b",
87
+ "metadata": {},
88
+ "outputs": [
89
+ {
90
+ "data": {
91
+ "text/html": [
92
+ "\n",
93
+ "<style>\n",
94
+ " /* Turns off some styling */\n",
95
+ " progress {\n",
96
+ " /* gets rid of default border in Firefox and Opera. */\n",
97
+ " border: none;\n",
98
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
99
+ " background-size: auto;\n",
100
+ " }\n",
101
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
102
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
103
+ " }\n",
104
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
105
+ " background: #F44336;\n",
106
+ " }\n",
107
+ "</style>\n"
108
+ ],
109
+ "text/plain": [
110
+ "<IPython.core.display.HTML object>"
111
+ ]
112
+ },
113
+ "metadata": {},
114
+ "output_type": "display_data"
115
+ },
116
+ {
117
+ "data": {
118
+ "text/html": [],
119
+ "text/plain": [
120
+ "<IPython.core.display.HTML object>"
121
+ ]
122
+ },
123
+ "metadata": {},
124
+ "output_type": "display_data"
125
+ },
126
+ {
127
+ "data": {
128
+ "text/plain": [
129
+ "('False', tensor(0), tensor([9.9999e-01, 6.6963e-06]))"
130
+ ]
131
+ },
132
+ "execution_count": 6,
133
+ "metadata": {},
134
+ "output_type": "execute_result"
135
+ }
136
+ ],
137
+ "source": [
138
+ "# %time learn.predict(im)\n",
139
+ "learn.predict(im)"
140
+ ]
141
+ },
142
+ {
143
+ "cell_type": "code",
144
+ "execution_count": 7,
145
+ "id": "42365ae7-e5d1-462c-8d97-8e3305901c57",
146
+ "metadata": {},
147
+ "outputs": [],
148
+ "source": [
149
+ "#|export\n",
150
+ "categories = ('Dog', 'Cat')\n",
151
+ "\n",
152
+ "def classify_image(img):\n",
153
+ " pred, id, prob = learn.predict(img)\n",
154
+ " return dict(zip(categories, map(float, prob)))"
155
+ ]
156
+ },
157
+ {
158
+ "cell_type": "code",
159
+ "execution_count": 8,
160
+ "id": "592d9011-9ccb-4a3c-9160-7d80bcc7c681",
161
+ "metadata": {},
162
+ "outputs": [
163
+ {
164
+ "data": {
165
+ "text/html": [
166
+ "\n",
167
+ "<style>\n",
168
+ " /* Turns off some styling */\n",
169
+ " progress {\n",
170
+ " /* gets rid of default border in Firefox and Opera. */\n",
171
+ " border: none;\n",
172
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
173
+ " background-size: auto;\n",
174
+ " }\n",
175
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
176
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
177
+ " }\n",
178
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
179
+ " background: #F44336;\n",
180
+ " }\n",
181
+ "</style>\n"
182
+ ],
183
+ "text/plain": [
184
+ "<IPython.core.display.HTML object>"
185
+ ]
186
+ },
187
+ "metadata": {},
188
+ "output_type": "display_data"
189
+ },
190
+ {
191
+ "data": {
192
+ "text/html": [],
193
+ "text/plain": [
194
+ "<IPython.core.display.HTML object>"
195
+ ]
196
+ },
197
+ "metadata": {},
198
+ "output_type": "display_data"
199
+ },
200
+ {
201
+ "data": {
202
+ "text/plain": [
203
+ "{'Dog': 0.9999933242797852, 'Cat': 6.696266609651502e-06}"
204
+ ]
205
+ },
206
+ "execution_count": 8,
207
+ "metadata": {},
208
+ "output_type": "execute_result"
209
+ }
210
+ ],
211
+ "source": [
212
+ "classify_image(im)"
213
+ ]
214
+ },
215
+ {
216
+ "cell_type": "code",
217
+ "execution_count": 12,
218
+ "id": "e9715892-f73d-4774-ab75-8f1851d93d0a",
219
+ "metadata": {
220
+ "scrolled": true
221
+ },
222
+ "outputs": [
223
+ {
224
+ "name": "stdout",
225
+ "output_type": "stream",
226
+ "text": [
227
+ "Running on local URL: http://127.0.0.1:7860\n",
228
+ "\n",
229
+ "To create a public link, set `share=True` in `launch()`.\n"
230
+ ]
231
+ },
232
+ {
233
+ "data": {
234
+ "text/plain": []
235
+ },
236
+ "execution_count": 12,
237
+ "metadata": {},
238
+ "output_type": "execute_result"
239
+ },
240
+ {
241
+ "data": {
242
+ "text/html": [
243
+ "\n",
244
+ "<style>\n",
245
+ " /* Turns off some styling */\n",
246
+ " progress {\n",
247
+ " /* gets rid of default border in Firefox and Opera. */\n",
248
+ " border: none;\n",
249
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
250
+ " background-size: auto;\n",
251
+ " }\n",
252
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
253
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
254
+ " }\n",
255
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
256
+ " background: #F44336;\n",
257
+ " }\n",
258
+ "</style>\n"
259
+ ],
260
+ "text/plain": [
261
+ "<IPython.core.display.HTML object>"
262
+ ]
263
+ },
264
+ "metadata": {},
265
+ "output_type": "display_data"
266
+ },
267
+ {
268
+ "data": {
269
+ "text/html": [],
270
+ "text/plain": [
271
+ "<IPython.core.display.HTML object>"
272
+ ]
273
+ },
274
+ "metadata": {},
275
+ "output_type": "display_data"
276
+ },
277
+ {
278
+ "data": {
279
+ "text/html": [
280
+ "\n",
281
+ "<style>\n",
282
+ " /* Turns off some styling */\n",
283
+ " progress {\n",
284
+ " /* gets rid of default border in Firefox and Opera. */\n",
285
+ " border: none;\n",
286
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
287
+ " background-size: auto;\n",
288
+ " }\n",
289
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
290
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
291
+ " }\n",
292
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
293
+ " background: #F44336;\n",
294
+ " }\n",
295
+ "</style>\n"
296
+ ],
297
+ "text/plain": [
298
+ "<IPython.core.display.HTML object>"
299
+ ]
300
+ },
301
+ "metadata": {},
302
+ "output_type": "display_data"
303
+ },
304
+ {
305
+ "data": {
306
+ "text/html": [],
307
+ "text/plain": [
308
+ "<IPython.core.display.HTML object>"
309
+ ]
310
+ },
311
+ "metadata": {},
312
+ "output_type": "display_data"
313
+ },
314
+ {
315
+ "data": {
316
+ "text/html": [
317
+ "\n",
318
+ "<style>\n",
319
+ " /* Turns off some styling */\n",
320
+ " progress {\n",
321
+ " /* gets rid of default border in Firefox and Opera. */\n",
322
+ " border: none;\n",
323
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
324
+ " background-size: auto;\n",
325
+ " }\n",
326
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
327
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
328
+ " }\n",
329
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
330
+ " background: #F44336;\n",
331
+ " }\n",
332
+ "</style>\n"
333
+ ],
334
+ "text/plain": [
335
+ "<IPython.core.display.HTML object>"
336
+ ]
337
+ },
338
+ "metadata": {},
339
+ "output_type": "display_data"
340
+ },
341
+ {
342
+ "data": {
343
+ "text/html": [],
344
+ "text/plain": [
345
+ "<IPython.core.display.HTML object>"
346
+ ]
347
+ },
348
+ "metadata": {},
349
+ "output_type": "display_data"
350
+ },
351
+ {
352
+ "data": {
353
+ "text/html": [
354
+ "\n",
355
+ "<style>\n",
356
+ " /* Turns off some styling */\n",
357
+ " progress {\n",
358
+ " /* gets rid of default border in Firefox and Opera. */\n",
359
+ " border: none;\n",
360
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
361
+ " background-size: auto;\n",
362
+ " }\n",
363
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
364
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
365
+ " }\n",
366
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
367
+ " background: #F44336;\n",
368
+ " }\n",
369
+ "</style>\n"
370
+ ],
371
+ "text/plain": [
372
+ "<IPython.core.display.HTML object>"
373
+ ]
374
+ },
375
+ "metadata": {},
376
+ "output_type": "display_data"
377
+ },
378
+ {
379
+ "data": {
380
+ "text/html": [],
381
+ "text/plain": [
382
+ "<IPython.core.display.HTML object>"
383
+ ]
384
+ },
385
+ "metadata": {},
386
+ "output_type": "display_data"
387
+ },
388
+ {
389
+ "data": {
390
+ "text/html": [
391
+ "\n",
392
+ "<style>\n",
393
+ " /* Turns off some styling */\n",
394
+ " progress {\n",
395
+ " /* gets rid of default border in Firefox and Opera. */\n",
396
+ " border: none;\n",
397
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
398
+ " background-size: auto;\n",
399
+ " }\n",
400
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
401
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
402
+ " }\n",
403
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
404
+ " background: #F44336;\n",
405
+ " }\n",
406
+ "</style>\n"
407
+ ],
408
+ "text/plain": [
409
+ "<IPython.core.display.HTML object>"
410
+ ]
411
+ },
412
+ "metadata": {},
413
+ "output_type": "display_data"
414
+ },
415
+ {
416
+ "data": {
417
+ "text/html": [],
418
+ "text/plain": [
419
+ "<IPython.core.display.HTML object>"
420
+ ]
421
+ },
422
+ "metadata": {},
423
+ "output_type": "display_data"
424
+ },
425
+ {
426
+ "data": {
427
+ "text/html": [
428
+ "\n",
429
+ "<style>\n",
430
+ " /* Turns off some styling */\n",
431
+ " progress {\n",
432
+ " /* gets rid of default border in Firefox and Opera. */\n",
433
+ " border: none;\n",
434
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
435
+ " background-size: auto;\n",
436
+ " }\n",
437
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
438
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
439
+ " }\n",
440
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
441
+ " background: #F44336;\n",
442
+ " }\n",
443
+ "</style>\n"
444
+ ],
445
+ "text/plain": [
446
+ "<IPython.core.display.HTML object>"
447
+ ]
448
+ },
449
+ "metadata": {},
450
+ "output_type": "display_data"
451
+ },
452
+ {
453
+ "data": {
454
+ "text/html": [],
455
+ "text/plain": [
456
+ "<IPython.core.display.HTML object>"
457
+ ]
458
+ },
459
+ "metadata": {},
460
+ "output_type": "display_data"
461
+ },
462
+ {
463
+ "data": {
464
+ "text/html": [
465
+ "\n",
466
+ "<style>\n",
467
+ " /* Turns off some styling */\n",
468
+ " progress {\n",
469
+ " /* gets rid of default border in Firefox and Opera. */\n",
470
+ " border: none;\n",
471
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
472
+ " background-size: auto;\n",
473
+ " }\n",
474
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
475
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
476
+ " }\n",
477
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
478
+ " background: #F44336;\n",
479
+ " }\n",
480
+ "</style>\n"
481
+ ],
482
+ "text/plain": [
483
+ "<IPython.core.display.HTML object>"
484
+ ]
485
+ },
486
+ "metadata": {},
487
+ "output_type": "display_data"
488
+ },
489
+ {
490
+ "data": {
491
+ "text/html": [],
492
+ "text/plain": [
493
+ "<IPython.core.display.HTML object>"
494
+ ]
495
+ },
496
+ "metadata": {},
497
+ "output_type": "display_data"
498
+ },
499
+ {
500
+ "data": {
501
+ "text/html": [
502
+ "\n",
503
+ "<style>\n",
504
+ " /* Turns off some styling */\n",
505
+ " progress {\n",
506
+ " /* gets rid of default border in Firefox and Opera. */\n",
507
+ " border: none;\n",
508
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
509
+ " background-size: auto;\n",
510
+ " }\n",
511
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
512
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
513
+ " }\n",
514
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
515
+ " background: #F44336;\n",
516
+ " }\n",
517
+ "</style>\n"
518
+ ],
519
+ "text/plain": [
520
+ "<IPython.core.display.HTML object>"
521
+ ]
522
+ },
523
+ "metadata": {},
524
+ "output_type": "display_data"
525
+ },
526
+ {
527
+ "data": {
528
+ "text/html": [],
529
+ "text/plain": [
530
+ "<IPython.core.display.HTML object>"
531
+ ]
532
+ },
533
+ "metadata": {},
534
+ "output_type": "display_data"
535
+ },
536
+ {
537
+ "data": {
538
+ "text/html": [
539
+ "\n",
540
+ "<style>\n",
541
+ " /* Turns off some styling */\n",
542
+ " progress {\n",
543
+ " /* gets rid of default border in Firefox and Opera. */\n",
544
+ " border: none;\n",
545
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
546
+ " background-size: auto;\n",
547
+ " }\n",
548
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
549
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
550
+ " }\n",
551
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
552
+ " background: #F44336;\n",
553
+ " }\n",
554
+ "</style>\n"
555
+ ],
556
+ "text/plain": [
557
+ "<IPython.core.display.HTML object>"
558
+ ]
559
+ },
560
+ "metadata": {},
561
+ "output_type": "display_data"
562
+ },
563
+ {
564
+ "data": {
565
+ "text/html": [],
566
+ "text/plain": [
567
+ "<IPython.core.display.HTML object>"
568
+ ]
569
+ },
570
+ "metadata": {},
571
+ "output_type": "display_data"
572
+ }
573
+ ],
574
+ "source": [
575
+ "#|export\n",
576
+ "image = gr.components.Image(width=192, height=192)\n",
577
+ "label = gr.components.Label()\n",
578
+ "examples = ['dog.jpg', 'cat.jpg', 'dunno.jpg']\n",
579
+ "\n",
580
+ "iface = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)\n",
581
+ "iface.launch(inline=False)\n"
582
+ ]
583
+ },
584
+ {
585
+ "cell_type": "code",
586
+ "execution_count": 16,
587
+ "id": "ee2422bb-ccb3-492b-b704-aefe86f744ce",
588
+ "metadata": {},
589
+ "outputs": [],
590
+ "source": [
591
+ "import nbdev"
592
+ ]
593
+ },
594
+ {
595
+ "cell_type": "code",
596
+ "execution_count": 18,
597
+ "id": "076f1d29-46f9-45c8-b71e-ed2f68635e67",
598
+ "metadata": {},
599
+ "outputs": [
600
+ {
601
+ "name": "stdout",
602
+ "output_type": "stream",
603
+ "text": [
604
+ "Export successful\n"
605
+ ]
606
+ }
607
+ ],
608
+ "source": [
609
+ "nbdev.export.nb_export('test_hugging_face.ipynb', 'app')\n",
610
+ "print('Export successful')"
611
+ ]
612
+ }
613
+ ],
614
+ "metadata": {
615
+ "kernelspec": {
616
+ "display_name": "Python 3 (ipykernel)",
617
+ "language": "python",
618
+ "name": "python3"
619
+ },
620
+ "language_info": {
621
+ "codemirror_mode": {
622
+ "name": "ipython",
623
+ "version": 3
624
+ },
625
+ "file_extension": ".py",
626
+ "mimetype": "text/x-python",
627
+ "name": "python",
628
+ "nbconvert_exporter": "python",
629
+ "pygments_lexer": "ipython3",
630
+ "version": "3.9.6"
631
+ }
632
+ },
633
+ "nbformat": 4,
634
+ "nbformat_minor": 5
635
+ }