Spaces:
Build error
Build error
mateocontreras
commited on
Commit
·
74fa69a
1
Parent(s):
a504cb5
prueba
Browse files- app.py +14 -0
- dogs_v_cats.ipynb +469 -0
- gato.jpeg +0 -0
- gato_perro.jpeg +0 -0
- gato_perro_2.jpg +0 -0
- model.pkl +3 -0
- perro.jpg +0 -0
- requirements.txt +5 -0
app.py
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastai.vision.all import *
|
2 |
+
import gradio as gr
|
3 |
+
def is_cat(x): return x[0].isupper()
|
4 |
+
learner = load_learner('model.pkl')
|
5 |
+
categorias = ("Perro", "Gato")
|
6 |
+
def clasificar_imagen(img):
|
7 |
+
prediccion, indice, probabilidades = learner.predict(img)
|
8 |
+
return dict(zip(categorias, map(float,probabilidades)))
|
9 |
+
imagen = gr.inputs.Image(shape=(192,192))
|
10 |
+
etiqueta = gr.outputs.Label()
|
11 |
+
ejemplos = ['perro.jpg','gato.jpeg','gato_perro.jpeg','gato_perro_2.jpg']
|
12 |
+
|
13 |
+
interfaz = gr.Interface(fn=clasificar_imagen,inputs=imagen,outputs=etiqueta, examples=ejemplos)
|
14 |
+
interfaz.launch(inline=False)
|
dogs_v_cats.ipynb
ADDED
@@ -0,0 +1,469 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 9,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"#!pip install nbconvert\n"
|
10 |
+
]
|
11 |
+
},
|
12 |
+
{
|
13 |
+
"cell_type": "code",
|
14 |
+
"execution_count": 10,
|
15 |
+
"metadata": {},
|
16 |
+
"outputs": [],
|
17 |
+
"source": [
|
18 |
+
"#exportar\n",
|
19 |
+
"from fastai.vision.all import *\n",
|
20 |
+
"import gradio as gr\n",
|
21 |
+
"def is_cat(x): return x[0].isupper()\n",
|
22 |
+
"\n",
|
23 |
+
"import pathlib\n",
|
24 |
+
"temp = pathlib.PosixPath\n",
|
25 |
+
"pathlib.PosixPath = pathlib.WindowsPath"
|
26 |
+
]
|
27 |
+
},
|
28 |
+
{
|
29 |
+
"cell_type": "code",
|
30 |
+
"execution_count": 11,
|
31 |
+
"metadata": {},
|
32 |
+
"outputs": [
|
33 |
+
{
|
34 |
+
"data": {
|
35 |
+
"image/png": "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",
|
36 |
+
"text/plain": [
|
37 |
+
"PILImage mode=RGB size=89x192"
|
38 |
+
]
|
39 |
+
},
|
40 |
+
"execution_count": 11,
|
41 |
+
"metadata": {},
|
42 |
+
"output_type": "execute_result"
|
43 |
+
}
|
44 |
+
],
|
45 |
+
"source": [
|
46 |
+
"im = PILImage.create(\"gato.jpeg\")\n",
|
47 |
+
"im.thumbnail((192,192))\n",
|
48 |
+
"im"
|
49 |
+
]
|
50 |
+
},
|
51 |
+
{
|
52 |
+
"cell_type": "code",
|
53 |
+
"execution_count": 12,
|
54 |
+
"metadata": {},
|
55 |
+
"outputs": [],
|
56 |
+
"source": [
|
57 |
+
"#exportar\n",
|
58 |
+
"learner = load_learner('model.pkl')\n"
|
59 |
+
]
|
60 |
+
},
|
61 |
+
{
|
62 |
+
"cell_type": "code",
|
63 |
+
"execution_count": 13,
|
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 |
+
"\n",
|
97 |
+
" <div>\n",
|
98 |
+
" <progress value='0' class='' max='1' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
|
99 |
+
" 0.00% [0/1 00:00<?]\n",
|
100 |
+
" </div>\n",
|
101 |
+
" "
|
102 |
+
],
|
103 |
+
"text/plain": [
|
104 |
+
"<IPython.core.display.HTML object>"
|
105 |
+
]
|
106 |
+
},
|
107 |
+
"metadata": {},
|
108 |
+
"output_type": "display_data"
|
109 |
+
},
|
110 |
+
{
|
111 |
+
"data": {
|
112 |
+
"text/plain": [
|
113 |
+
"('True', tensor(1), tensor([1.1888e-17, 1.0000e+00]))"
|
114 |
+
]
|
115 |
+
},
|
116 |
+
"execution_count": 13,
|
117 |
+
"metadata": {},
|
118 |
+
"output_type": "execute_result"
|
119 |
+
}
|
120 |
+
],
|
121 |
+
"source": [
|
122 |
+
"learner.predict(im)"
|
123 |
+
]
|
124 |
+
},
|
125 |
+
{
|
126 |
+
"cell_type": "code",
|
127 |
+
"execution_count": 14,
|
128 |
+
"metadata": {},
|
129 |
+
"outputs": [],
|
130 |
+
"source": [
|
131 |
+
"#exportar\n",
|
132 |
+
"categorias = (\"Perro\", \"Gato\")\n",
|
133 |
+
"def clasificar_imagen(img):\n",
|
134 |
+
" prediccion, indice, probabilidades = learner.predict(img)\n",
|
135 |
+
" return dict(zip(categorias, map(float,probabilidades)))\n"
|
136 |
+
]
|
137 |
+
},
|
138 |
+
{
|
139 |
+
"cell_type": "code",
|
140 |
+
"execution_count": null,
|
141 |
+
"metadata": {},
|
142 |
+
"outputs": [],
|
143 |
+
"source": []
|
144 |
+
},
|
145 |
+
{
|
146 |
+
"cell_type": "code",
|
147 |
+
"execution_count": 15,
|
148 |
+
"metadata": {},
|
149 |
+
"outputs": [
|
150 |
+
{
|
151 |
+
"data": {
|
152 |
+
"text/html": [
|
153 |
+
"\n",
|
154 |
+
"<style>\n",
|
155 |
+
" /* Turns off some styling */\n",
|
156 |
+
" progress {\n",
|
157 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
158 |
+
" border: none;\n",
|
159 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
160 |
+
" background-size: auto;\n",
|
161 |
+
" }\n",
|
162 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
163 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
164 |
+
" }\n",
|
165 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
166 |
+
" background: #F44336;\n",
|
167 |
+
" }\n",
|
168 |
+
"</style>\n"
|
169 |
+
],
|
170 |
+
"text/plain": [
|
171 |
+
"<IPython.core.display.HTML object>"
|
172 |
+
]
|
173 |
+
},
|
174 |
+
"metadata": {},
|
175 |
+
"output_type": "display_data"
|
176 |
+
},
|
177 |
+
{
|
178 |
+
"data": {
|
179 |
+
"text/html": [],
|
180 |
+
"text/plain": [
|
181 |
+
"<IPython.core.display.HTML object>"
|
182 |
+
]
|
183 |
+
},
|
184 |
+
"metadata": {},
|
185 |
+
"output_type": "display_data"
|
186 |
+
},
|
187 |
+
{
|
188 |
+
"data": {
|
189 |
+
"text/plain": [
|
190 |
+
"{'Perro': 1.1887927089340569e-17, 'Gato': 1.0}"
|
191 |
+
]
|
192 |
+
},
|
193 |
+
"execution_count": 15,
|
194 |
+
"metadata": {},
|
195 |
+
"output_type": "execute_result"
|
196 |
+
}
|
197 |
+
],
|
198 |
+
"source": [
|
199 |
+
"clasificar_imagen(im)"
|
200 |
+
]
|
201 |
+
},
|
202 |
+
{
|
203 |
+
"cell_type": "code",
|
204 |
+
"execution_count": null,
|
205 |
+
"metadata": {},
|
206 |
+
"outputs": [
|
207 |
+
{
|
208 |
+
"name": "stderr",
|
209 |
+
"output_type": "stream",
|
210 |
+
"text": [
|
211 |
+
"C:\\Users\\Mateo\\AppData\\Local\\Temp\\ipykernel_3488\\3452659319.py:2: GradioDeprecationWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components\n",
|
212 |
+
" imagen = gr.inputs.Image(shape=(192,192))\n",
|
213 |
+
"C:\\Users\\Mateo\\AppData\\Local\\Temp\\ipykernel_3488\\3452659319.py:2: GradioDeprecationWarning: `optional` parameter is deprecated, and it has no effect\n",
|
214 |
+
" imagen = gr.inputs.Image(shape=(192,192))\n",
|
215 |
+
"C:\\Users\\Mateo\\AppData\\Local\\Temp\\ipykernel_3488\\3452659319.py:3: GradioDeprecationWarning: Usage of gradio.outputs is deprecated, and will not be supported in the future, please import your components from gradio.components\n",
|
216 |
+
" etiqueta = gr.outputs.Label()\n",
|
217 |
+
"C:\\Users\\Mateo\\AppData\\Local\\Temp\\ipykernel_3488\\3452659319.py:3: GradioUnusedKwargWarning: You have unused kwarg parameters in Label, please remove them: {'type': 'auto'}\n",
|
218 |
+
" etiqueta = gr.outputs.Label()\n"
|
219 |
+
]
|
220 |
+
},
|
221 |
+
{
|
222 |
+
"name": "stdout",
|
223 |
+
"output_type": "stream",
|
224 |
+
"text": [
|
225 |
+
"Running on local URL: http://127.0.0.1:7861\n",
|
226 |
+
"\n",
|
227 |
+
"To create a public link, set `share=True` in `launch()`.\n"
|
228 |
+
]
|
229 |
+
},
|
230 |
+
{
|
231 |
+
"data": {
|
232 |
+
"text/html": [
|
233 |
+
"<div><iframe src=\"http://127.0.0.1:7861/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
|
234 |
+
],
|
235 |
+
"text/plain": [
|
236 |
+
"<IPython.core.display.HTML object>"
|
237 |
+
]
|
238 |
+
},
|
239 |
+
"metadata": {},
|
240 |
+
"output_type": "display_data"
|
241 |
+
},
|
242 |
+
{
|
243 |
+
"data": {
|
244 |
+
"text/plain": []
|
245 |
+
},
|
246 |
+
"execution_count": 16,
|
247 |
+
"metadata": {},
|
248 |
+
"output_type": "execute_result"
|
249 |
+
},
|
250 |
+
{
|
251 |
+
"data": {
|
252 |
+
"text/html": [
|
253 |
+
"\n",
|
254 |
+
"<style>\n",
|
255 |
+
" /* Turns off some styling */\n",
|
256 |
+
" progress {\n",
|
257 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
258 |
+
" border: none;\n",
|
259 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
260 |
+
" background-size: auto;\n",
|
261 |
+
" }\n",
|
262 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
263 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
264 |
+
" }\n",
|
265 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
266 |
+
" background: #F44336;\n",
|
267 |
+
" }\n",
|
268 |
+
"</style>\n"
|
269 |
+
],
|
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 |
+
"text/plain": [
|
281 |
+
"<IPython.core.display.HTML object>"
|
282 |
+
]
|
283 |
+
},
|
284 |
+
"metadata": {},
|
285 |
+
"output_type": "display_data"
|
286 |
+
},
|
287 |
+
{
|
288 |
+
"data": {
|
289 |
+
"text/html": [
|
290 |
+
"\n",
|
291 |
+
"<style>\n",
|
292 |
+
" /* Turns off some styling */\n",
|
293 |
+
" progress {\n",
|
294 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
295 |
+
" border: none;\n",
|
296 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
297 |
+
" background-size: auto;\n",
|
298 |
+
" }\n",
|
299 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
300 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
301 |
+
" }\n",
|
302 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
303 |
+
" background: #F44336;\n",
|
304 |
+
" }\n",
|
305 |
+
"</style>\n"
|
306 |
+
],
|
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 |
+
"text/plain": [
|
318 |
+
"<IPython.core.display.HTML object>"
|
319 |
+
]
|
320 |
+
},
|
321 |
+
"metadata": {},
|
322 |
+
"output_type": "display_data"
|
323 |
+
},
|
324 |
+
{
|
325 |
+
"data": {
|
326 |
+
"text/html": [
|
327 |
+
"\n",
|
328 |
+
"<style>\n",
|
329 |
+
" /* Turns off some styling */\n",
|
330 |
+
" progress {\n",
|
331 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
332 |
+
" border: none;\n",
|
333 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
334 |
+
" background-size: auto;\n",
|
335 |
+
" }\n",
|
336 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
337 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
338 |
+
" }\n",
|
339 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
340 |
+
" background: #F44336;\n",
|
341 |
+
" }\n",
|
342 |
+
"</style>\n"
|
343 |
+
],
|
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 |
+
"text/plain": [
|
355 |
+
"<IPython.core.display.HTML object>"
|
356 |
+
]
|
357 |
+
},
|
358 |
+
"metadata": {},
|
359 |
+
"output_type": "display_data"
|
360 |
+
},
|
361 |
+
{
|
362 |
+
"data": {
|
363 |
+
"text/html": [
|
364 |
+
"\n",
|
365 |
+
"<style>\n",
|
366 |
+
" /* Turns off some styling */\n",
|
367 |
+
" progress {\n",
|
368 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
369 |
+
" border: none;\n",
|
370 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
371 |
+
" background-size: auto;\n",
|
372 |
+
" }\n",
|
373 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
374 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
375 |
+
" }\n",
|
376 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
377 |
+
" background: #F44336;\n",
|
378 |
+
" }\n",
|
379 |
+
"</style>\n"
|
380 |
+
],
|
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 |
+
"text/plain": [
|
392 |
+
"<IPython.core.display.HTML object>"
|
393 |
+
]
|
394 |
+
},
|
395 |
+
"metadata": {},
|
396 |
+
"output_type": "display_data"
|
397 |
+
},
|
398 |
+
{
|
399 |
+
"data": {
|
400 |
+
"text/html": [
|
401 |
+
"\n",
|
402 |
+
"<style>\n",
|
403 |
+
" /* Turns off some styling */\n",
|
404 |
+
" progress {\n",
|
405 |
+
" /* gets rid of default border in Firefox and Opera. */\n",
|
406 |
+
" border: none;\n",
|
407 |
+
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
|
408 |
+
" background-size: auto;\n",
|
409 |
+
" }\n",
|
410 |
+
" progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
|
411 |
+
" background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
|
412 |
+
" }\n",
|
413 |
+
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
|
414 |
+
" background: #F44336;\n",
|
415 |
+
" }\n",
|
416 |
+
"</style>\n"
|
417 |
+
],
|
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 |
+
"text/plain": [
|
429 |
+
"<IPython.core.display.HTML object>"
|
430 |
+
]
|
431 |
+
},
|
432 |
+
"metadata": {},
|
433 |
+
"output_type": "display_data"
|
434 |
+
}
|
435 |
+
],
|
436 |
+
"source": [
|
437 |
+
"#exportar\n",
|
438 |
+
"imagen = gr.inputs.Image(shape=(192,192))\n",
|
439 |
+
"etiqueta = gr.outputs.Label()\n",
|
440 |
+
"ejemplos = ['perro.jpg','gato.jpeg','gato_perro.jpeg','gato_perro_2.jpg'] \n",
|
441 |
+
"\n",
|
442 |
+
"interfaz = gr.Interface(fn=clasificar_imagen,inputs=imagen,outputs=etiqueta, examples=ejemplos)\n",
|
443 |
+
"interfaz.launch(inline=False)"
|
444 |
+
]
|
445 |
+
}
|
446 |
+
],
|
447 |
+
"metadata": {
|
448 |
+
"kernelspec": {
|
449 |
+
"display_name": "base",
|
450 |
+
"language": "python",
|
451 |
+
"name": "python3"
|
452 |
+
},
|
453 |
+
"language_info": {
|
454 |
+
"codemirror_mode": {
|
455 |
+
"name": "ipython",
|
456 |
+
"version": 3
|
457 |
+
},
|
458 |
+
"file_extension": ".py",
|
459 |
+
"mimetype": "text/x-python",
|
460 |
+
"name": "python",
|
461 |
+
"nbconvert_exporter": "python",
|
462 |
+
"pygments_lexer": "ipython3",
|
463 |
+
"version": "3.9.7"
|
464 |
+
},
|
465 |
+
"orig_nbformat": 4
|
466 |
+
},
|
467 |
+
"nbformat": 4,
|
468 |
+
"nbformat_minor": 2
|
469 |
+
}
|
gato.jpeg
ADDED
gato_perro.jpeg
ADDED
gato_perro_2.jpg
ADDED
model.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:badf31a9c1f02f838bcb615293fa270c006b6baf5892f3dc6b1fa0e7df839e95
|
3 |
+
size 47213009
|
perro.jpg
ADDED
requirements.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
fastai
|
2 |
+
torch
|
3 |
+
gradio
|
4 |
+
numpy
|
5 |
+
pandas
|