Update app.py
Browse files
app.py
CHANGED
@@ -638,23 +638,33 @@ def generate_gradcam_ui(progress=gr.Progress()):
|
|
638 |
# ---- INTERFACE GRADIO ----
|
639 |
example_paths = ["ISIC_0024627.jpg", "ISIC_0025539.jpg", "ISIC_0031410.jpg"]
|
640 |
|
|
|
|
|
|
|
641 |
with gr.Blocks(theme=theme, title="Analyse de lésions", css=css) as demo:
|
642 |
gr.Markdown("# 🔬 Skin Care : analyse de lésions cutanées")
|
643 |
-
|
644 |
models_status = []
|
645 |
-
if model_resnet50:
|
646 |
-
|
647 |
-
if
|
|
|
|
|
|
|
|
|
648 |
gr.Markdown(f"**Avertissement 🚨** cette application est un projet d'étudiant et ne doit être utilisé qu'à titre informatif. Seul votre médecin est habilité à vous donner un diagnostic.")
|
649 |
gr.Markdown(f"Ensemble de modèles utilisés : {', '.join(models_status) if models_status else 'AUCUN'}")
|
650 |
-
|
651 |
with gr.Row():
|
652 |
with gr.Column(scale=1):
|
653 |
input_image = gr.Image(type="pil", label="📸 Uploader une image")
|
|
|
654 |
with gr.Row():
|
655 |
quick_btn = gr.Button("Étape 1️⃣ Analyse Rapide", variant="primary")
|
656 |
gradcam_btn = gr.Button("Étape 2️⃣ Carte de chaleur", variant="secondary")
|
|
|
657 |
gr.Examples(examples=example_paths, inputs=input_image)
|
|
|
658 |
gr.HTML(value="""
|
659 |
<details>
|
660 |
<summary><b>Dataset utilisé ↓ ↑</b></summary>
|
@@ -663,47 +673,54 @@ with gr.Blocks(theme=theme, title="Analyse de lésions", css=css) as demo:
|
|
663 |
<br>
|
664 |
<details>
|
665 |
<summary><b>RGPD & Digital Act ↓ ↑</b></summary>
|
666 |
-
Ce dataset ne peut pas être utilisé pour des cas réels aujourd'hui notamment du fait qu'il ne comporte qu'essentiellement des peaux de populations européennes (allemands et autrichiens).
|
667 |
-
Cette application ne collecte pas vos données personnelles. <b>Les images uploadées ne sont pas stockées</b>.
|
668 |
-
La politique de Cookies 🍪 est gérée par <a href='https://huggingface.co/privacy'>Hugging Face disponible ici</a>.
|
669 |
</details>
|
670 |
""")
|
671 |
-
|
672 |
with gr.Column(scale=2):
|
673 |
output_label = gr.HTML(
|
674 |
value='<h2 class="output-class">Pour obtenir un diagnostic, uploadez une image ou prenez une photo.</h2>',
|
675 |
elem_classes="diagnostic-global"
|
676 |
)
|
677 |
-
|
678 |
gr.Markdown("### 💡 Explication")
|
679 |
output_text = gr.HTML(
|
680 |
value="",
|
681 |
elem_classes="feedback-container"
|
682 |
)
|
683 |
-
|
684 |
output_warning = gr.HTML(
|
685 |
value="",
|
686 |
elem_classes="warning-container",
|
687 |
visible=False
|
688 |
)
|
689 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
690 |
output_plot = gr.BarPlot(
|
691 |
-
|
692 |
-
|
|
|
693 |
title="Probabilités par classe",
|
694 |
-
y_title="Probabilité (%)",
|
695 |
y_lim=[0, 100],
|
696 |
-
height=450
|
697 |
-
y_title_format="{value:.1f}%"
|
698 |
)
|
|
|
699 |
output_gradcam = gr.Image(label="🔍 Visualisation Grad-CAM")
|
700 |
output_status = gr.Textbox(label="Statut", interactive=False)
|
701 |
-
|
|
|
702 |
quick_btn.click(
|
703 |
fn=quick_predict_ui,
|
704 |
inputs=input_image,
|
705 |
outputs=[output_label, output_text, output_warning, output_plot, output_status]
|
706 |
)
|
|
|
707 |
gradcam_btn.click(
|
708 |
fn=generate_gradcam_ui,
|
709 |
inputs=[],
|
|
|
638 |
# ---- INTERFACE GRADIO ----
|
639 |
example_paths = ["ISIC_0024627.jpg", "ISIC_0025539.jpg", "ISIC_0031410.jpg"]
|
640 |
|
641 |
+
import pandas as pd
|
642 |
+
import gradio as gr
|
643 |
+
|
644 |
with gr.Blocks(theme=theme, title="Analyse de lésions", css=css) as demo:
|
645 |
gr.Markdown("# 🔬 Skin Care : analyse de lésions cutanées")
|
646 |
+
|
647 |
models_status = []
|
648 |
+
if model_resnet50:
|
649 |
+
models_status.append("☑ ResNet50")
|
650 |
+
if model_densenet:
|
651 |
+
models_status.append("☑ DenseNet201")
|
652 |
+
if model_xcept:
|
653 |
+
models_status.append("☑ Xception")
|
654 |
+
|
655 |
gr.Markdown(f"**Avertissement 🚨** cette application est un projet d'étudiant et ne doit être utilisé qu'à titre informatif. Seul votre médecin est habilité à vous donner un diagnostic.")
|
656 |
gr.Markdown(f"Ensemble de modèles utilisés : {', '.join(models_status) if models_status else 'AUCUN'}")
|
657 |
+
|
658 |
with gr.Row():
|
659 |
with gr.Column(scale=1):
|
660 |
input_image = gr.Image(type="pil", label="📸 Uploader une image")
|
661 |
+
|
662 |
with gr.Row():
|
663 |
quick_btn = gr.Button("Étape 1️⃣ Analyse Rapide", variant="primary")
|
664 |
gradcam_btn = gr.Button("Étape 2️⃣ Carte de chaleur", variant="secondary")
|
665 |
+
|
666 |
gr.Examples(examples=example_paths, inputs=input_image)
|
667 |
+
|
668 |
gr.HTML(value="""
|
669 |
<details>
|
670 |
<summary><b>Dataset utilisé ↓ ↑</b></summary>
|
|
|
673 |
<br>
|
674 |
<details>
|
675 |
<summary><b>RGPD & Digital Act ↓ ↑</b></summary>
|
676 |
+
Ce dataset ne peut pas être utilisé pour des cas réels aujourd'hui notamment du fait qu'il ne comporte qu'essentiellement des peaux de populations européennes (allemands et autrichiens). Cette application ne collecte pas vos données personnelles. <b>Les images uploadées ne sont pas stockées</b>. La politique de Cookies 🍪 est gérée par <a href='https://huggingface.co/privacy'>Hugging Face disponible ici</a>.
|
|
|
|
|
677 |
</details>
|
678 |
""")
|
679 |
+
|
680 |
with gr.Column(scale=2):
|
681 |
output_label = gr.HTML(
|
682 |
value='<h2 class="output-class">Pour obtenir un diagnostic, uploadez une image ou prenez une photo.</h2>',
|
683 |
elem_classes="diagnostic-global"
|
684 |
)
|
685 |
+
|
686 |
gr.Markdown("### 💡 Explication")
|
687 |
output_text = gr.HTML(
|
688 |
value="",
|
689 |
elem_classes="feedback-container"
|
690 |
)
|
691 |
+
|
692 |
output_warning = gr.HTML(
|
693 |
value="",
|
694 |
elem_classes="warning-container",
|
695 |
visible=False
|
696 |
)
|
697 |
+
|
698 |
+
# CORRECTION : Configuration simplifiée du BarPlot
|
699 |
+
# Créer un DataFrame initial vide ou avec des valeurs par défaut
|
700 |
+
initial_df = pd.DataFrame({
|
701 |
+
'Classes': CLASS_NAMES,
|
702 |
+
'Probabilités (%)': [0] * len(CLASS_NAMES)
|
703 |
+
})
|
704 |
+
|
705 |
output_plot = gr.BarPlot(
|
706 |
+
value=initial_df, # DataFrame initial
|
707 |
+
x="Classes", # Nom de la colonne x
|
708 |
+
y="Probabilités (%)", # Nom de la colonne y
|
709 |
title="Probabilités par classe",
|
|
|
710 |
y_lim=[0, 100],
|
711 |
+
height=450
|
|
|
712 |
)
|
713 |
+
|
714 |
output_gradcam = gr.Image(label="🔍 Visualisation Grad-CAM")
|
715 |
output_status = gr.Textbox(label="Statut", interactive=False)
|
716 |
+
|
717 |
+
# Configuration des événements
|
718 |
quick_btn.click(
|
719 |
fn=quick_predict_ui,
|
720 |
inputs=input_image,
|
721 |
outputs=[output_label, output_text, output_warning, output_plot, output_status]
|
722 |
)
|
723 |
+
|
724 |
gradcam_btn.click(
|
725 |
fn=generate_gradcam_ui,
|
726 |
inputs=[],
|