Kaushik Sinha commited on
Commit
c113905
1 Parent(s): 571a90f

gradio flag classifier app

Browse files
Files changed (6) hide show
  1. .ipynb_checkpoints/app-checkpoint.ipynb +6 -0
  2. app.ipynb +259 -0
  3. app.py +24 -0
  4. california.jpg +0 -0
  5. unnamed.jpg +0 -0
  6. virginia.jpg +0 -0
.ipynb_checkpoints/app-checkpoint.ipynb ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [],
3
+ "metadata": {},
4
+ "nbformat": 4,
5
+ "nbformat_minor": 5
6
+ }
app.ipynb ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "9a4cc8f4",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "#|default_exp app"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "code",
15
+ "execution_count": 2,
16
+ "id": "6ef87687",
17
+ "metadata": {},
18
+ "outputs": [],
19
+ "source": [
20
+ "#|export\n",
21
+ "from fastai.vision.all import *\n",
22
+ "import gradio as gr"
23
+ ]
24
+ },
25
+ {
26
+ "cell_type": "code",
27
+ "execution_count": 3,
28
+ "id": "d8c5d365",
29
+ "metadata": {},
30
+ "outputs": [
31
+ {
32
+ "data": {
33
+ "image/png": "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\n",
34
+ "text/plain": [
35
+ "PILImage mode=RGB size=192x192"
36
+ ]
37
+ },
38
+ "execution_count": 3,
39
+ "metadata": {},
40
+ "output_type": "execute_result"
41
+ }
42
+ ],
43
+ "source": [
44
+ "im = PILImage.create('virginia.jpg')\n",
45
+ "im.thumbnail((192,192))\n",
46
+ "im"
47
+ ]
48
+ },
49
+ {
50
+ "cell_type": "code",
51
+ "execution_count": 4,
52
+ "id": "570e0d36",
53
+ "metadata": {},
54
+ "outputs": [],
55
+ "source": [
56
+ "#|export\n",
57
+ "learn = load_learner('us_flag_classifier_model.pkl')"
58
+ ]
59
+ },
60
+ {
61
+ "cell_type": "code",
62
+ "execution_count": 5,
63
+ "id": "b720f38b",
64
+ "metadata": {},
65
+ "outputs": [
66
+ {
67
+ "data": {
68
+ "text/html": [
69
+ "\n",
70
+ "<style>\n",
71
+ " /* Turns off some styling */\n",
72
+ " progress {\n",
73
+ " /* gets rid of default border in Firefox and Opera. */\n",
74
+ " border: none;\n",
75
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
76
+ " background-size: auto;\n",
77
+ " }\n",
78
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
79
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
80
+ " }\n",
81
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
82
+ " background: #F44336;\n",
83
+ " }\n",
84
+ "</style>\n"
85
+ ],
86
+ "text/plain": [
87
+ "<IPython.core.display.HTML object>"
88
+ ]
89
+ },
90
+ "metadata": {},
91
+ "output_type": "display_data"
92
+ },
93
+ {
94
+ "data": {
95
+ "text/html": [],
96
+ "text/plain": [
97
+ "<IPython.core.display.HTML object>"
98
+ ]
99
+ },
100
+ "metadata": {},
101
+ "output_type": "display_data"
102
+ },
103
+ {
104
+ "name": "stdout",
105
+ "output_type": "stream",
106
+ "text": [
107
+ "CPU times: user 146 ms, sys: 24.2 ms, total: 170 ms\n",
108
+ "Wall time: 62 ms\n"
109
+ ]
110
+ },
111
+ {
112
+ "data": {
113
+ "text/plain": [
114
+ "('Virginia',\n",
115
+ " TensorBase(51),\n",
116
+ " TensorBase([2.4324e-04, 3.2692e-04, 2.7230e-04, 9.8717e-05, 1.7264e-04,\n",
117
+ " 3.7322e-05, 1.5884e-04, 7.1611e-04, 3.7362e-05, 2.5848e-04,\n",
118
+ " 2.5484e-04, 9.4434e-06, 5.3560e-03, 3.8893e-04, 3.2906e-03,\n",
119
+ " 6.0684e-05, 1.3504e-04, 2.8878e-03, 2.7466e-03, 4.7643e-04,\n",
120
+ " 2.5224e-04, 7.1959e-03, 2.4807e-04, 2.1605e-04, 6.3929e-05,\n",
121
+ " 7.4255e-02, 3.9130e-04, 2.3757e-02, 6.6141e-03, 2.8289e-04,\n",
122
+ " 5.9384e-05, 7.2102e-04, 2.0143e-05, 5.2313e-05, 1.4563e-05,\n",
123
+ " 3.5465e-05, 6.8503e-06, 1.3420e-03, 3.5132e-05, 5.3813e-04,\n",
124
+ " 3.9269e-05, 6.8339e-03, 3.5217e-05, 1.3791e-04, 6.2349e-05,\n",
125
+ " 3.0587e-03, 3.5639e-05, 8.6754e-06, 2.9960e-05, 6.8606e-04,\n",
126
+ " 2.2120e-04, 8.3217e-01, 6.7605e-04, 2.1150e-02, 4.0541e-04,\n",
127
+ " 4.1559e-04]))"
128
+ ]
129
+ },
130
+ "execution_count": 5,
131
+ "metadata": {},
132
+ "output_type": "execute_result"
133
+ }
134
+ ],
135
+ "source": [
136
+ "%time learn.predict(im)"
137
+ ]
138
+ },
139
+ {
140
+ "cell_type": "code",
141
+ "execution_count": 6,
142
+ "id": "c0b37b48",
143
+ "metadata": {},
144
+ "outputs": [
145
+ {
146
+ "data": {
147
+ "text/plain": [
148
+ "['Alabama', 'Alaska', 'American Samoa', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Guam', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Northern Mariana Islands', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Puerto Rico', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'U.S. Virgin Islands', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']"
149
+ ]
150
+ },
151
+ "execution_count": 6,
152
+ "metadata": {},
153
+ "output_type": "execute_result"
154
+ }
155
+ ],
156
+ "source": [
157
+ "learn.dls.vocab"
158
+ ]
159
+ },
160
+ {
161
+ "cell_type": "code",
162
+ "execution_count": 7,
163
+ "id": "a7fc9102",
164
+ "metadata": {},
165
+ "outputs": [],
166
+ "source": [
167
+ "#|export\n",
168
+ "def classify_image(img):\n",
169
+ " pred, pred_idx, probs = learn.predict(img) \n",
170
+ " return dict(zip(learn.dls.vocab, map(float,probs)))"
171
+ ]
172
+ },
173
+ {
174
+ "cell_type": "code",
175
+ "execution_count": 8,
176
+ "id": "9b00c6ff",
177
+ "metadata": {},
178
+ "outputs": [
179
+ {
180
+ "name": "stdout",
181
+ "output_type": "stream",
182
+ "text": [
183
+ "Running on local URL: http://127.0.0.1:7860/\n",
184
+ "\n",
185
+ "To create a public link, set `share=True` in `launch()`.\n"
186
+ ]
187
+ },
188
+ {
189
+ "data": {
190
+ "text/plain": [
191
+ "(<gradio.routes.App at 0x14bc7eef0>, 'http://127.0.0.1:7860/', None)"
192
+ ]
193
+ },
194
+ "execution_count": 8,
195
+ "metadata": {},
196
+ "output_type": "execute_result"
197
+ }
198
+ ],
199
+ "source": [
200
+ "#|export\n",
201
+ "image = gr.components.Image(shape=(192,192))\n",
202
+ "label = gr.components.Label(num_top_classes=5)\n",
203
+ "examples = ['california.jpg','virginia.jpg','unnamed.jpg']\n",
204
+ "\n",
205
+ "iface = gr.Interface(fn=classify_image,inputs=image,outputs=label, examples=examples)\n",
206
+ "iface.launch(inline=False)"
207
+ ]
208
+ },
209
+ {
210
+ "cell_type": "code",
211
+ "execution_count": 9,
212
+ "id": "f71f3f79",
213
+ "metadata": {},
214
+ "outputs": [],
215
+ "source": [
216
+ "from nbdev.export import nb_export"
217
+ ]
218
+ },
219
+ {
220
+ "cell_type": "code",
221
+ "execution_count": 12,
222
+ "id": "191766ed",
223
+ "metadata": {},
224
+ "outputs": [],
225
+ "source": [
226
+ "nb_export('app.ipynb', lib_path=Path('.'))"
227
+ ]
228
+ },
229
+ {
230
+ "cell_type": "code",
231
+ "execution_count": null,
232
+ "id": "345a7eb6",
233
+ "metadata": {},
234
+ "outputs": [],
235
+ "source": []
236
+ }
237
+ ],
238
+ "metadata": {
239
+ "kernelspec": {
240
+ "display_name": "Python 3 (ipykernel)",
241
+ "language": "python",
242
+ "name": "python3"
243
+ },
244
+ "language_info": {
245
+ "codemirror_mode": {
246
+ "name": "ipython",
247
+ "version": 3
248
+ },
249
+ "file_extension": ".py",
250
+ "mimetype": "text/x-python",
251
+ "name": "python",
252
+ "nbconvert_exporter": "python",
253
+ "pygments_lexer": "ipython3",
254
+ "version": "3.10.6"
255
+ }
256
+ },
257
+ "nbformat": 4,
258
+ "nbformat_minor": 5
259
+ }
app.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AUTOGENERATED! DO NOT EDIT! File to edit: app.ipynb.
2
+
3
+ # %% auto 0
4
+ __all__ = ['learn', 'image', 'label', 'examples', 'iface', 'classify_image']
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('us_flag_classifier_model.pkl')
12
+
13
+ # %% app.ipynb 6
14
+ def classify_image(img):
15
+ pred, pred_idx, probs = learn.predict(img)
16
+ return dict(zip(learn.dls.vocab, map(float,probs)))
17
+
18
+ # %% app.ipynb 7
19
+ image = gr.components.Image(shape=(192,192))
20
+ label = gr.components.Label(num_top_classes=5)
21
+ examples = ['california.jpg','virginia.jpg','unnamed.jpg']
22
+
23
+ iface = gr.Interface(fn=classify_image,inputs=image,outputs=label, examples=examples)
24
+ iface.launch(inline=False)
california.jpg ADDED
unnamed.jpg ADDED
virginia.jpg ADDED