LoloSemper commited on
Commit
53d4bcf
verified
1 Parent(s): 8658ccb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -16
app.py CHANGED
@@ -6,10 +6,10 @@ import base64
6
  import io
7
  from fastai.vision.all import *
8
  import tensorflow as tf
9
- from tensorflow import keras
10
  import zipfile
11
  import os
12
  import traceback
 
13
 
14
  # Descomprimir el modelo si no se ha descomprimido a煤n
15
  if not os.path.exists("saved_model"):
@@ -17,12 +17,10 @@ if not os.path.exists("saved_model"):
17
  zip_ref.extractall("saved_model")
18
 
19
  # Cargar modelo ISIC con TensorFlow desde el directorio correcto
20
- from keras.layers import TFSMLayer
21
-
22
  try:
23
- model_isic = TFSMLayer("saved_model/saved_model", call_endpoint="serving_default")
24
  except Exception as e:
25
- print("\U0001F534 Error al cargar el modelo ISIC con TFSMLayer:", e)
26
  raise
27
 
28
  # Cargar modelos fastai
@@ -30,7 +28,6 @@ model_malignancy = load_learner("ada_learn_malben.pkl")
30
  model_norm2000 = load_learner("ada_learn_skin_norm2000.pkl")
31
 
32
  # Cargar modelo ViT
33
- from transformers import AutoImageProcessor, AutoModelForImageClassification
34
  feature_extractor = AutoImageProcessor.from_pretrained("nateraw/vit-skin-cancer")
35
  model_vit = AutoModelForImageClassification.from_pretrained("nateraw/vit-skin-cancer")
36
 
@@ -46,16 +43,15 @@ RISK_LEVELS = {
46
  6: {"label": "vasc", "color": "#073B4C", "weight": 0.4},
47
  }
48
 
49
- # Preprocesado para TensorFlow ISIC
50
  def preprocess_image_isic(pil_image):
51
  image = pil_image.resize((224, 224))
52
  array = np.array(image) / 255.0
53
  return np.expand_dims(array, axis=0)
54
 
55
- # Funci贸n de an谩lisis
56
  def analizar_lesion_combined(img):
57
  try:
58
  img_fastai = PILImage.create(img)
 
59
  inputs = feature_extractor(img, return_tensors="pt")
60
  with torch.no_grad():
61
  outputs = model_vit(**inputs)
@@ -69,17 +65,17 @@ def analizar_lesion_combined(img):
69
  pred_fast_type, _, probs_fast_type = model_norm2000.predict(img_fastai)
70
 
71
  x_isic = preprocess_image_isic(img)
72
- preds_isic_dict = model_isic(x_isic)
73
- print("\U0001F50D Claves de salida de model_isic:", preds_isic_dict.keys())
74
- key = list(preds_isic_dict.keys())[0]
75
- preds_isic = preds_isic_dict[key].numpy()[0]
76
  pred_idx_isic = int(np.argmax(preds_isic))
77
  pred_class_isic = CLASSES[pred_idx_isic]
78
  confidence_isic = preds_isic[pred_idx_isic]
79
 
80
  colors_bars = [RISK_LEVELS[i]['color'] for i in range(7)]
81
  fig, ax = plt.subplots(figsize=(8, 3))
82
- ax.bar(CLASSES, probs_vit*100, color=colors_bars)
83
  ax.set_title("Probabilidad ViT por tipo de lesi贸n")
84
  ax.set_ylabel("Probabilidad (%)")
85
  ax.set_xticks(np.arange(len(CLASSES)))
@@ -101,7 +97,7 @@ def analizar_lesion_combined(img):
101
  <tr><td>馃К Fast.ai (clasificaci贸n)</td><td><b>{pred_fast_type}</b></td><td>N/A</td></tr>
102
  <tr><td>鈿狅笍 Fast.ai (malignidad)</td><td><b>{"Maligno" if prob_malignant > 0.5 else "Benigno"}</b></td><td>{prob_malignant:.1%}</td></tr>
103
  <tr><td>馃敩 ISIC TensorFlow</td><td><b>{pred_class_isic}</b></td><td>{confidence_isic:.1%}</td></tr>
