Spaces:
Sleeping
Sleeping
File size: 5,469 Bytes
3cc72c9 f4aa6fb 3cc72c9 baa52d2 3cc72c9 baa52d2 f4aa6fb baa52d2 f4aa6fb dbcd7b8 f4aa6fb dbcd7b8 f4aa6fb 3cc72c9 baa52d2 f4aa6fb 3cc72c9 baa52d2 f4aa6fb dbcd7b8 5d1ec21 f4aa6fb dcc0dbe |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import fastai
import PIL
import gradio as gr
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from fastai.vision.all import *
# Crear la clase
class ADA_SKIN(object):
# Inicializar el objeto
def __init__(self, name="Wallaby", verbose=True, *args, **kwargs):
super(ADA_SKIN, self).__init__(*args, **kwargs)
self.author = "Jey"
self.name = name
if verbose:
self._ph()
self._pp("Hola desde la clase", str(self.__class__) + " Clase: " + str(self.__class__.__name__))
self._pp("Nombre del c贸digo", self.name)
self._pp("Autor", self.author)
self._ph()
self.article = '<h3>Predice las siguientes patologias en piel</h3><ol>'
self.article += '<li>Enfermedad de Bowen (AKIEC)</li>'
self.article += '<li>Carcinoma de c茅lulas basales</li>'
self.article += '<li>Lesiones benignas similares a queratosis</li>'
self.article += '<li>Dermatofibroma</li>'
self.article += '<li>Melanoma</li>'
self.article += '<li>Lunares melanoc铆ticos</li>'
self.article += '<li>Carcinoma de c茅lulas escamosas</li>'
self.article += '<li>Lesiones vasculares</li>'
self.article += '<li>Benigno</li>'
self.article += '<li></li></ol>'
self.article += '<h3> Prueba Jey(2023)</h3><ul>'
self.examples = ['akiec1.jpg','bcc1.jpg','bkl1.jpg','df1.jpg','mel1.jpg',
'nevi1.jpg','scc1.jpg','vl1.jpg','benign1.jpg','benign3.jpg']
self.title = "Predicci贸n C谩ncer de Piel prueba "
return
# Imprimir de manera legible el nombre y valor de una l铆nea
def _pp(self, a, b):
print("%34s : %s" % (str(a), str(b)))
return
# Imprimir la l铆nea de encabezado o pie de p谩gina
def _ph(self):
print("-" * 34, ":", "-" * 34)
return
def _predict_image(self, img, cat):
# Convertir la imagen a PILImage
img = PILImage.create(img)
pred, idx, probs = learn.predict(img)
return dict(zip(cat, map(float, probs)))
def _predict_image2(self, img, cat):
# Convertir la imagen a PILImage
img = PILImage.create(img)
pred, idx, probs = learn2.predict(img)
return dict(zip(cat, map(float, probs)))
def _draw_pred(self, df_pred, df2):
fig, pic = plt.subplots(1, 2, figsize=(12, 6))
ti = df_pred["vocab"].head(3).values
ti2 = df2["vocab"].head(2).values
try:
df_pred["pred"].head(3).plot(ax=pic[0], kind="pie",
cmap="Set2", labels=ti, explode=(0.02, 0, 0),
wedgeprops=dict(width=.4),
normalize=False)
df2["pred"].head(2).plot(ax=pic[1], kind="pie",
colors=["cornflowerblue", "darkorange"], labels=ti2, explode=(0.02, 0),
wedgeprops=dict(width=.4),
normalize=False)
except:
df_pred["pred"].head(3).plot(ax=pic[0], kind="pie",
cmap="Set2", labels=ti, explode=(0.02, 0, 0),
wedgeprops=dict(width=.4))
df2["pred"].head(2).plot(ax=pic[1], kind="pie",
colors=["cornflowerblue", "darkorange"], labels=ti2, explode=(0.02, 0),
wedgeprops=dict(width=.4))
t = str(ti[0]) + ": " + str(np.round(df_pred.head(1).pred.values[0] * 100, 2)) + "% de predicci贸n"
pic[0].set_title(t, fontsize=14.0, fontweight="bold")
pic[0].axis('off')
pic[0].legend(ti, loc="lower right", title="C谩ncer de Piel: ")
k0 = np.round(df2.head(1).pred.values[0] * 100, 2)
k1 = np.round(df2.tail(1).pred.values[0] * 100, 2)
if k0 > k1:
t2 = str(ti2[0]) + ": " + str(k0) + "% de predicci贸n"
else:
t2 = str(ti2[1]) + ": " + str(k1) + "% de predicci贸n"
pic[1].set_title(t2, fontsize=14.0, fontweight="bold")
pic[1].axis('off')
pic[1].legend(ti2, loc="lower right", title="Predicci贸n C谩ncer de Piel:")
fig.tight_layout()
return fig
def predict_donut(self, img):
d = self._predict_image(img, self.categories)
df = pd.DataFrame(d, index=[0])
df = df.transpose().reset_index()
df.columns = ["vocab", "pred"]
df.sort_values("pred", inplace=True, ascending=False, ignore_index=True)
d2 = self._predict_image2(img, self.categories2)
df2 = pd.DataFrame(d2, index=[0])
df2 = df2.transpose().reset_index()
df2.columns = ["vocab", "pred"]
fig = self._draw_pred(df, df2)
return fig
# Inicializar el objeto ADA_SKIN
maxi = ADA_SKIN(verbose=False)
# Cargar modelos
learn = fastai.learner.load_learner('ada_learn_skin_norm2000.pkl')
learn2 = fastai.learner.load_learner('ada_learn_malben.pkl')
maxi.categories = learn.dls.vocab
maxi.categories2 = learn2.dls.vocab
# Crear la interfaz de Gradio
hf_image = gr.Image() # Se elimina el argumento 'type' porque no es necesario
hf_plot = gr.Plot()
intf = gr.Interface(fn=maxi.predict_donut,
inputs=hf_image,
outputs=hf_plot,
examples=maxi.examples,
title=maxi.title,
live=True,
article=maxi.article)
# Lanzar la interfaz
intf.launch(share=True)
|