LoloSemper commited on
Commit
6ae859b
·
verified ·
1 Parent(s): b224d9f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -28
app.py CHANGED
@@ -22,13 +22,6 @@ if not os.path.exists(extract_dir):
22
 
23
  model_tf = tf.saved_model.load(extract_dir)
24
 
25
- # --- Inspección de firma del modelo TensorFlow ---
26
- print("\n\n🔍 FIRMA DEL MODELO TENSORFLOW:")
27
- for key, func in model_tf.signatures.items():
28
- print(f"Firma: {key}")
29
- print("Entradas:", func.structured_input_signature)
30
- print("Salidas:", func.structured_outputs)
31
-
32
  # Función helper para inferencia TensorFlow
33
  def predict_tf(img: Image.Image):
34
  try:
@@ -46,7 +39,7 @@ def predict_tf(img: Image.Image):
46
  return probs
47
  except Exception as e:
48
  print(f"Error en predict_tf: {e}")
49
- return np.zeros(len(CLASSES))
50
 
51
  MODEL_NAME = "ahishamm/vit-base-HAM-10000-sharpened-patch-32"
52
  feature_extractor = ViTImageProcessor.from_pretrained(MODEL_NAME)
@@ -81,8 +74,7 @@ def analizar_lesion_combined(img):
81
  pred_idx_vit = int(np.argmax(probs_vit))
82
  pred_class_vit = CLASSES[pred_idx_vit]
83
  confidence_vit = probs_vit[pred_idx_vit]
84
- except Exception as e:
85
- print(f"Error en ViT prediction: {e}")
86
  pred_class_vit = "Error"
87
  confidence_vit = 0.0
88
  probs_vit = np.zeros(len(CLASSES))
@@ -90,26 +82,24 @@ def analizar_lesion_combined(img):
90
  try:
91
  pred_fast_malignant, _, probs_fast_mal = model_malignancy.predict(img_fastai)
92
  prob_malignant = float(probs_fast_mal[1])
93
- except Exception as e:
94
- print(f"Error en Fast.ai malignancy: {e}")
95
  prob_malignant = 0.0
96
 
97
  try:
98
- pred_fast_type, _, probs_fast_type = model_norm2000.predict(img_fastai)
99
- except Exception as e:
100
- print(f"Error en Fast.ai tipo: {e}")
101
  pred_fast_type = "Error"
102
 
103
  try:
104
  probs_tf = predict_tf(img)
105
- pred_idx_tf = int(np.argmax(probs_tf))
106
- confidence_tf = probs_tf[pred_idx_tf]
107
- if pred_idx_tf < len(CLASSES):
108
- pred_class_tf = CLASSES[pred_idx_tf]
109
  else:
110
- pred_class_tf = f"Clase desconocida (\u00edndice {pred_idx_tf})"
111
- except Exception as e:
112
- print(f"Error en TensorFlow prediction: {e}")
113
  pred_class_tf = "Error"
114
  confidence_tf = 0.0
115
 
@@ -131,7 +121,7 @@ def analizar_lesion_combined(img):
131
 
132
  informe = f"""
133
  <div style="font-family:sans-serif; max-width:800px; margin:auto">
134
- <h2>🧪 Diagnóstico por 4 modelos de IA</h2>
135
  <table style="border-collapse: collapse; width:100%; font-size:16px">
136
  <tr><th style="text-align:left">🔍 Modelo</th><th>Resultado</th><th>Confianza</th></tr>
137
  <tr><td>🧠 ViT (transformer)</td><td><b>{pred_class_vit}</b></td><td>{confidence_vit:.1%}</td></tr>
@@ -140,7 +130,7 @@ def analizar_lesion_combined(img):
140
  <tr><td>🔬 TensorFlow (saved_model)</td><td><b>{pred_class_tf}</b></td><td>{confidence_tf:.1%}</td></tr>
141
  </table>
142
  <br>
143
- <b>🧪 Recomendación automática:</b><br>
144
  """
145
 
146
  cancer_risk_score = sum(probs_vit[i] * RISK_LEVELS[i]['weight'] for i in range(7))
