archietramjnj commited on
Commit
25e2b85
1 Parent(s): 71b5cbe

added skin cancer type prediction

Browse files
actinic keratosis.jpg ADDED
app - benign or malignant only.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastai.vision.all import *
2
+ import gradio as gr
3
+
4
+ learn = load_learner('export.pkl')
5
+
6
+ categories = ('Benign', 'Malignant')
7
+
8
+ def classify_image(img):
9
+ pred,idx,probs = learn.predict(img)
10
+ return dict(zip(categories, map(float,probs)))
11
+
12
+ image = gr.inputs.Image(shape=(192,192))
13
+ label = gr.outputs.Label()
14
+ examples = ['Benign1.jpg','Benign2.jpg','Benign3.jpg', 'Malignant1.jpg', 'Malignant2.jpg', 'Malignant3.jpg']
15
+ title = 'Skin Cancer Predictor'
16
+ description = 'This app predicts whether skin cancer is benign or malignant. For reference only.'
17
+ article = "Author: <a href=\"https://huggingface.co/archietram\">Archie Tram</a>. "
18
+
19
+ intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)
20
+ intf.launch(inline=False)
app with skin cancer type.ipynb ADDED
@@ -0,0 +1,934 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "# !pip install fastai\n",
10
+ "# !pip install gradio\n",
11
+ "# !pip install timm"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 2,
17
+ "metadata": {},
18
+ "outputs": [],
19
+ "source": [
20
+ "from fastai.vision.all import *\n",
21
+ "import gradio as gr\n",
22
+ "import pathlib\n",
23
+ "pathlib.PosixPath = pathlib.WindowsPath\n",
24
+ "import timm"
25
+ ]
26
+ },
27
+ {
28
+ "cell_type": "code",
29
+ "execution_count": null,
30
+ "metadata": {},
31
+ "outputs": [],
32
+ "source": [
33
+ "\n",
34
+ "# temp = pathlib.PosixPath\n"
35
+ ]
36
+ },
37
+ {
38
+ "cell_type": "code",
39
+ "execution_count": 3,
40
+ "metadata": {},
41
+ "outputs": [
42
+ {
43
+ "data": {
44
+ "image/png": "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",
45
+ "text/plain": [
46
+ "PILImage mode=RGB size=192x144"
47
+ ]
48
+ },
49
+ "execution_count": 3,
50
+ "metadata": {},
51
+ "output_type": "execute_result"
52
+ }
53
+ ],
54
+ "source": [
55
+ "im = PILImage.create('melanoma.jpg')\n",
56
+ "im.thumbnail((192,192))\n",
57
+ "im"
58
+ ]
59
+ },
60
+ {
61
+ "cell_type": "code",
62
+ "execution_count": 4,
63
+ "metadata": {},
64
+ "outputs": [],
65
+ "source": [
66
+ "learn = load_learner('export.pkl')\n",
67
+ "learn2 = load_learner('export_cancer_type.pkl')"
68
+ ]
69
+ },
70
+ {
71
+ "cell_type": "code",
72
+ "execution_count": 5,
73
+ "metadata": {},
74
+ "outputs": [
75
+ {
76
+ "data": {
77
+ "text/html": [
78
+ "\n",
79
+ "<style>\n",
80
+ " /* Turns off some styling */\n",
81
+ " progress {\n",
82
+ " /* gets rid of default border in Firefox and Opera. */\n",
83
+ " border: none;\n",
84
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
85
+ " background-size: auto;\n",
86
+ " }\n",
87
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
88
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
89
+ " }\n",
90
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
91
+ " background: #F44336;\n",
92
+ " }\n",
93
+ "</style>\n"
94
+ ],
95
+ "text/plain": [
96
+ "<IPython.core.display.HTML object>"
97
+ ]
98
+ },
99
+ "metadata": {},
100
+ "output_type": "display_data"
101
+ },
102
+ {
103
+ "data": {
104
+ "text/html": [
105
+ "\n",
106
+ " <div>\n",
107
+ " <progress value='0' class='' max='1' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
108
+ " 0.00% [0/1 00:00&lt;?]\n",
109
+ " </div>\n",
110
+ " "
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/plain": [
122
+ "('melanoma',\n",
123
+ " tensor(3),\n",
124
+ " tensor([1.4456e-03, 1.0283e-04, 6.1242e-04, 7.6649e-01, 2.2753e-01, 2.3810e-03,\n",
125
+ " 6.9470e-04, 1.0568e-04, 6.3854e-04]))"
126
+ ]
127
+ },
128
+ "execution_count": 5,
129
+ "metadata": {},
130
+ "output_type": "execute_result"
131
+ }
132
+ ],
133
+ "source": [
134
+ "learn2.predict(im)"
135
+ ]
136
+ },
137
+ {
138
+ "cell_type": "code",
139
+ "execution_count": 23,
140
+ "metadata": {},
141
+ "outputs": [],
142
+ "source": [
143
+ "categories = ('Benign', 'Malignant')\n",
144
+ "categories2 = (\n",
145
+ "\"Actinic Keratosis\",\n",
146
+ "\"Basal Cell Carcinoma\",\n",
147
+ "\"Dermatofibroma\",\n",
148
+ "\"Melanoma\",\n",
149
+ "\"Nevus\",\n",
150
+ "\"Pigmented Benign Keratosis\",\n",
151
+ "\"Seborrheic Keratosis\",\n",
152
+ "\"Squamous Cell Carcinoma\",\n",
153
+ "\"Vascular Lesion\",\n",
154
+ ")\n",
155
+ "\n",
156
+ "def classify_image(img):\n",
157
+ " pred,idx,probs = learn.predict(img)\n",
158
+ " pred2,idx2,probs2 = learn2.predict(img)\n",
159
+ " return dict(zip(categories, map(float,probs))), dict(zip(categories2, map(float,probs2)))"
160
+ ]
161
+ },
162
+ {
163
+ "cell_type": "code",
164
+ "execution_count": 24,
165
+ "metadata": {},
166
+ "outputs": [
167
+ {
168
+ "data": {
169
+ "text/html": [
170
+ "\n",
171
+ "<style>\n",
172
+ " /* Turns off some styling */\n",
173
+ " progress {\n",
174
+ " /* gets rid of default border in Firefox and Opera. */\n",
175
+ " border: none;\n",
176
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
177
+ " background-size: auto;\n",
178
+ " }\n",
179
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
180
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
181
+ " }\n",
182
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
183
+ " background: #F44336;\n",
184
+ " }\n",
185
+ "</style>\n"
186
+ ],
187
+ "text/plain": [
188
+ "<IPython.core.display.HTML object>"
189
+ ]
190
+ },
191
+ "metadata": {},
192
+ "output_type": "display_data"
193
+ },
194
+ {
195
+ "data": {
196
+ "text/html": [],
197
+ "text/plain": [
198
+ "<IPython.core.display.HTML object>"
199
+ ]
200
+ },
201
+ "metadata": {},
202
+ "output_type": "display_data"
203
+ },
204
+ {
205
+ "data": {
206
+ "text/html": [
207
+ "\n",
208
+ "<style>\n",
209
+ " /* Turns off some styling */\n",
210
+ " progress {\n",
211
+ " /* gets rid of default border in Firefox and Opera. */\n",
212
+ " border: none;\n",
213
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
214
+ " background-size: auto;\n",
215
+ " }\n",
216
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
217
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
218
+ " }\n",
219
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
220
+ " background: #F44336;\n",
221
+ " }\n",
222
+ "</style>\n"
223
+ ],
224
+ "text/plain": [
225
+ "<IPython.core.display.HTML object>"
226
+ ]
227
+ },
228
+ "metadata": {},
229
+ "output_type": "display_data"
230
+ },
231
+ {
232
+ "data": {
233
+ "text/html": [],
234
+ "text/plain": [
235
+ "<IPython.core.display.HTML object>"
236
+ ]
237
+ },
238
+ "metadata": {},
239
+ "output_type": "display_data"
240
+ },
241
+ {
242
+ "data": {
243
+ "text/plain": [
244
+ "({'Benign': 0.4016205072402954, 'Malignant': 0.5983794927597046},\n",
245
+ " {'actinic keratosis': 0.0014456179924309254,\n",
246
+ " 'basal cell carcinoma': 0.00010283248411724344,\n",
247
+ " 'dermatofibroma': 0.0006124223582446575,\n",
248
+ " 'melanoma': 0.7664883136749268,\n",
249
+ " 'nevus': 0.22753091156482697,\n",
250
+ " 'pigmented benign keratosis': 0.0023810004349797964,\n",
251
+ " 'seborrheic keratosis': 0.0006947041256353259,\n",
252
+ " 'squamous cell carcinoma': 0.00010568421566858888,\n",
253
+ " 'vascular lesion': 0.0006385358283296227})"
254
+ ]
255
+ },
256
+ "execution_count": 24,
257
+ "metadata": {},
258
+ "output_type": "execute_result"
259
+ }
260
+ ],
261
+ "source": [
262
+ "classify_image(im)"
263
+ ]
264
+ },
265
+ {
266
+ "cell_type": "code",
267
+ "execution_count": null,
268
+ "metadata": {},
269
+ "outputs": [
270
+ {
271
+ "name": "stderr",
272
+ "output_type": "stream",
273
+ "text": [
274
+ "c:\\Users\\ntram\\Anaconda3\\lib\\site-packages\\gradio\\inputs.py:259: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components\n",
275
+ " warnings.warn(\n",
276
+ "c:\\Users\\ntram\\Anaconda3\\lib\\site-packages\\gradio\\inputs.py:262: UserWarning: `optional` parameter is deprecated, and it has no effect\n",
277
+ " super().__init__(\n",
278
+ "c:\\Users\\ntram\\Anaconda3\\lib\\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",
279
+ " warnings.warn(\n",
280
+ "c:\\Users\\ntram\\Anaconda3\\lib\\site-packages\\gradio\\outputs.py:200: UserWarning: The 'type' parameter has been deprecated. Use the Number component instead.\n",
281
+ " super().__init__(num_top_classes=num_top_classes, type=type, label=label)\n"
282
+ ]
283
+ },
284
+ {
285
+ "name": "stdout",
286
+ "output_type": "stream",
287
+ "text": [
288
+ "Running on local URL: http://127.0.0.1:7860\n",
289
+ "\n",
290
+ "To create a public link, set `share=True` in `launch()`.\n"
291
+ ]
292
+ },
293
+ {
294
+ "data": {
295
+ "text/plain": []
296
+ },
297
+ "execution_count": 25,
298
+ "metadata": {},
299
+ "output_type": "execute_result"
300
+ },
301
+ {
302
+ "data": {
303
+ "text/html": [
304
+ "\n",
305
+ "<style>\n",
306
+ " /* Turns off some styling */\n",
307
+ " progress {\n",
308
+ " /* gets rid of default border in Firefox and Opera. */\n",
309
+ " border: none;\n",
310
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
311
+ " background-size: auto;\n",
312
+ " }\n",
313
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
314
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
315
+ " }\n",
316
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
317
+ " background: #F44336;\n",
318
+ " }\n",
319
+ "</style>\n"
320
+ ],
321
+ "text/plain": [
322
+ "<IPython.core.display.HTML object>"
323
+ ]
324
+ },
325
+ "metadata": {},
326
+ "output_type": "display_data"
327
+ },
328
+ {
329
+ "data": {
330
+ "text/html": [],
331
+ "text/plain": [
332
+ "<IPython.core.display.HTML object>"
333
+ ]
334
+ },
335
+ "metadata": {},
336
+ "output_type": "display_data"
337
+ },
338
+ {
339
+ "data": {
340
+ "text/html": [
341
+ "\n",
342
+ "<style>\n",
343
+ " /* Turns off some styling */\n",
344
+ " progress {\n",
345
+ " /* gets rid of default border in Firefox and Opera. */\n",
346
+ " border: none;\n",
347
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
348
+ " background-size: auto;\n",
349
+ " }\n",
350
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
351
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
352
+ " }\n",
353
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
354
+ " background: #F44336;\n",
355
+ " }\n",
356
+ "</style>\n"
357
+ ],
358
+ "text/plain": [
359
+ "<IPython.core.display.HTML object>"
360
+ ]
361
+ },
362
+ "metadata": {},
363
+ "output_type": "display_data"
364
+ },
365
+ {
366
+ "data": {
367
+ "text/html": [],
368
+ "text/plain": [
369
+ "<IPython.core.display.HTML object>"
370
+ ]
371
+ },
372
+ "metadata": {},
373
+ "output_type": "display_data"
374
+ },
375
+ {
376
+ "data": {
377
+ "text/html": [
378
+ "\n",
379
+ "<style>\n",
380
+ " /* Turns off some styling */\n",
381
+ " progress {\n",
382
+ " /* gets rid of default border in Firefox and Opera. */\n",
383
+ " border: none;\n",
384
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
385
+ " background-size: auto;\n",
386
+ " }\n",
387
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
388
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
389
+ " }\n",
390
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
391
+ " background: #F44336;\n",
392
+ " }\n",
393
+ "</style>\n"
394
+ ],
395
+ "text/plain": [
396
+ "<IPython.core.display.HTML object>"
397
+ ]
398
+ },
399
+ "metadata": {},
400
+ "output_type": "display_data"
401
+ },
402
+ {
403
+ "data": {
404
+ "text/html": [],
405
+ "text/plain": [
406
+ "<IPython.core.display.HTML object>"
407
+ ]
408
+ },
409
+ "metadata": {},
410
+ "output_type": "display_data"
411
+ },
412
+ {
413
+ "data": {
414
+ "text/html": [
415
+ "\n",
416
+ "<style>\n",
417
+ " /* Turns off some styling */\n",
418
+ " progress {\n",
419
+ " /* gets rid of default border in Firefox and Opera. */\n",
420
+ " border: none;\n",
421
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
422
+ " background-size: auto;\n",
423
+ " }\n",
424
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
425
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
426
+ " }\n",
427
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
428
+ " background: #F44336;\n",
429
+ " }\n",
430
+ "</style>\n"
431
+ ],
432
+ "text/plain": [
433
+ "<IPython.core.display.HTML object>"
434
+ ]
435
+ },
436
+ "metadata": {},
437
+ "output_type": "display_data"
438
+ },
439
+ {
440
+ "data": {
441
+ "text/html": [],
442
+ "text/plain": [
443
+ "<IPython.core.display.HTML object>"
444
+ ]
445
+ },
446
+ "metadata": {},
447
+ "output_type": "display_data"
448
+ },
449
+ {
450
+ "data": {
451
+ "text/html": [
452
+ "\n",
453
+ "<style>\n",
454
+ " /* Turns off some styling */\n",
455
+ " progress {\n",
456
+ " /* gets rid of default border in Firefox and Opera. */\n",
457
+ " border: none;\n",
458
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
459
+ " background-size: auto;\n",
460
+ " }\n",
461
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
462
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
463
+ " }\n",
464
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
465
+ " background: #F44336;\n",
466
+ " }\n",
467
+ "</style>\n"
468
+ ],
469
+ "text/plain": [
470
+ "<IPython.core.display.HTML object>"
471
+ ]
472
+ },
473
+ "metadata": {},
474
+ "output_type": "display_data"
475
+ },
476
+ {
477
+ "data": {
478
+ "text/html": [],
479
+ "text/plain": [
480
+ "<IPython.core.display.HTML object>"
481
+ ]
482
+ },
483
+ "metadata": {},
484
+ "output_type": "display_data"
485
+ },
486
+ {
487
+ "data": {
488
+ "text/html": [
489
+ "\n",
490
+ "<style>\n",
491
+ " /* Turns off some styling */\n",
492
+ " progress {\n",
493
+ " /* gets rid of default border in Firefox and Opera. */\n",
494
+ " border: none;\n",
495
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
496
+ " background-size: auto;\n",
497
+ " }\n",
498
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
499
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
500
+ " }\n",
501
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
502
+ " background: #F44336;\n",
503
+ " }\n",
504
+ "</style>\n"
505
+ ],
506
+ "text/plain": [
507
+ "<IPython.core.display.HTML object>"
508
+ ]
509
+ },
510
+ "metadata": {},
511
+ "output_type": "display_data"
512
+ },
513
+ {
514
+ "data": {
515
+ "text/html": [],
516
+ "text/plain": [
517
+ "<IPython.core.display.HTML object>"
518
+ ]
519
+ },
520
+ "metadata": {},
521
+ "output_type": "display_data"
522
+ },
523
+ {
524
+ "data": {
525
+ "text/html": [
526
+ "\n",
527
+ "<style>\n",
528
+ " /* Turns off some styling */\n",
529
+ " progress {\n",
530
+ " /* gets rid of default border in Firefox and Opera. */\n",
531
+ " border: none;\n",
532
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
533
+ " background-size: auto;\n",
534
+ " }\n",
535
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
536
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
537
+ " }\n",
538
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
539
+ " background: #F44336;\n",
540
+ " }\n",
541
+ "</style>\n"
542
+ ],
543
+ "text/plain": [
544
+ "<IPython.core.display.HTML object>"
545
+ ]
546
+ },
547
+ "metadata": {},
548
+ "output_type": "display_data"
549
+ },
550
+ {
551
+ "data": {
552
+ "text/html": [],
553
+ "text/plain": [
554
+ "<IPython.core.display.HTML object>"
555
+ ]
556
+ },
557
+ "metadata": {},
558
+ "output_type": "display_data"
559
+ },
560
+ {
561
+ "data": {
562
+ "text/html": [
563
+ "\n",
564
+ "<style>\n",
565
+ " /* Turns off some styling */\n",
566
+ " progress {\n",
567
+ " /* gets rid of default border in Firefox and Opera. */\n",
568
+ " border: none;\n",
569
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
570
+ " background-size: auto;\n",
571
+ " }\n",
572
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
573
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
574
+ " }\n",
575
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
576
+ " background: #F44336;\n",
577
+ " }\n",
578
+ "</style>\n"
579
+ ],
580
+ "text/plain": [
581
+ "<IPython.core.display.HTML object>"
582
+ ]
583
+ },
584
+ "metadata": {},
585
+ "output_type": "display_data"
586
+ },
587
+ {
588
+ "data": {
589
+ "text/html": [],
590
+ "text/plain": [
591
+ "<IPython.core.display.HTML object>"
592
+ ]
593
+ },
594
+ "metadata": {},
595
+ "output_type": "display_data"
596
+ },
597
+ {
598
+ "data": {
599
+ "text/html": [
600
+ "\n",
601
+ "<style>\n",
602
+ " /* Turns off some styling */\n",
603
+ " progress {\n",
604
+ " /* gets rid of default border in Firefox and Opera. */\n",
605
+ " border: none;\n",
606
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
607
+ " background-size: auto;\n",
608
+ " }\n",
609
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
610
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
611
+ " }\n",
612
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
613
+ " background: #F44336;\n",
614
+ " }\n",
615
+ "</style>\n"
616
+ ],
617
+ "text/plain": [
618
+ "<IPython.core.display.HTML object>"
619
+ ]
620
+ },
621
+ "metadata": {},
622
+ "output_type": "display_data"
623
+ },
624
+ {
625
+ "data": {
626
+ "text/html": [],
627
+ "text/plain": [
628
+ "<IPython.core.display.HTML object>"
629
+ ]
630
+ },
631
+ "metadata": {},
632
+ "output_type": "display_data"
633
+ },
634
+ {
635
+ "data": {
636
+ "text/html": [
637
+ "\n",
638
+ "<style>\n",
639
+ " /* Turns off some styling */\n",
640
+ " progress {\n",
641
+ " /* gets rid of default border in Firefox and Opera. */\n",
642
+ " border: none;\n",
643
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
644
+ " background-size: auto;\n",
645
+ " }\n",
646
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
647
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
648
+ " }\n",
649
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
650
+ " background: #F44336;\n",
651
+ " }\n",
652
+ "</style>\n"
653
+ ],
654
+ "text/plain": [
655
+ "<IPython.core.display.HTML object>"
656
+ ]
657
+ },
658
+ "metadata": {},
659
+ "output_type": "display_data"
660
+ },
661
+ {
662
+ "data": {
663
+ "text/html": [],
664
+ "text/plain": [
665
+ "<IPython.core.display.HTML object>"
666
+ ]
667
+ },
668
+ "metadata": {},
669
+ "output_type": "display_data"
670
+ },
671
+ {
672
+ "data": {
673
+ "text/html": [
674
+ "\n",
675
+ "<style>\n",
676
+ " /* Turns off some styling */\n",
677
+ " progress {\n",
678
+ " /* gets rid of default border in Firefox and Opera. */\n",
679
+ " border: none;\n",
680
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
681
+ " background-size: auto;\n",
682
+ " }\n",
683
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
684
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
685
+ " }\n",
686
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
687
+ " background: #F44336;\n",
688
+ " }\n",
689
+ "</style>\n"
690
+ ],
691
+ "text/plain": [
692
+ "<IPython.core.display.HTML object>"
693
+ ]
694
+ },
695
+ "metadata": {},
696
+ "output_type": "display_data"
697
+ },
698
+ {
699
+ "data": {
700
+ "text/html": [],
701
+ "text/plain": [
702
+ "<IPython.core.display.HTML object>"
703
+ ]
704
+ },
705
+ "metadata": {},
706
+ "output_type": "display_data"
707
+ },
708
+ {
709
+ "data": {
710
+ "text/html": [
711
+ "\n",
712
+ "<style>\n",
713
+ " /* Turns off some styling */\n",
714
+ " progress {\n",
715
+ " /* gets rid of default border in Firefox and Opera. */\n",
716
+ " border: none;\n",
717
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
718
+ " background-size: auto;\n",
719
+ " }\n",
720
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
721
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
722
+ " }\n",
723
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
724
+ " background: #F44336;\n",
725
+ " }\n",
726
+ "</style>\n"
727
+ ],
728
+ "text/plain": [
729
+ "<IPython.core.display.HTML object>"
730
+ ]
731
+ },
732
+ "metadata": {},
733
+ "output_type": "display_data"
734
+ },
735
+ {
736
+ "data": {
737
+ "text/html": [],
738
+ "text/plain": [
739
+ "<IPython.core.display.HTML object>"
740
+ ]
741
+ },
742
+ "metadata": {},
743
+ "output_type": "display_data"
744
+ },
745
+ {
746
+ "data": {
747
+ "text/html": [
748
+ "\n",
749
+ "<style>\n",
750
+ " /* Turns off some styling */\n",
751
+ " progress {\n",
752
+ " /* gets rid of default border in Firefox and Opera. */\n",
753
+ " border: none;\n",
754
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
755
+ " background-size: auto;\n",
756
+ " }\n",
757
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
758
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
759
+ " }\n",
760
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
761
+ " background: #F44336;\n",
762
+ " }\n",
763
+ "</style>\n"
764
+ ],
765
+ "text/plain": [
766
+ "<IPython.core.display.HTML object>"
767
+ ]
768
+ },
769
+ "metadata": {},
770
+ "output_type": "display_data"
771
+ },
772
+ {
773
+ "data": {
774
+ "text/html": [],
775
+ "text/plain": [
776
+ "<IPython.core.display.HTML object>"
777
+ ]
778
+ },
779
+ "metadata": {},
780
+ "output_type": "display_data"
781
+ },
782
+ {
783
+ "data": {
784
+ "text/html": [
785
+ "\n",
786
+ "<style>\n",
787
+ " /* Turns off some styling */\n",
788
+ " progress {\n",
789
+ " /* gets rid of default border in Firefox and Opera. */\n",
790
+ " border: none;\n",
791
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
792
+ " background-size: auto;\n",
793
+ " }\n",
794
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
795
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
796
+ " }\n",
797
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
798
+ " background: #F44336;\n",
799
+ " }\n",
800
+ "</style>\n"
801
+ ],
802
+ "text/plain": [
803
+ "<IPython.core.display.HTML object>"
804
+ ]
805
+ },
806
+ "metadata": {},
807
+ "output_type": "display_data"
808
+ },
809
+ {
810
+ "data": {
811
+ "text/html": [],
812
+ "text/plain": [
813
+ "<IPython.core.display.HTML object>"
814
+ ]
815
+ },
816
+ "metadata": {},
817
+ "output_type": "display_data"
818
+ },
819
+ {
820
+ "data": {
821
+ "text/html": [
822
+ "\n",
823
+ "<style>\n",
824
+ " /* Turns off some styling */\n",
825
+ " progress {\n",
826
+ " /* gets rid of default border in Firefox and Opera. */\n",
827
+ " border: none;\n",
828
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
829
+ " background-size: auto;\n",
830
+ " }\n",
831
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
832
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
833
+ " }\n",
834
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
835
+ " background: #F44336;\n",
836
+ " }\n",
837
+ "</style>\n"
838
+ ],
839
+ "text/plain": [
840
+ "<IPython.core.display.HTML object>"
841
+ ]
842
+ },
843
+ "metadata": {},
844
+ "output_type": "display_data"
845
+ },
846
+ {
847
+ "data": {
848
+ "text/html": [],
849
+ "text/plain": [
850
+ "<IPython.core.display.HTML object>"
851
+ ]
852
+ },
853
+ "metadata": {},
854
+ "output_type": "display_data"
855
+ },
856
+ {
857
+ "data": {
858
+ "text/html": [
859
+ "\n",
860
+ "<style>\n",
861
+ " /* Turns off some styling */\n",
862
+ " progress {\n",
863
+ " /* gets rid of default border in Firefox and Opera. */\n",
864
+ " border: none;\n",
865
+ " /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
866
+ " background-size: auto;\n",
867
+ " }\n",
868
+ " progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
869
+ " background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
870
+ " }\n",
871
+ " .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
872
+ " background: #F44336;\n",
873
+ " }\n",
874
+ "</style>\n"
875
+ ],
876
+ "text/plain": [
877
+ "<IPython.core.display.HTML object>"
878
+ ]
879
+ },
880
+ "metadata": {},
881
+ "output_type": "display_data"
882
+ },
883
+ {
884
+ "data": {
885
+ "text/html": [],
886
+ "text/plain": [
887
+ "<IPython.core.display.HTML object>"
888
+ ]
889
+ },
890
+ "metadata": {},
891
+ "output_type": "display_data"
892
+ }
893
+ ],
894
+ "source": [
895
+ "image = gr.inputs.Image(shape=(192,192))\n",
896
+ "label = gr.outputs.Label()\n",
897
+ "label2 = gr.outputs.Label()\n",
898
+ "examples = ['Benign1.jpg','Benign2.jpg','Benign3.jpg', 'Malignant1.jpg', 'Malignant2.jpg', 'Malignant3.jpg', \"melanoma.jpg\", \"actinic keratosis.jpg\", \"squamous cell carcinoma.jpg\"]\n",
899
+ "\n",
900
+ "intf = gr.Interface(fn=classify_image, inputs=image, outputs=[label,label2], examples=examples)\n",
901
+ "intf.launch(inline=False)"
902
+ ]
903
+ },
904
+ {
905
+ "cell_type": "code",
906
+ "execution_count": null,
907
+ "metadata": {},
908
+ "outputs": [],
909
+ "source": []
910
+ }
911
+ ],
912
+ "metadata": {
913
+ "kernelspec": {
914
+ "display_name": "base",
915
+ "language": "python",
916
+ "name": "python3"
917
+ },
918
+ "language_info": {
919
+ "codemirror_mode": {
920
+ "name": "ipython",
921
+ "version": 3
922
+ },
923
+ "file_extension": ".py",
924
+ "mimetype": "text/x-python",
925
+ "name": "python",
926
+ "nbconvert_exporter": "python",
927
+ "pygments_lexer": "ipython3",
928
+ "version": "3.9.13"
929
+ },
930
+ "orig_nbformat": 4
931
+ },
932
+ "nbformat": 4,
933
+ "nbformat_minor": 2
934
+ }
app.py CHANGED
@@ -2,19 +2,33 @@ from fastai.vision.all import *
2
  import gradio as gr
