avant 50
This commit is contained in:
@@ -1,27 +1,47 @@
|
||||
import os
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
import httpx
|
||||
|
||||
AI_SERVICE_URL = os.environ.get("AI_SERVICE_URL", "http://localhost:8070")
|
||||
AI_SERVICE_URL = os.environ.get("AI_SERVICE_URL", "http://ai-service:8070")
|
||||
|
||||
# Mapping class_name YOLO → nom commun français (partiel)
|
||||
_NOMS_FR = {
|
||||
"Tomato___healthy": "Tomate (saine)",
|
||||
"Tomato___Early_blight": "Tomate (mildiou précoce)",
|
||||
"Tomato___Late_blight": "Tomate (mildiou tardif)",
|
||||
"Pepper__bell___healthy": "Poivron (sain)",
|
||||
"Apple___healthy": "Pommier (sain)",
|
||||
"Potato___healthy": "Pomme de terre (saine)",
|
||||
"Grape___healthy": "Vigne (saine)",
|
||||
"Corn_(maize)___healthy": "Maïs (sain)",
|
||||
"Strawberry___healthy": "Fraisier (sain)",
|
||||
"Peach___healthy": "Pêcher (sain)",
|
||||
# Mapping complet class_name YOLO → Infos détaillées
|
||||
_DIAGNOSTICS = {
|
||||
"Tomato___healthy": {
|
||||
"label": "Tomate (saine)",
|
||||
"conseil": "Votre plant est en pleine forme. Pensez au paillage pour garder l'humidité.",
|
||||
"actions": ["Pailler le pied", "Vérifier les gourmands"]
|
||||
},
|
||||
"Tomato___Early_blight": {
|
||||
"label": "Tomate (Alternariose)",
|
||||
"conseil": "Champignon fréquent. Retirez les feuilles basses touchées et évitez de mouiller le feuillage.",
|
||||
"actions": ["Retirer feuilles infectées", "Traitement bouillie bordelaise"]
|
||||
},
|
||||
"Tomato___Late_blight": {
|
||||
"label": "Tomate (Mildiou)",
|
||||
"conseil": "Urgent : Le mildiou se propage vite avec l'humidité. Coupez les parties atteintes immédiatement.",
|
||||
"actions": ["Couper parties infectées", "Traitement purin de prêle", "Abriter de la pluie"]
|
||||
},
|
||||
"Pepper__bell___healthy": {
|
||||
"label": "Poivron (sain)",
|
||||
"conseil": "Le poivron aime la chaleur et un sol riche.",
|
||||
"actions": ["Apport de compost", "Arrosage régulier"]
|
||||
},
|
||||
"Potato___healthy": {
|
||||
"label": "Pomme de terre (saine)",
|
||||
"conseil": "Pensez à butter les pieds pour favoriser la production de tubercules.",
|
||||
"actions": ["Butter les pieds"]
|
||||
},
|
||||
"Grape___healthy": {
|
||||
"label": "Vigne (saine)",
|
||||
"conseil": "Surveillez l'apparition d'oïdium si le temps est chaud et humide.",
|
||||
"actions": ["Taille en vert", "Vérifier sous les feuilles"]
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
async def identify(image_bytes: bytes) -> List[dict]:
|
||||
"""Appelle l'ai-service interne et retourne les détections YOLO."""
|
||||
"""Appelle l'ai-service interne et retourne les détections YOLO avec diagnostics."""
|
||||
try:
|
||||
async with httpx.AsyncClient(timeout=30.0) as client:
|
||||
resp = await client.post(
|
||||
@@ -36,10 +56,18 @@ async def identify(image_bytes: bytes) -> List[dict]:
|
||||
results = []
|
||||
for det in data[:3]:
|
||||
cls = det.get("class_name", "")
|
||||
diag = _DIAGNOSTICS.get(cls, {
|
||||
"label": cls.replace("___", " — ").replace("_", " "),
|
||||
"conseil": "Pas de diagnostic spécifique disponible pour cette espèce.",
|
||||
"actions": []
|
||||
})
|
||||
|
||||
results.append({
|
||||
"species": cls.replace("___", " — ").replace("_", " "),
|
||||
"common_name": _NOMS_FR.get(cls, cls.split("___")[0].replace("_", " ")),
|
||||
"species": cls,
|
||||
"common_name": diag["label"],
|
||||
"confidence": det.get("confidence", 0.0),
|
||||
"conseil": diag["conseil"],
|
||||
"actions": diag["actions"],
|
||||
"image_url": "",
|
||||
})
|
||||
return results
|
||||
|
||||
Reference in New Issue
Block a user