30 lines
836 B
Python
30 lines
836 B
Python
from fastapi import APIRouter, File, UploadFile
|
|
from app.services import plantnet, yolo_service, redis_cache
|
|
|
|
router = APIRouter(tags=["identification"])
|
|
|
|
|
|
@router.post("/identify")
|
|
async def identify_plant(file: UploadFile = File(...)):
|
|
image_bytes = await file.read()
|
|
|
|
# 1. Cache Redis
|
|
cached = redis_cache.get(image_bytes)
|
|
if cached is not None:
|
|
return {"source": "cache", "results": cached}
|
|
|
|
# 2. PlantNet (cloud)
|
|
results = await plantnet.identify(image_bytes, file.filename or "photo.jpg")
|
|
|
|
# 3. Fallback YOLO si PlantNet indisponible
|
|
if not results:
|
|
results = await yolo_service.identify(image_bytes)
|
|
source = "yolo"
|
|
else:
|
|
source = "plantnet"
|
|
|
|
# 4. Mettre en cache
|
|
redis_cache.set(image_bytes, results)
|
|
|
|
return {"source": source, "results": results}
|