Jeysshon commited on
Commit
baa52d2
1 Parent(s): 3f271bb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -79
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import fastai
3
  import fastai.vision
4
  import PIL
@@ -7,130 +6,121 @@ import matplotlib
7
  import numpy
8
  import pandas
9
  from fastai.vision.all import *
10
- #
11
- # create class
12
  class ADA_SKIN(object):
13
- #
14
- # initialize the object
15
- def __init__(self, name="Wallaby",verbose=True,*args, **kwargs):
16
  super(ADA_SKIN, self).__init__(*args, **kwargs)
17
  self.author = "Jey"
18
  self.name = name
19
- if (verbose):
20
  self._ph()
21
- self._pp("Hello from class", str(self.__class__) + " Class: " + str(self.__class__.__name__))
22
- self._pp("Code name", self.name)
23
- self._pp("Author is", self.author)
24
  self._ph()
25
- #
26
 
27
- self.article += '<h3>Example Images: (left to right)</h3><ol>'
28
- self.article += '<li>Bowen Disease (AKIEC)</li>'
29
- self.article += '<li>Basal Cell Carcinoma</li>'
30
- self.article += '<li>Benign Keratosis-like Lesions</li>'
31
  self.article += '<li>Dermatofibroma</li>'
32
  self.article += '<li>Melanoma</li>'
33
- self.article += '<li>Melanocytic Nevi</li>'
34
- self.article += '<li>Squamous Cell Carcinoma</li>'
35
- self.article += '<li>Vascular Lesions</li>'
36
- self.article += '<li>Benign</li>'
37
- self.article += '<li>Benign 2</li></ol>'
38
- self.article += '<h3>Train Result:</h3><ul>'
39
  self.examples = ['akiec1.jpg','bcc1.jpg','bkl1.jpg','df1.jpg','mel1.jpg',
40
  'nevi1.jpg','scc1.jpg','vl1.jpg','benign1.jpg','benign3.jpg']
41
- self.title = "Skin Cancer Diagnose"
42
  return
43
- #
44
- # pretty print output name-value line
45
  def _pp(self, a, b):
46
  print("%34s : %s" % (str(a), str(b)))
47
  return
48
- #
49
- # pretty print the header or footer lines
50
  def _ph(self):
51
  print("-" * 34, ":", "-" * 34)
52
  return
53
- #
54
- def _predict_image(self,img,cat):
55
- pred,idx,probs = learn.predict(img)
56
- return dict(zip(cat, map(float,probs)))
57
- #
58
- def _predict_image2(self,img,cat):
59
- pred,idx,probs = learn2.predict(img)
60
- return dict(zip(cat, map(float,probs)))
61
- #
62
- def _draw_pred(self,df_pred, df2):
63
- canvas, pic = matplotlib.pyplot.subplots(1,2, figsize=(12,6))
64
  ti = df_pred["vocab"].head(3).values
65
  ti2 = df2["vocab"].head(2).values
66
- # special case
67
- #if (matplotlib.__version__) >= "3.5.2":
68
  try:
69
- df_pred["pred"].head(3).plot(ax=pic[0],kind="pie",
70
- cmap="Set2",labels=ti, explode=(0.02,0,0),
71
  wedgeprops=dict(width=.4),
72
  normalize=False)
73
- df2["pred"].head(2).plot(ax=pic[1],kind="pie",
74
- colors=["cornflowerblue","darkorange"],labels=ti2, explode=(0.02,0),
75
  wedgeprops=dict(width=.4),
76
  normalize=False)
77
  except:
78
- df_pred["pred"].head(3).plot(ax=pic[0],kind="pie",
79
- cmap="Set2",labels=ti, explode=(0.02,0,0),
80
  wedgeprops=dict(width=.4))
81
- df2["pred"].head(2).plot(ax=pic[1],kind="pie",
82
- colors=["cornflowerblue","darkorange"],labels=ti2, explode=(0.02,0),
83
  wedgeprops=dict(width=.4))
84
- t = str(ti[0]) + ": " + str(numpy.round(df_pred.head(1).pred.values[0]*100, 2)) + "% Certainty"
85
- pic[0].set_title(t,fontsize=14.0, fontweight="bold")
 
86
  pic[0].axis('off')
87
- pic[0].legend(ti, loc="lower right",title="Skin Cancers: Top 3")
88
- #
89
- k0 = numpy.round(df2.head(1).pred.values[0]*100, 2)
90
- k1 = numpy.round(df2.tail(1).pred.values[0]*100, 2)
91
- if (k0 > k1):
92
- t2 = str(ti2[0]) + ": " + str(k0) + "% Certainty"
93
  else:
