tanmaykm commited on
Commit
2f6e90e
1 Parent(s): a1c8406

first version

Browse files
app.ipynb ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "de671814-f264-4014-ac59-43922d1a613d",
7
+ "metadata": {
8
+ "tags": []
9
+ },
10
+ "outputs": [],
11
+ "source": [
12
+ "#|default_exp app"
13
+ ]
14
+ },
15
+ {
16
+ "cell_type": "code",
17
+ "execution_count": 2,
18
+ "id": "3e477a46-ac7c-4e88-96d2-8c5843cbb592",
19
+ "metadata": {
20
+ "tags": []
21
+ },
22
+ "outputs": [],
23
+ "source": [
24
+ "#|export\n",
25
+ "from fastai.vision.all import *\n",
26
+ "import gradio as gr"
27
+ ]
28
+ },
29
+ {
30
+ "cell_type": "code",
31
+ "execution_count": 3,
32
+ "id": "ee36dafd-9451-4886-9a07-6f3d5591e2d0",
33
+ "metadata": {
34
+ "tags": []
35
+ },
36
+ "outputs": [
37
+ {
38
+ "data": {
39
+ "image/png": "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WaOPioKY2c1q6V4z36exxRGAdB8HpQjsMRALaoTPv/AImcGNPYiax2/feC8yg088f6w1MRfOnrJUu/Dkk//mK18d7A3/9m/85Sef/vTJR557491Lr/7g1YW5eanAO++8Q0Tbjy1ffO/yYDjcnOm8/uZrT50/9v2X1q7euQOPPvLm21e+8POfX1k9sTA3s7O345H4CEaA0XXbuc/IW2qK2w0g93uGguE/iMO4R1ZKGWOOoI+H+6oftWvilGQPQ/iPP6SkgwDbzcqjp+dvbw229OkT586eevKzSXvm977+xsWruxv7e+9f3f3bf+83zl/4xM27az947Y133rx44eTMykztV3/pF//SX/pze7uDrY3t40vzv/MHr3z/2++0sP47/+Z7CFTx9bXbe7/4q782s7hy4vT51ky91apfvfLB5YsXP//iCxXPgwMIes9j3msV8OjzFh7ufaDgtCK51y2477hPJOQA4OeMiLP8DjW6qgAAYSijjAXv6YxWjucOHrHMr8/JVBYitEBiLB2fbZ3sVF/d99LZx9bXt7CxuPLEzya3L717O97ef8nT1Yq2WX/3P/mH/9Fb77yzsdV78+1Lr1y6+eJzz1xYnbvyXv1X/tznPvnc2Tevbccnqi88/cTyqRM+ZedPLfS5Wmm2hluDnaG5ujF8+aVX6rXg5//858fjSQhqDGwJmIunkVzjO6XkMrRyTQN5PhUDCwrlZM5BFKvEe4ecsqkxDYQYQPLuYCSSf70+IvQHD8cPlqUKB40+cjAAyGzzby+50YOpyXdO3lQk51TMsYUaZvHmIO2DTew4i3YmSI3OwnYFL9+82qkuXd/c12FybNl//dXr/9l/9neuf3D96r/8Zjzct71HvvP6tZPztUcfPf/Ouze8ZPTYeXXpvTVlsiSWr3/j29FkdPPd22PLM5P6o088sbhQX1iaeffSWqVWk7TLctCttUi2REFBBAIixMI+OI4Ui2AK0FSThek1fn9f7D5rvxRJzinph0AgxyzkpvQhTHW+fO6f31FSIuWRCBYFxapaaL7ws6fubG3V2498YvXCzZ3uIGOrVBz763FKS2cxrP7O9652L11dap/q+MuD21tViJ49v/qLX3wxHva6yXszmXzlj773ylvvPXVm+Wsvff/rr135+Z/99M2tQcD+Jx8/r0x9eaH6y3/5s//qX//g1GL92s3bt/cn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",
40
+ "text/plain": [
41
+ "PILImage mode=RGB size=128x192"
42
+ ]
43
+ },
44
+ "execution_count": 3,
45
+ "metadata": {},
46
+ "output_type": "execute_result"
47
+ }
48
+ ],
49
+ "source": [
50
+ "im = PILImage.create('examples/odissi.jpg')\n",
51
+ "im.thumbnail((192,192))\n",
52
+ "im"
53
+ ]
54
+ },
55
+ {
56
+ "cell_type": "code",
57
+ "execution_count": 4,
58
+ "id": "04067853-7c15-4d1e-97e1-492bbf673e95",
59
+ "metadata": {
60
+ "tags": []
61
+ },
62
+ "outputs": [],
63
+ "source": [
64
+ "#|export\n",
65
+ "learn = load_learner('model/indian_dance_forms_resnet50.pkl')"
66
+ ]
67
+ },
68
+ {
69
+ "cell_type": "code",
70
+ "execution_count": 5,
71
+ "id": "e509f89e-afaf-4113-b306-2c87ba47b3f5",
72
+ "metadata": {
73
+ "tags": []
74
+ },
75
+ "outputs": [
76
+ {
77
+ "name": "stderr",
78
+ "output_type": "stream",
79
+ "text": [
80
+ "/home/tan/.local/lib/python3.10/site-packages/torch/cuda/__init__.py:107: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 9010). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:109.)\n",
81
+ " return torch._C._cuda_getDeviceCount() > 0\n"
82
+ ]
83
+ },
84
+ {
85
+ "data": {
86
+ "text/html": [
87
+ "\n",
88
+ "<style>\n",
89
+ " /* Turns off some styling */\n",
90
+ " progress {\n",
91
+ " /* gets rid of default border in Firefox and Opera. */\n",
92
+ " border: none;\n",
93
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
94
+ " background-size: auto;\n",
95
+ " }\n",
96
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
97
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
98
+ " }\n",
99
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
100
+ " background: #F44336;\n",
101
+ " }\n",
102
+ "</style>\n"
103
+ ],
104
+ "text/plain": [
105
+ "<IPython.core.display.HTML object>"
106
+ ]
107
+ },
108
+ "metadata": {},
109
+ "output_type": "display_data"
110
+ },
111
+ {
112
+ "data": {
113
+ "text/html": [],
114
+ "text/plain": [
115
+ "<IPython.core.display.HTML object>"
116
+ ]
117
+ },
118
+ "metadata": {},
119
+ "output_type": "display_data"
120
+ },
121
+ {
122
+ "data": {
123
+ "text/plain": [
124
+ "('odissi',\n",
125
+ " tensor(6),\n",
126
+ " tensor([2.6438e-02, 1.9373e-03, 3.6551e-04, 4.9653e-04, 1.1909e-04, 1.1666e-02,\n",
127
+ " 9.5897e-01, 1.0382e-05]))"
128
+ ]
129
+ },
130
+ "execution_count": 5,
131
+ "metadata": {},
132
+ "output_type": "execute_result"
133
+ }
134
+ ],
135
+ "source": [
136
+ "learn.predict(im)"
137
+ ]
138
+ },
139
+ {
140
+ "cell_type": "code",
141
+ "execution_count": 6,
142
+ "id": "dce7eb50-5d6c-49ff-af40-38661c5a4382",
143
+ "metadata": {
144
+ "tags": []
145
+ },
146
+ "outputs": [],
147
+ "source": [
148
+ "#!export\n",
149
+ "categories = learn.dls.vocab\n",
150
+ "\n",
151
+ "def classify_dance(img):\n",
152
+ " pred,idx,probs = learn.predict(img)\n",
153
+ " return dict(zip(categories, map(float,probs)))"
154
+ ]
155
+ },
156
+ {
157
+ "cell_type": "code",
158
+ "execution_count": 7,
159
+ "id": "9ac8e22b-fc1c-4c70-887a-c28ad297563d",
160
+ "metadata": {
161
+ "tags": []
162
+ },
163
+ "outputs": [
164
+ {
165
+ "data": {
166
+ "text/html": [
167
+ "\n",
168
+ "<style>\n",
169
+ " /* Turns off some styling */\n",
170
+ " progress {\n",
171
+ " /* gets rid of default border in Firefox and Opera. */\n",
172
+ " border: none;\n",
173
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
174
+ " background-size: auto;\n",
175
+ " }\n",
176
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
177
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
178
+ " }\n",
179
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
180
+ " background: #F44336;\n",
181
+ " }\n",
182
+ "</style>\n"
183
+ ],
184
+ "text/plain": [
185
+ "<IPython.core.display.HTML object>"
186
+ ]
187
+ },
188
+ "metadata": {},
189
+ "output_type": "display_data"
190
+ },
191
+ {
192
+ "data": {
193
+ "text/html": [],
194
+ "text/plain": [
195
+ "<IPython.core.display.HTML object>"
196
+ ]
197
+ },
198
+ "metadata": {},
199
+ "output_type": "display_data"
200
+ },
201
+ {
202
+ "data": {
203
+ "text/plain": [
204
+ "{'bharatanatyam': 0.02643846906721592,\n",
205
+ " 'kathak': 0.0019372508395463228,\n",
206
+ " 'kathakali': 0.0003655065956991166,\n",
207
+ " 'kuchipudi': 0.0004965317784808576,\n",
208
+ " 'manipuri': 0.00011908661690540612,\n",
209
+ " 'mohiniyattam': 0.011665571480989456,\n",
210
+ " 'odissi': 0.9589672088623047,\n",
211
+ " 'sattriya': 1.0382239452155773e-05}"
212
+ ]
213
+ },
214
+ "execution_count": 7,
215
+ "metadata": {},
216
+ "output_type": "execute_result"
217
+ }
218
+ ],
219
+ "source": [
220
+ "classify_dance(im)"
221
+ ]
222
+ },
223
+ {
224
+ "cell_type": "code",
225
+ "execution_count": 8,
226
+ "id": "68faa281-c721-407a-87f5-dcdfce9cf55a",
227
+ "metadata": {
228
+ "tags": []
229
+ },
230
+ "outputs": [
231
+ {
232
+ "name": "stderr",
233
+ "output_type": "stream",
234
+ "text": [
235
+ "/home/tan/.local/lib/python3.10/site-packages/gradio/inputs.py:257: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components\n",
236
+ " warnings.warn(\n",
237
+ "/home/tan/.local/lib/python3.10/site-packages/gradio/deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect\n",
238
+ " warnings.warn(value)\n",
239
+ "/home/tan/.local/lib/python3.10/site-packages/gradio/outputs.py:197: UserWarning: Usage of gradio.outputs is deprecated, and will not be supported in the future, please import your components from gradio.components\n",
240
+ " warnings.warn(\n",
241
+ "/home/tan/.local/lib/python3.10/site-packages/gradio/deprecation.py:40: UserWarning: The 'type' parameter has been deprecated. Use the Number component instead.\n",
242
+ " warnings.warn(value)\n"
243
+ ]
244
+ },
245
+ {
246
+ "name": "stdout",
247
+ "output_type": "stream",
248
+ "text": [
249
+ "Running on local URL: http://127.0.0.1:7860\n",
250
+ "\n",
251
+ "To create a public link, set `share=True` in `launch()`.\n"
252
+ ]
253
+ },
254
+ {
255
+ "data": {
256
+ "text/plain": []
257
+ },
258
+ "execution_count": 8,
259
+ "metadata": {},
260
+ "output_type": "execute_result"
261
+ },
262
+ {
263
+ "data": {
264
+ "text/html": [
265
+ "\n",
266
+ "<style>\n",
267
+ " /* Turns off some styling */\n",
268
+ " progress {\n",
269
+ " /* gets rid of default border in Firefox and Opera. */\n",
270
+ " border: none;\n",
271
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
272
+ " background-size: auto;\n",
273
+ " }\n",
274
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
275
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
276
+ " }\n",
277
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
278
+ " background: #F44336;\n",
279
+ " }\n",
280
+ "</style>\n"
281
+ ],
282
+ "text/plain": [
283
+ "<IPython.core.display.HTML object>"
284
+ ]
285
+ },
286
+ "metadata": {},
287
+ "output_type": "display_data"
288
+ },
289
+ {
290
+ "data": {
291
+ "text/html": [],
292
+ "text/plain": [
293
+ "<IPython.core.display.HTML object>"
294
+ ]
295
+ },
296
+ "metadata": {},
297
+ "output_type": "display_data"
298
+ },
299
+ {
300
+ "data": {
301
+ "text/html": [
302
+ "\n",
303
+ "<style>\n",
304
+ " /* Turns off some styling */\n",
305
+ " progress {\n",
306
+ " /* gets rid of default border in Firefox and Opera. */\n",
307
+ " border: none;\n",
308
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
309
+ " background-size: auto;\n",
310
+ " }\n",
311
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
312
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
313
+ " }\n",
314
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
315
+ " background: #F44336;\n",
316
+ " }\n",
317
+ "</style>\n"
318
+ ],
319
+ "text/plain": [
320
+ "<IPython.core.display.HTML object>"
321
+ ]
322
+ },
323
+ "metadata": {},
324
+ "output_type": "display_data"
325
+ },
326
+ {
327
+ "data": {
328
+ "text/html": [],
329
+ "text/plain": [
330
+ "<IPython.core.display.HTML object>"
331
+ ]
332
+ },
333
+ "metadata": {},
334
+ "output_type": "display_data"
335
+ },
336
+ {
337
+ "data": {
338
+ "text/html": [
339
+ "\n",
340
+ "<style>\n",
341
+ " /* Turns off some styling */\n",
342
+ " progress {\n",
343
+ " /* gets rid of default border in Firefox and Opera. */\n",
344
+ " border: none;\n",
345
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
346
+ " background-size: auto;\n",
347
+ " }\n",
348
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
349
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
350
+ " }\n",
351
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
352
+ " background: #F44336;\n",
353
+ " }\n",
354
+ "</style>\n"
355
+ ],
356
+ "text/plain": [
357
+ "<IPython.core.display.HTML object>"
358
+ ]
359
+ },
360
+ "metadata": {},
361
+ "output_type": "display_data"
362
+ },
363
+ {
364
+ "data": {
365
+ "text/html": [],
366
+ "text/plain": [
367
+ "<IPython.core.display.HTML object>"
368
+ ]
369
+ },
370
+ "metadata": {},
371
+ "output_type": "display_data"
372
+ }
373
+ ],
374
+ "source": [
375
+ "#|export\n",
376
+ "image = gr.inputs.Image(shape=(192,192))\n",
377
+ "label = gr.outputs.Label()\n",
378
+ "examples = ['examples/odissi.jpg',\n",
379
+ " 'examples/bharatanatyam.jpg',\n",
380
+ " 'examples/kathakali.jpg']\n",
381
+ "intf = gr.Interface(fn=classify_dance, inputs=image, outputs=label, examples=examples)\n",
382
+ "intf.launch(inline=False)"
383
+ ]
384
+ },
385
+ {
386
+ "cell_type": "code",
387
+ "execution_count": 9,
388
+ "id": "d833d8c3-1dfe-4c2e-8ccb-4fd8c55ad0ca",
389
+ "metadata": {
390
+ "tags": []
391
+ },
392
+ "outputs": [],
393
+ "source": [
394
+ "import nbdev\n",
395
+ "nbdev.export.nb_export('app.ipynb', './')"
396
+ ]
397
+ },
398
+ {
399
+ "cell_type": "code",
400
+ "execution_count": null,
401
+ "id": "e92dc5ed-53dd-41b6-a3a4-2ac40cc08dc5",
402
+ "metadata": {},
403
+ "outputs": [],
404
+ "source": []
405
+ }
406
+ ],
407
+ "metadata": {
408
+ "kernelspec": {
409
+ "display_name": "Python 3 (ipykernel)",
410
+ "language": "python",
411
+ "name": "python3"
412
+ },
413
+ "language_info": {
414
+ "codemirror_mode": {
415
+ "name": "ipython",
416
+ "version": 3
417
+ },
418
+ "file_extension": ".py",
419
+ "mimetype": "text/x-python",
420
+ "name": "python",
421
+ "nbconvert_exporter": "python",
422
+ "pygments_lexer": "ipython3",
423
+ "version": "3.10.6"
424
+ }
425
+ },
426
+ "nbformat": 4,
427
+ "nbformat_minor": 5
428
+ }
app.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AUTOGENERATED! DO NOT EDIT! File to edit: app.ipynb.
2
+
3
+ # %% auto 0
4
+ __all__ = ['learn', 'image', 'label', 'examples', 'intf']
5
+
6
+ # %% app.ipynb 1
7
+ from fastai.vision.all import *
8
+ import gradio as gr
9
+
10
+ # %% app.ipynb 3
11
+ learn = load_learner('model/indian_dance_forms_resnet50.pkl')
12
+
13
+ # %% app.ipynb 7
14
+ image = gr.inputs.Image(shape=(192,192))
15
+ label = gr.outputs.Label()
16
+ examples = ['examples/odissi.jpg',
17
+ 'examples/bharatanatyam.jpg',
18
+ 'examples/kathakali.jpg']
19
+ intf = gr.Interface(fn=classify_dance, inputs=image, outputs=label, examples=examples)
20
+ intf.launch(inline=False)
examples/bharatanatyam.jpg ADDED
examples/kathakali.jpg ADDED
examples/odissi.jpg ADDED
model/README.md ADDED
File without changes