104
- </table><br><b>馃Ш Recomendaci贸n autom谩tica:</b><br>"""
105
 
106
  cancer_risk_score = sum(probs_vit[i] * RISK_LEVELS[i]['weight'] for i in range(7))
107
  if prob_malignant > 0.7 or cancer_risk_score > 0.6:
@@ -122,7 +118,6 @@ def analizar_lesion_combined(img):
122
  traceback.print_exc()
123
  return f"<b>Error interno:</b> {str(e)}", ""
124
 
125
- # INTERFAZ
126
  demo = gr.Interface(
127
  fn=analizar_lesion_combined,
128
  inputs=gr.Image(type="pil", label="Sube una imagen de la lesi贸n"),
@@ -132,7 +127,6 @@ demo = gr.Interface(
132
  flagging_mode="never"
133
  )
134
 
135
- # LANZAMIENTO
136
  if __name__ == "__main__":
137
  demo.launch()
138
 
 
6
  import io
7
  from fastai.vision.all import *
8
  import tensorflow as tf
 
9
  import zipfile
10
  import os
11
  import traceback
12
+ from transformers import AutoImageProcessor, AutoModelForImageClassification
13
 
14
  # Descomprimir el modelo si no se ha descomprimido a煤n
15
  if not os.path.exists("saved_model"):
 
17
  zip_ref.extractall("saved_model")
18
 
19
  # Cargar modelo ISIC con TensorFlow desde el directorio correcto
 
 
20
  try:
21
+ model_isic = tf.saved_model.load("saved_model")
22
  except Exception as e:
23
+ print("\U0001F534 Error al cargar el modelo ISIC:", e)
24
  raise
25
 
26
  # Cargar modelos fastai
 
28
  model_norm2000 = load_learner("ada_learn_skin_norm2000.pkl")
29
 
30
  # Cargar modelo ViT
 
31
  feature_extractor = AutoImageProcessor.from_pretrained("nateraw/vit-skin-cancer")
32
  model_vit = AutoModelForImageClassification.from_pretrained("nateraw/vit-skin-cancer")
33
 
 
43
  6: {"label": "vasc", "color": "#073B4C", "weight": 0.4},
44
  }
45
 
 
46
  def preprocess_image_isic(pil_image):
47
  image = pil_image.resize((224, 224))
48
  array = np.array(image) / 255.0
49
  return np.expand_dims(array, axis=0)
50
 
 
51
  def analizar_lesion_combined(img):
52
  try:
53
  img_fastai = PILImage.create(img)
54
+
55
  inputs = feature_extractor(img, return_tensors="pt")
56
  with torch.no_grad():
57
  outputs = model_vit(**inputs)
 
65
  pred_fast_type, _, probs_fast_type = model_norm2000.predict(img_fastai)
66
 
67
  x_isic = preprocess_image_isic(img)
68
+ isic_func = model_isic.signatures["serving_default"]
69
+ preds_isic_tensor = isic_func(tf.constant(x_isic))
70
+ key = list(preds_isic_tensor.keys())[0]
71
+ preds_isic = preds_isic_tensor[key].numpy()[0]
72
  pred_idx_isic = int(np.argmax(preds_isic))
73
  pred_class_isic = CLASSES[pred_idx_isic]
74
  confidence_isic = preds_isic[pred_idx_isic]
75
 
76
  colors_bars = [RISK_LEVELS[i]['color'] for i in range(7)]
77
  fig, ax = plt.subplots(figsize=(8, 3))
78
+ ax.bar(CLASSES, probs_vit * 100, color=colors_bars)
79
  ax.set_title("Probabilidad ViT por tipo de lesi贸n")
80
  ax.set_ylabel("Probabilidad (%)")
81
  ax.set_xticks(np.arange(len(CLASSES)))
 
97
  <tr><td>馃К Fast.ai (clasificaci贸n)</td><td><b>{pred_fast_type}</b></td><td>N/A</td></tr>
98
  <tr><td>鈿狅笍 Fast.ai (malignidad)</td><td><b>{"Maligno" if prob_malignant > 0.5 else "Benigno"}</b></td><td>{prob_malignant:.1%}</td></tr>
99
  <tr><td>馃敩 ISIC TensorFlow</td><td><b>{pred_class_isic}</b></td><td>{confidence_isic:.1%}</td></tr>
100
+ </table><br><b>馃 Recomendaci贸n autom谩tica:</b><br>"
101
 
102
  cancer_risk_score = sum(probs_vit[i] * RISK_LEVELS[i]['weight'] for i in range(7))
103
  if prob_malignant > 0.7 or cancer_risk_score > 0.6:
 
118
  traceback.print_exc()
119
  return f"<b>Error interno:</b> {str(e)}", ""
120
 
 
121
  demo = gr.Interface(
122
  fn=analizar_lesion_combined,
123
  inputs=gr.Image(type="pil", label="Sube una imagen de la lesi贸n"),
 
127
  flagging_mode="never"
128
  )
129
 
 
130
  if __name__ == "__main__":
131
  demo.launch()
132