94
- t2 = str(ti2[1]) + ": " + str(k1) + "% Certainty"
95
- pic[1].set_title(t2,fontsize=14.0, fontweight="bold")
96
  pic[1].axis('off')
97
- pic[1].legend(ti2, loc="lower right",title="Skin Cancers:")
98
- #
99
- # # draw circle
100
- # centre_circle = matplotlib.pyplot.Circle((0, 0), 0.6, fc='white')
101
- # p = matplotlib.pyplot.gcf()
102
- # # Adding Circle in Pie chart
103
- # p.gca().add_artist(centre_circle)
104
- #
105
- #p=plt.gcf()
106
- #p.gca().add_artist(my_circle)
107
- #
108
  canvas.tight_layout()
109
  return canvas
110
- #
111
- def predict_donut(self,img):
112
- d = self._predict_image(img,self.categories)
113
  df = pandas.DataFrame(d, index=[0])
114
  df = df.transpose().reset_index()
115
  df.columns = ["vocab", "pred"]
116
- df.sort_values("pred", inplace=True,ascending=False, ignore_index=True)
117
- #
118
- d2 = self._predict_image2(img,self.categories2)
119
  df2 = pandas.DataFrame(d2, index=[0])
120
  df2 = df2.transpose().reset_index()
121
  df2.columns = ["vocab", "pred"]
122
- #
123
- canvas = self._draw_pred(df,df2)
124
  return canvas
125
- #
126
  maxi = ADA_SKIN(verbose=False)
127
- #
128
  learn = fastai.learner.load_learner('ada_learn_skin_norm2000.pkl')
129
  learn2 = fastai.learner.load_learner('ada_learn_malben.pkl')
130
  maxi.categories = learn.dls.vocab
131
  maxi.categories2 = learn2.dls.vocab
132
  hf_image = gradio.inputs.Image(shape=(192, 192))
133
  hf_label = gradio.outputs.Label()
 