3
 
4
  learn = load_learner('export.pkl')
 
5
 
6
  categories = ('Benign', 'Malignant')
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  def classify_image(img):
9
  pred,idx,probs = learn.predict(img)
10
- return dict(zip(categories, map(float,probs)))
 
11
 
12
  image = gr.inputs.Image(shape=(192,192))
13
  label = gr.outputs.Label()
14
- examples = ['Benign1.jpg','Benign2.jpg','Benign3.jpg', 'Malignant1.jpg', 'Malignant2.jpg', 'Malignant3.jpg']
 
15
  title = 'Skin Cancer Predictor'
16
- description = 'This app predicts whether skin cancer is benign or malignant. For reference only.'
17
  article = "Author: <a href=\"https://huggingface.co/archietram\">Archie Tram</a>. "
18
 
19
- intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)
20
  intf.launch(inline=False)
 
2
  import gradio as gr
3
 
4
  learn = load_learner('export.pkl')
5
+ learn2 = load_learner('export_cancer_type.pkl')
6
 
7
  categories = ('Benign', 'Malignant')
8
+ categories2 = (
9
+ "Actinic Keratosis",
10
+ "Basal Cell Carcinoma",
11
+ "Dermatofibroma",
12
+ "Melanoma",
13
+ "Nevus",
14
+ "Pigmented Benign Keratosis",
15
+ "Seborrheic Keratosis",
16
+ "Squamous Cell Carcinoma",
17
+ "Vascular Lesion",
18
+ )
19
 
