ninafr8175 commited on
Commit ·
c00bf8d
1
Parent(s): 6c28497
app update 2
Browse files
app.py
CHANGED
|
@@ -8,16 +8,7 @@ from inference import ( # fonctions importées du fichier in
|
|
| 8 |
)
|
| 9 |
|
| 10 |
# -----------------------------------------------------------
|
| 11 |
-
#
|
| 12 |
-
# -----------------------------------------------------------
|
| 13 |
-
st.set_page_config(
|
| 14 |
-
page_title="Fire Detection Dashboard", # titre de l’onglet du navigateur
|
| 15 |
-
page_icon="🔥", # icône (emoji)
|
| 16 |
-
layout="centered" # mise en page centrée
|
| 17 |
-
)
|
| 18 |
-
|
| 19 |
-
# -----------------------------------------------------------
|
| 20 |
-
# Déclaration des modèles potentiels
|
| 21 |
# -----------------------------------------------------------
|
| 22 |
ALL_MODEL_FILES = {
|
| 23 |
"Modèle Efficientnet Baseline": "efficientnet_fire.pt",
|
|
@@ -35,7 +26,33 @@ if len(MODEL_FILES) == 0:
|
|
| 35 |
st.stop()
|
| 36 |
|
| 37 |
# -----------------------------------------------------------
|
| 38 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
# -----------------------------------------------------------
|
| 40 |
st.sidebar.title("⚙️ Paramètres")
|
| 41 |
|
|
@@ -82,16 +99,30 @@ def load_app_model(model_path: str):
|
|
| 82 |
|
| 83 |
model, device, transform = load_app_model(selected_model_path)
|
| 84 |
|
|
|
|
|
|
|
|
|
|
| 85 |
# -----------------------------------------------------------
|
| 86 |
-
# Titre principal
|
| 87 |
# -----------------------------------------------------------
|
| 88 |
st.title("🔥 Fire Detection Dashboard")
|
|
|
|
| 89 |
st.markdown(
|
| 90 |
"""
|
| 91 |
Ce prototype permet de tester un modèle de détection de feu
|
| 92 |
-
sur des images individuelles.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
|
| 94 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
"""
|
| 96 |
)
|
| 97 |
|
|
@@ -144,9 +175,9 @@ else:
|
|
| 144 |
)
|
| 145 |
|
| 146 |
# -------------------------------------------------------
|
| 147 |
-
# Détails
|
| 148 |
# -------------------------------------------------------
|
| 149 |
-
with st.expander("🔍 Détails techniques
|
| 150 |
st.markdown(
|
| 151 |
f"""
|
| 152 |
- Modèle utilisé : **{selected_model_name}**
|
|
@@ -159,3 +190,21 @@ Si `prob_fire >= seuil` → prédiction = *fire*,
|
|
| 159 |
sinon → *no_fire*.
|
| 160 |
"""
|
| 161 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
)
|
| 9 |
|
| 10 |
# -----------------------------------------------------------
|
| 11 |
+
# Modèles disponibles (théoriques)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
# -----------------------------------------------------------
|
| 13 |
ALL_MODEL_FILES = {
|
| 14 |
"Modèle Efficientnet Baseline": "efficientnet_fire.pt",
|
|
|
|
| 26 |
st.stop()
|
| 27 |
|
| 28 |
# -----------------------------------------------------------
|
| 29 |
+
# Métriques par modèle (à remplir plus tard si besoin)
|
| 30 |
+
# Clé = chemin du fichier de poids (ex: 'efficientnet_fire.pt')
|
| 31 |
+
# -----------------------------------------------------------
|
| 32 |
+
MODEL_METRICS = {
|
| 33 |
+
# "efficientnet_fire.pt": {
|
| 34 |
+
# "accuracy": 0.94,
|
| 35 |
+
# "precision": 0.92,
|
| 36 |
+
# "recall": 0.89,
|
| 37 |
+
# "f1": 0.90,
|
| 38 |
+
# "fp": 12,
|
| 39 |
+
# "fn": 4,
|
| 40 |
+
# },
|
| 41 |
+
# "efficientnet_fire_2.pt": {...},
|
| 42 |
+
# "inception3_fire.pt": {...},
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
# -----------------------------------------------------------
|
| 46 |
+
# Configuration de la page
|
| 47 |
+
# -----------------------------------------------------------
|
| 48 |
+
st.set_page_config(
|
| 49 |
+
page_title="Fire Detection Dashboard", # titre de l’onglet du navigateur
|
| 50 |
+
page_icon="🔥", # icône (emoji)
|
| 51 |
+
layout="centered" # mise en page centrée
|
| 52 |
+
)
|
| 53 |
+
|
| 54 |
+
# -----------------------------------------------------------
|
| 55 |
+
# Sidebar : choix du modèle + paramètres
|
| 56 |
# -----------------------------------------------------------
|
| 57 |
st.sidebar.title("⚙️ Paramètres")
|
| 58 |
|
|
|
|
| 99 |
|
| 100 |
model, device, transform = load_app_model(selected_model_path)
|
| 101 |
|
| 102 |
+
# Récupération éventuelle des métriques pour ce modèle
|
| 103 |
+
metrics = MODEL_METRICS.get(selected_model_path, None)
|
| 104 |
+
|
| 105 |
# -----------------------------------------------------------
|
| 106 |
+
# Titre principal + guide d’utilisation
|
| 107 |
# -----------------------------------------------------------
|
| 108 |
st.title("🔥 Fire Detection Dashboard")
|
| 109 |
+
|
| 110 |
st.markdown(
|
| 111 |
"""
|
| 112 |
Ce prototype permet de tester un modèle de détection de feu
|
| 113 |
+
sur des images individuelles.
|
| 114 |
+
"""
|
| 115 |
+
)
|
| 116 |
+
|
| 117 |
+
st.markdown(
|
| 118 |
+
"""
|
| 119 |
+
### 🧭 Guide d’utilisation
|
| 120 |
|
| 121 |
+
1. 🧠 **Choisissez le modèle** dans la barre latérale
|
| 122 |
+
2. 🖼️ **Chargez une image** - JPG, JPEG, PNG - Maximum 200MB
|
| 123 |
+
3. 🔍 **Obtenez la prédiction** (FEU / PAS DE FEU DÉTECTÉ + probabilité)
|
| 124 |
+
4. 📊 **Comparez les modèles** pour explorer leurs différences
|
| 125 |
+
5. ⚙️ **Ajustez le seuil** pour un modèle +/- strict
|
| 126 |
"""
|
| 127 |
)
|
| 128 |
|
|
|
|
| 175 |
)
|
| 176 |
|
| 177 |
# -------------------------------------------------------
|
| 178 |
+
# Détails techniques (expander)
|
| 179 |
# -------------------------------------------------------
|
| 180 |
+
with st.expander("🔍 Détails techniques"):
|
| 181 |
st.markdown(
|
| 182 |
f"""
|
| 183 |
- Modèle utilisé : **{selected_model_name}**
|
|
|
|
| 190 |
sinon → *no_fire*.
|
| 191 |
"""
|
| 192 |
)
|
| 193 |
+
|
| 194 |
+
# -------------------------------------------------------
|
| 195 |
+
# Performances du modèle (expander conditionnel)
|
| 196 |
+
# -------------------------------------------------------
|
| 197 |
+
if metrics is not None:
|
| 198 |
+
with st.expander("📊 Performances du modèle (validation)"):
|
| 199 |
+
st.markdown(
|
| 200 |
+
f"""
|
| 201 |
+
| Metric | Value |
|
| 202 |
+
|----------------------|-------|
|
| 203 |
+
| Accuracy | {metrics.get('accuracy', 'non disponible')} |
|
| 204 |
+
| Precision (fire) | {metrics.get('precision', 'non disponible')} |
|
| 205 |
+
| Recall (fire) | {metrics.get('recall', 'non disponible')} |
|
| 206 |
+
| F1-score (fire) | {metrics.get('f1', 'non disponible')} |
|
| 207 |
+
| False Positives (FP) | {metrics.get('fp', 'non disponible')} |
|
| 208 |
+
| False Negatives (FN) | {metrics.get('fn', 'non disponible')} |
|
| 209 |
+
"""
|
| 210 |
+
)
|