134
  intf = gradio.Interface(fn=maxi.predict_donut,
135
  inputs=hf_image,
136
  outputs=["plot"],
@@ -138,4 +128,6 @@ intf = gradio.Interface(fn=maxi.predict_donut,
138
  title=maxi.title,
139
  live=True,
140
  article=maxi.article)
141
- intf.launch(inline=False,share=True)
 
 
 
 
1
  import fastai
2
  import fastai.vision
3
  import PIL
 
6
  import numpy
7
  import pandas
8
  from fastai.vision.all import *
9
+
10
+ # Crear la clase
11
  class ADA_SKIN(object):
12
+
13
+ # Inicializar el objeto
14
+ def __init__(self, name="Wallaby", verbose=True, *args, **kwargs):
15
  super(ADA_SKIN, self).__init__(*args, **kwargs)
16
  self.author = "Jey"
17
  self.name = name
18
+ if verbose:
19
  self._ph()
20
+ self._pp("Hola desde la clase", str(self.__class__) + " Clase: " + str(self.__class__.__name__))
21
+ self._pp("Nombre del código", self.name)
22
+ self._pp("Autor", self.author)
23
  self._ph()
 
24
 
25
+ self.article = '<h3>Imágenes de ejemplo: (de izquierda a derecha)</h3><ol>'
26
+ self.article += '<li>Enfermedad de Bowen (AKIEC)</li>'
27
+ self.article += '<li>Carcinoma de células basales</li>'
28
+ self.article += '<li>Lesiones benignas similares a queratosis</li>'
29
  self.article += '<li>Dermatofibroma</li>'
30
  self.article += '<li>Melanoma</li>'
31
+ self.article += '<li>Lunares melanocíticos</li>'
32
+ self.article += '<li>Carcinoma de células escamosas</li>'
33
+ self.article += '<li>Lesiones vasculares</li>'
34
+ self.article += '<li>Benigno</li>'
35
+ self.article += '<li>Benigno 2</li></ol>'
36
+ self.article += '<h3>Resultado del entrenamiento:</h3><ul>'
37
  self.examples = ['akiec1.jpg','bcc1.jpg','bkl1.jpg','df1.jpg','mel1.jpg',
38
  'nevi1.jpg','scc1.jpg','vl1.jpg','benign1.jpg','benign3.jpg']
39
+ self.title = "Diagnóstico de Cáncer de Piel"
40
  return
41
+
42
+ # Imprimir de manera legible el nombre y valor de una línea
43
  def _pp(self, a, b):
44
  print("%34s : %s" % (str(a), str(b)))
45
  return
46
+
47
+ # Imprimir la línea de encabezado o pie de página
48
  def _ph(self):
49
  print("-" * 34, ":", "-" * 34)
50
  return
51
+
52
+ def _predict_image(self, img, cat):
53
+ pred, idx, probs = learn.predict(img)
54
+ return dict(zip(cat, map(float, probs)))
55
+
56
+ def _predict_image2(self, img, cat):
57
+ pred, idx, probs = learn2.predict(img)
58
+ return dict(zip(cat, map(float, probs)))
59
+
60
+ def _draw_pred(self, df_pred, df2):
61
+ canvas, pic = matplotlib.pyplot.subplots(1, 2, figsize=(12, 6))
62
  ti = df_pred["vocab"].head(3).values
63
  ti2 = df2["vocab"].head(2).values
64
+
 
65
  try:
66
+ df_pred["pred"].head(3).plot(ax=pic[0], kind="pie",
67
+ cmap="Set2", labels=ti, explode=(0.02, 0, 0),
68
  wedgeprops=dict(width=.4),
69
  normalize=False)
70
+ df2["pred"].head(2).plot(ax=pic[1], kind="pie",
71
+ colors=["cornflowerblue", "darkorange"], labels=ti2, explode=(0.02, 0),
72
  wedgeprops=dict(width=.4),
73
  normalize=False)
74
  except:
75
+ df_pred["pred"].head(3).plot(ax=pic[0], kind="pie",
76
+ cmap="Set2", labels=ti, explode=(0.02, 0, 0),
77
  wedgeprops=dict(width=.4))
78
+ df2["pred"].head(2).plot(ax=pic[1], kind="pie",
79
+ colors=["cornflowerblue", "darkorange"], labels=ti2, explode=(0.02, 0),
80
  wedgeprops=dict(width=.4))
81
+
82
+ t = str(ti[0]) + ": " + str(numpy.round(df_pred.head(1).pred.values[0] * 100, 2)) + "% de certeza"
83
+ pic[0].set_title(t, fontsize=14.0, fontweight="bold")
84
  pic[0].axis('off')
85
+ pic[0].legend(ti, loc="lower right", title="Cáncer de Piel: Top 3")
86
+
87
+ k0 = numpy.round(df2.head(1).pred.values[0] * 100, 2)
88
+ k1 = numpy.round(df2.tail(1).pred.values[0] * 100, 2)
89
+ if k0 > k1:
90
+ t2 = str(ti2[0]) + ": " + str(k0) + "% de certeza"
91
  else:
92
+ t2 = str(ti2[1]) + ": " + str(k1) + "% de certeza"
93
+ pic[1].set_title(t2, fontsize=14.0, fontweight="bold")
94
  pic[1].axis('off')
95
+ pic[1].legend(ti2, loc="lower right", title="Cáncer de Piel:")
96
+
 
 
 
 
 
 
 
 
 
97
  canvas.tight_layout()
98
  return canvas
99
+
100
+ def predict_donut(self, img):
101
+ d = self._predict_image(img, self.categories)
102
  df = pandas.DataFrame(d, index=[0])
103
  df = df.transpose().reset_index()
104
  df.columns = ["vocab", "pred"]
105
+ df.sort_values("pred", inplace=True, ascending=False, ignore_index=True)
106
+
107
+ d2 = self._predict_image2(img, self.categories2)
108
  df2 = pandas.DataFrame(d2, index=[0])
109
  df2 = df2.transpose().reset_index()
110
  df2.columns = ["vocab", "pred"]
111
+
112
+ canvas = self._draw_pred(df, df2)
113
  return canvas
114
+
115
  maxi = ADA_SKIN(verbose=False)
116
+
117
  learn = fastai.learner.load_learner('ada_learn_skin_norm2000.pkl')
118
  learn2 = fastai.learner.load_learner('ada_learn_malben.pkl')
119
  maxi.categories = learn.dls.vocab
120
  maxi.categories2 = learn2.dls.vocab
121
  hf_image = gradio.inputs.Image(shape=(192, 192))
122
  hf_label = gradio.outputs.Label()
123
+
124
  intf = gradio.Interface(fn=maxi.predict_donut,
125
  inputs=hf_image,
126
  outputs=["plot"],
 
128
  title=maxi.title,
129
  live=True,
130
  article=maxi.article)
131
+
132
+ intf.launch(inline=False, share=True)
133
+