ankushgaur commited on
Commit
2f5cda0
1 Parent(s): 9767ea4

dog or cat

Browse files
Files changed (5) hide show
  1. __pycache__/pickle.cpython-39.pyc +0 -0
  2. app.ipynb +610 -0
  3. app.py +17 -4
  4. dog.jpg +0 -0
  5. model.pkl +3 -0
__pycache__/pickle.cpython-39.pyc ADDED
Binary file (131 Bytes). View file
 
app.ipynb ADDED
@@ -0,0 +1,610 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "ab613582",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "#|export\n",
11
+ "from fastai.vision.all import *"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 2,
17
+ "id": "c54fe8de",
18
+ "metadata": {},
19
+ "outputs": [],
20
+ "source": [
21
+ "#|export\n",
22
+ "import gradio as gr"
23
+ ]
24
+ },
25
+ {
26
+ "cell_type": "code",
27
+ "execution_count": 4,
28
+ "id": "9d637933",
29
+ "metadata": {},
30
+ "outputs": [],
31
+ "source": [
32
+ "#|export\n",
33
+ "def is_cat(x): return x[0].isupper()"
34
+ ]
35
+ },
36
+ {
37
+ "cell_type": "code",
38
+ "execution_count": 3,
39
+ "id": "dc71f7a6",
40
+ "metadata": {},
41
+ "outputs": [
42
+ {
43
+ "data": {
44
+ "image/png": "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\n",
45
+ "text/plain": [
46
+ "PILImage mode=RGB size=164x169"
47
+ ]
48
+ },
49
+ "execution_count": 3,
50
+ "metadata": {},
51
+ "output_type": "execute_result"
52
+ }
53
+ ],
54
+ "source": [
55
+ "im = PILImage.create('dog.jpg')\n",
56
+ "im.thumbnail((192,192))\n",
57
+ "im"
58
+ ]
59
+ },
60
+ {
61
+ "cell_type": "code",
62
+ "execution_count": 6,
63
+ "id": "7a43bf0d",
64
+ "metadata": {},
65
+ "outputs": [],
66
+ "source": [
67
+ "#|export\n",
68
+ "\n",
69
+ "# Do this to fix NotImplementedError: cannot instantiate 'PosixPath' on your system\n",
70
+ "import pathlib\n",
71
+ "temp = pathlib.PosixPath\n",
72
+ "pathlib.PosixPath = pathlib.WindowsPath"
73
+ ]
74
+ },
75
+ {
76
+ "cell_type": "code",
77
+ "execution_count": 7,
78
+ "id": "cb446bf4",
79
+ "metadata": {},
80
+ "outputs": [],
81
+ "source": [
82
+ "#|export\n",
83
+ "learn = load_learner('model.pkl')"
84
+ ]
85
+ },
86
+ {
87
+ "cell_type": "code",
88
+ "execution_count": 8,
89
+ "id": "fb653569",
90
+ "metadata": {},
91
+ "outputs": [
92
+ {
93
+ "data": {
94
+ "text/html": [
95
+ "\n",
96
+ "<style>\n",
97
+ " /* Turns off some styling */\n",
98
+ " progress {\n",
99
+ " /* gets rid of default border in Firefox and Opera. */\n",
100
+ " border: none;\n",
101
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
102
+ " background-size: auto;\n",
103
+ " }\n",
104
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
105
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
106
+ " }\n",
107
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
108
+ " background: #F44336;\n",
109
+ " }\n",
110
+ "</style>\n"
111
+ ],
112
+ "text/plain": [
113
+ "<IPython.core.display.HTML object>"
114
+ ]
115
+ },
116
+ "metadata": {},
117
+ "output_type": "display_data"
118
+ },
119
+ {
120
+ "data": {
121
+ "text/html": [],
122
+ "text/plain": [
123
+ "<IPython.core.display.HTML object>"
124
+ ]
125
+ },
126
+ "metadata": {},
127
+ "output_type": "display_data"
128
+ },
129
+ {
130
+ "data": {
131
+ "text/plain": [
132
+ "('False', TensorBase(0), TensorBase([1.0000e+00, 4.9128e-08]))"
133
+ ]
134
+ },
135
+ "execution_count": 8,
136
+ "metadata": {},
137
+ "output_type": "execute_result"
138
+ }
139
+ ],
140
+ "source": [
141
+ "learn.predict(im)"
142
+ ]
143
+ },
144
+ {
145
+ "cell_type": "code",
146
+ "execution_count": 9,
147
+ "id": "f3281347",
148
+ "metadata": {},
149
+ "outputs": [],
150
+ "source": [
151
+ "#|export\n",
152
+ "categories = ('Dog','Cat')\n",
153
+ "\n",
154
+ "def classify_image(img):\n",
155
+ " pred, idx, probs = learn.predict(img)\n",
156
+ " return dict(zip(categories, map(float,probs)))"
157
+ ]
158
+ },
159
+ {
160
+ "cell_type": "code",
161
+ "execution_count": 11,
162
+ "id": "76f1007c",
163
+ "metadata": {},
164
+ "outputs": [
165
+ {
166
+ "data": {
167
+ "text/html": [
168
+ "\n",
169
+ "<style>\n",
170
+ " /* Turns off some styling */\n",
171
+ " progress {\n",
172
+ " /* gets rid of default border in Firefox and Opera. */\n",
173
+ " border: none;\n",
174
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
175
+ " background-size: auto;\n",
176
+ " }\n",
177
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
178
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
179
+ " }\n",
180
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
181
+ " background: #F44336;\n",
182
+ " }\n",
183
+ "</style>\n"
184
+ ],
185
+ "text/plain": [
186
+ "<IPython.core.display.HTML object>"
187
+ ]
188
+ },
189
+ "metadata": {},
190
+ "output_type": "display_data"
191
+ },
192
+ {
193
+ "data": {
194
+ "text/html": [],
195
+ "text/plain": [
196
+ "<IPython.core.display.HTML object>"
197
+ ]
198
+ },
199
+ "metadata": {},
200
+ "output_type": "display_data"
201
+ },
202
+ {
203
+ "name": "stdout",
204
+ "output_type": "stream",
205
+ "text": [
206
+ "Wall time: 47.7 ms\n"
207
+ ]
208
+ },
209
+ {
210
+ "data": {
211
+ "text/plain": [
212
+ "{'Dog': 1.0, 'Cat': 4.912791951028339e-08}"
213
+ ]
214
+ },
215
+ "execution_count": 11,
216
+ "metadata": {},
217
+ "output_type": "execute_result"
218
+ }
219
+ ],
220
+ "source": [
221
+ "%time classify_image(im)"
222
+ ]
223
+ },
224
+ {
225
+ "cell_type": "code",
226
+ "execution_count": 12,
227
+ "id": "16e60ab3",
228
+ "metadata": {},
229
+ "outputs": [
230
+ {
231
+ "name": "stderr",
232
+ "output_type": "stream",
233
+ "text": [
234
+ "C:\\Users\\Ankush\\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",
235
+ " warnings.warn(\n",
236
+ "C:\\Users\\Ankush\\anaconda3\\lib\\site-packages\\gradio\\deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect\n",
237
+ " warnings.warn(value)\n",
238
+ "C:\\Users\\Ankush\\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",
239
+ " warnings.warn(\n",
240
+ "C:\\Users\\Ankush\\anaconda3\\lib\\site-packages\\gradio\\deprecation.py:40: UserWarning: The 'type' parameter has been deprecated. Use the Number component instead.\n",
241
+ " warnings.warn(value)\n"
242
+ ]
243
+ }
244
+ ],
245
+ "source": [
246
+ "#|export\n",
247
+ "image = gr.inputs.Image(shape=(192,192))\n",
248
+ "label = gr.outputs.Label()\n",
249
+ "examples = ['dog.jpg']"
250
+ ]
251
+ },
252
+ {
253
+ "cell_type": "code",
254
+ "execution_count": 13,
255
+ "id": "ae2351cb",
256
+ "metadata": {},
257
+ "outputs": [
258
+ {
259
+ "name": "stdout",
260
+ "output_type": "stream",
261
+ "text": [
262
+ "Running on local URL: http://127.0.0.1:7860/\n",
263
+ "\n",
264
+ "To create a public link, set `share=True` in `launch()`.\n"
265
+ ]
266
+ },
267
+ {
268
+ "data": {
269
+ "text/plain": [
270
+ "(<gradio.routes.App at 0x14b0f01e130>, 'http://127.0.0.1:7860/', None)"
271
+ ]
272
+ },
273
+ "execution_count": 13,
274
+ "metadata": {},
275
+ "output_type": "execute_result"
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
+ "intf = gr.Interface(fn = classify_image, inputs = image, outputs = label, examples = examples)\n",
577
+ "intf.launch(inline=False)"
578
+ ]
579
+ },
580
+ {
581
+ "cell_type": "code",
582
+ "execution_count": null,
583
+ "id": "41066aeb",
584
+ "metadata": {},
585
+ "outputs": [],
586
+ "source": []
587
+ }
588
+ ],
589
+ "metadata": {
590
+ "kernelspec": {
591
+ "display_name": "Python 3 (ipykernel)",
592
+ "language": "python",
593
+ "name": "python3"
594
+ },
595
+ "language_info": {
596
+ "codemirror_mode": {
597
+ "name": "ipython",
598
+ "version": 3
599
+ },
600
+ "file_extension": ".py",
601
+ "mimetype": "text/x-python",
602
+ "name": "python",
603
+ "nbconvert_exporter": "python",
604
+ "pygments_lexer": "ipython3",
605
+ "version": "3.9.12"
606
+ }
607
+ },
608
+ "nbformat": 4,
609
+ "nbformat_minor": 5
610
+ }
app.py CHANGED
@@ -1,7 +1,20 @@
 
 
 
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
+ #|export
2
+ from fastai.vision.all import *
3
+
4
  import gradio as gr
5
+ def is_cat(x): return x[0].isupper()
6
+
7
+ learn = load_learner('model.pkl')
8
+
9
+ categories = ('Dog','Cat')
10
+
11
+ def classify_image(img):
12
+ pred, idx, probs = learn.predict(img)
13
+ return dict(zip(categories, map(float,probs)))
14
 
15
+ image = gr.inputs.Image(shape=(192,192))
16
+ label = gr.outputs.Label()
17
+ examples = ['dog.jpg']
18
 
19
+ intf = gr.Interface(fn = classify_image, inputs = image, outputs = label, examples = examples)
20
+ intf.launch(inline=False)
dog.jpg ADDED
model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7483255f9870bf2ca8137fe69894058c783bfaa94f22b12a2a91f2606a7ee743
3
+ size 47061355