Spaces:
Sleeping
Sleeping
| # api.py | |
| import os, tempfile | |
| from fastapi import FastAPI, UploadFile, File | |
| from fastapi.responses import JSONResponse | |
| from inference import predict | |
| from fastapi.responses import JSONResponse, PlainTextResponse | |
| app = FastAPI() | |
| def root(): | |
| return "Meat Freshness API is running. Try /health or POST /predict" | |
| def health(): | |
| return {"ok": True} | |
| async def predict_endpoint(file: UploadFile = File(...)): | |
| tmp_path = None | |
| try: | |
| # Lưu tạm file ảnh | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp: | |
| tmp.write(await file.read()) | |
| tmp_path = tmp.name | |
| label_en, conf = predict(tmp_path) | |
| # Mapping theo UI hiện tại của bạn | |
| map_vi = {"FRESH": "Tươi", "HALF-FRESH": "Vừa", "SPOILED": "Hỏng"} | |
| map_pct = {"FRESH": 100, "HALF-FRESH": 50, "SPOILED": 0} | |
| result = { | |
| "meat_type": "pork", # sửa nếu bạn phân loại nhiều loại thịt | |
| "freshness_percent": map_pct.get(label_en, 50), | |
| "label_vi": map_vi.get(label_en, label_en), | |
| "label_en": label_en, | |
| "confidence": conf | |
| } | |
| return JSONResponse(result) | |
| except Exception as e: | |
| return JSONResponse({"error": str(e)}, status_code=500) | |
| finally: | |
| if tmp_path: | |
| try: os.remove(tmp_path) | |
| except Exception: pass | |