@@ -154,10 +144,8 @@ def analizar_lesion_combined(img):
154
  informe += "✅ <b>BAJO RIESGO</b> – Seguimiento de rutina (3-6 meses)"
155
 
156
  informe += "</div>"
157
-
158
  return informe, html_chart
159
 
160
- # Interfaz Gradio
161
  demo = gr.Interface(
162
  fn=analizar_lesion_combined,
163
  inputs=gr.Image(type="pil", label="Sube una imagen de la lesión"),
@@ -170,5 +158,3 @@ demo = gr.Interface(
170
  if __name__ == "__main__":
171
  demo.launch()
172
 
173
-
174
-
 
22
 
23
  model_tf = tf.saved_model.load(extract_dir)
24
 
 
 
 
 
 
 
 
25
  # Función helper para inferencia TensorFlow
26
  def predict_tf(img: Image.Image):
27
  try:
 
39
  return probs
40
  except Exception as e:
41
  print(f"Error en predict_tf: {e}")
42
+ return np.zeros(2)
43
 
44
  MODEL_NAME = "ahishamm/vit-base-HAM-10000-sharpened-patch-32"
45
  feature_extractor = ViTImageProcessor.from_pretrained(MODEL_NAME)
 
74
  pred_idx_vit = int(np.argmax(probs_vit))
75
  pred_class_vit = CLASSES[pred_idx_vit]
76
  confidence_vit = probs_vit[pred_idx_vit]
77
+ except:
 
78
  pred_class_vit = "Error"
79
  confidence_vit = 0.0
80
  probs_vit = np.zeros(len(CLASSES))
 
82
  try:
83
  pred_fast_malignant, _, probs_fast_mal = model_malignancy.predict(img_fastai)
84
  prob_malignant = float(probs_fast_mal[1])
85
+ except:
 
86
  prob_malignant = 0.0
87
 
88
  try:
89
+ pred_fast_type, _, _ = model_norm2000.predict(img_fastai)
90
+ except:
 
91
  pred_fast_type = "Error"
92
 
93
  try:
94
  probs_tf = predict_tf(img)
95
+ if len(probs_tf) == 2:
96
+ benign_prob, malignant_prob = probs_tf
97
+ pred_class_tf = "Maligno" if malignant_prob > benign_prob else "Benigno"
98
+ confidence_tf = max(probs_tf)
99
  else:
100
+ pred_class_tf = "Modelo no binario"
101
+ confidence_tf = 0.0
102
+ except:
103
  pred_class_tf = "Error"
104
  confidence_tf = 0.0
105
 
 
121
 
122
  informe = f"""
123
  <div style="font-family:sans-serif; max-width:800px; margin:auto">
124
+ <h2>🦢 Diagnóstico por 4 modelos de IA</h2>
125
  <table style="border-collapse: collapse; width:100%; font-size:16px">
126
  <tr><th style="text-align:left">🔍 Modelo</th><th>Resultado</th><th>Confianza</th></tr>
127
  <tr><td>🧠 ViT (transformer)</td><td><b>{pred_class_vit}</b></td><td>{confidence_vit:.1%}</td></tr>
 
130
  <tr><td>🔬 TensorFlow (saved_model)</td><td><b>{pred_class_tf}</b></td><td>{confidence_tf:.1%}</td></tr>
131
  </table>
132
  <br>
133
+ <b>🦥 Recomendación automática:</b><br>
134
  """
135
 
136
  cancer_risk_score = sum(probs_vit[i] * RISK_LEVELS[i]['weight'] for i in range(7))
 
144
  informe += "✅ <b>BAJO RIESGO</b> – Seguimiento de rutina (3-6 meses)"
145
 
146
  informe += "</div>"
 
147
  return informe, html_chart
148
 
 
149
  demo = gr.Interface(
150
  fn=analizar_lesion_combined,
151
  inputs=gr.Image(type="pil", label="Sube una imagen de la lesión"),
 
158
  if __name__ == "__main__":
159
  demo.launch()
160