walidchaib commited on
Commit
444d7a7
·
verified ·
1 Parent(s): f7a5a4e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -5
app.py CHANGED
@@ -36,11 +36,19 @@ import tensorflow as tf
36
  import numpy as np
37
  from PIL import Image
38
 
 
 
 
39
  # ================================
40
  # 3. CHARGEMENT DU MODÈLE (72 classes)
41
  # ================================
42
  MODEL_PATH = "final_model.keras"
43
- model = tf.keras.models.load_model(MODEL_PATH)
 
 
 
 
 
44
 
45
  # ================================
46
  # 4. NOMS DES CLASSES (issus de l'entraînement)
@@ -137,12 +145,11 @@ def predict(img):
137
  """
138
  processed = preprocess_image(img)
139
  preds = model.predict(processed, verbose=0)[0]
140
- # Créer le dictionnaire des probabilités
141
  results = {class_names[i]: float(preds[i]) for i in range(len(class_names))}
142
  return results
143
 
144
  # ================================
145
- # 6. INTERFACE GRADIO
146
  # ================================
147
  iface = gr.Interface(
148
  fn=predict,
@@ -150,8 +157,7 @@ iface = gr.Interface(
150
  outputs=gr.Label(num_top_classes=3, label="Maladie prédite (top 3)"),
151
  title="Classification des maladies des plantes (72 classes)",
152
  description="Chargez une photo de feuille et le modèle prédira la maladie parmi 72 classes. Modèle basé sur EfficientNetB0 avec fine-tuning.",
153
- examples=None,
154
- allow_flagging="never"
155
  )
156
 
157
  if __name__ == "__main__":
 
36
  import numpy as np
37
  from PIL import Image
38
 
39
+ # Forcer la précision float32 (évite les warnings de mixed precision sur CPU)
40
+ tf.keras.mixed_precision.set_global_policy('float32')
41
+
42
  # ================================
43
  # 3. CHARGEMENT DU MODÈLE (72 classes)
44
  # ================================
45
  MODEL_PATH = "final_model.keras"
46
+ # Charger le modèle sans compiler pour éviter l'avertissement sur l'optimiseur
47
+ model = tf.keras.models.load_model(MODEL_PATH, compile=False)
48
+
49
+ # Recompiler avec une configuration simple (nécessaire pour faire des prédictions)
50
+ # On utilise une perte factice car on ne fera pas d'entraînement
51
+ model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
52
 
53
  # ================================
54
  # 4. NOMS DES CLASSES (issus de l'entraînement)
 
145
  """
146
  processed = preprocess_image(img)
147
  preds = model.predict(processed, verbose=0)[0]
 
148
  results = {class_names[i]: float(preds[i]) for i in range(len(class_names))}
149
  return results
150
 
151
  # ================================
152
+ # 6. INTERFACE GRADIO (sans allow_flagging)
153
  # ================================
154
  iface = gr.Interface(
155
  fn=predict,
 
157
  outputs=gr.Label(num_top_classes=3, label="Maladie prédite (top 3)"),
158
  title="Classification des maladies des plantes (72 classes)",
159
  description="Chargez une photo de feuille et le modèle prédira la maladie parmi 72 classes. Modèle basé sur EfficientNetB0 avec fine-tuning.",
160
+ examples=None
 
161
  )
162
 
163
  if __name__ == "__main__":