Update app.py
Browse files
app.py
CHANGED
@@ -294,35 +294,49 @@ def quick_predict_ui(image_pil):
|
|
294 |
except Exception as e:
|
295 |
return f"Erreur: {e}", None, "❌ Erreur lors de l'analyse."
|
296 |
|
297 |
-
def generate_gradcam_ui():
|
298 |
global current_image, current_predictions
|
299 |
if current_image is None or current_predictions is None:
|
300 |
return None, "❌ Aucun résultat précédent — lance d'abord l'analyse rapide."
|
|
|
301 |
try:
|
302 |
-
#
|
303 |
ensemble_probs = current_predictions["ensemble"]
|
304 |
top_class_idx = int(np.argmax(ensemble_probs))
|
305 |
|
|
|
306 |
candidates = []
|
307 |
-
if model_xcept is not None:
|
308 |
-
|
309 |
-
if
|
|
|
|
|
|
|
310 |
|
311 |
if not candidates:
|
312 |
return None, "❌ Aucun modèle disponible pour Grad-CAM."
|
313 |
|
|
|
314 |
explainer_model_name, explainer_model, conf = max(candidates, key=lambda t: t[2])
|
315 |
explainer_layer = LAST_CONV_LAYERS.get(explainer_model_name)
|
316 |
-
#_update_progress(progress, 5, desc=f"Génération Grad-CAM avec {explainer_model_name}...")
|
317 |
|
318 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
319 |
|
320 |
-
#_update_progress(progress, 100, desc="✅ Grad-CAM généré !")
|
321 |
return gradcam_img, f"✅ Grad-CAM généré avec {explainer_model_name} (confiance: {conf:.1%})"
|
|
|
322 |
except Exception as e:
|
323 |
-
import traceback
|
|
|
324 |
return None, f"❌ Erreur: {e}"
|
325 |
|
|
|
326 |
# ---- INTERFACE GRADIO ----
|
327 |
example_paths = ["ISIC_0024627.jpg", "ISIC_0025539.jpg", "ISIC_0031410.jpg"]
|
328 |
|
|
|
294 |
except Exception as e:
|
295 |
return f"Erreur: {e}", None, "❌ Erreur lors de l'analyse."
|
296 |
|
297 |
+
def generate_gradcam_ui(progress=gr.Progress()):
|
298 |
global current_image, current_predictions
|
299 |
if current_image is None or current_predictions is None:
|
300 |
return None, "❌ Aucun résultat précédent — lance d'abord l'analyse rapide."
|
301 |
+
|
302 |
try:
|
303 |
+
# On ne fait plus de mise à jour ici, make_gradcam gère tout
|
304 |
ensemble_probs = current_predictions["ensemble"]
|
305 |
top_class_idx = int(np.argmax(ensemble_probs))
|
306 |
|
307 |
+
# Sélection des modèles disponibles
|
308 |
candidates = []
|
309 |
+
if model_xcept is not None:
|
310 |
+
candidates.append(("xception", model_xcept, current_predictions["xception"][top_class_idx]))
|
311 |
+
if model_resnet50 is not None:
|
312 |
+
candidates.append(("resnet50", model_resnet50, current_predictions["resnet50"][top_class_idx]))
|
313 |
+
if model_densenet is not None:
|
314 |
+
candidates.append(("densenet201", model_densenet, current_predictions["densenet201"][top_class_idx]))
|
315 |
|
316 |
if not candidates:
|
317 |
return None, "❌ Aucun modèle disponible pour Grad-CAM."
|
318 |
|
319 |
+
# Choix du meilleur modèle
|
320 |
explainer_model_name, explainer_model, conf = max(candidates, key=lambda t: t[2])
|
321 |
explainer_layer = LAST_CONV_LAYERS.get(explainer_model_name)
|
|
|
322 |
|
323 |
+
# Génération Grad-CAM avec la progression gérée en interne
|
324 |
+
gradcam_img = make_gradcam(
|
325 |
+
current_image,
|
326 |
+
explainer_model,
|
327 |
+
explainer_layer,
|
328 |
+
class_index=top_class_idx,
|
329 |
+
progress=progress
|
330 |
+
)
|
331 |
|
|
|
332 |
return gradcam_img, f"✅ Grad-CAM généré avec {explainer_model_name} (confiance: {conf:.1%})"
|
333 |
+
|
334 |
except Exception as e:
|
335 |
+
import traceback
|
336 |
+
traceback.print_exc()
|
337 |
return None, f"❌ Erreur: {e}"
|
338 |
|
339 |
+
|
340 |
# ---- INTERFACE GRADIO ----
|
341 |
example_paths = ["ISIC_0024627.jpg", "ISIC_0025539.jpg", "ISIC_0031410.jpg"]
|
342 |
|