20
  def classify_image(img):
21
  pred,idx,probs = learn.predict(img)
22
+ pred2,idx2,probs2 = learn2.predict(img)
23
+ return dict(zip(categories, map(float,probs))), dict(zip(categories2, map(float,probs2)))
24
 
25
  image = gr.inputs.Image(shape=(192,192))
26
  label = gr.outputs.Label()
27
+ label2 = gr.outputs.Label()
28
+ examples = ['Benign1.jpg','Benign2.jpg','Benign3.jpg', 'Malignant1.jpg', 'Malignant2.jpg', 'Malignant3.jpg', "melanoma.jpg", "actinic keratosis.jpg", "squamous cell carcinoma.jpg"]
29
  title = 'Skin Cancer Predictor'
30
+ description = 'This app predicts 1) whether skin cancer is benign or malignant and 2) what type of skin cancer it is. For reference only.'
31
  article = "Author: <a href=\"https://huggingface.co/archietram\">Archie Tram</a>. "
32
 
33
+ intf = gr.Interface(fn=classify_image, inputs=image, outputs=[label,label2], examples=examples)
34
  intf.launch(inline=False)
export_cancer_type.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bbb6d0047e7866ce38042bc8fafe1bdf01415a0db288f25275aae4735cdca9ab
3
+ size 791605173
melanoma.jpg ADDED
squamous cell carcinoma.jpg ADDED