Spaces:
Sleeping
Sleeping
| # 檔案路徑: backend/app/routers/ai_router.py | |
| from fastapi import APIRouter, File, UploadFile, HTTPException | |
| from services.ai_service import classify_food_image # 直接引入分類函式 | |
| from services.nutrition_api_service import fetch_nutrition_data # 匯入營養查詢函式 | |
| router = APIRouter( | |
| prefix="/ai", | |
| tags=["AI"], | |
| ) | |
| async def analyze_food_image_endpoint(file: UploadFile = File(...)): | |
| """ | |
| 這個端點接收使用者上傳的食物圖片,使用 AI 模型進行辨識, | |
| 並返回辨識出的食物名稱。 | |
| """ | |
| # 檢查上傳的檔案是否為圖片格式 | |
| if not file.content_type or not file.content_type.startswith("image/"): | |
| raise HTTPException(status_code=400, detail="上傳的檔案不是圖片格式。") | |
| # 讀取圖片的二進位制內容 | |
| image_bytes = await file.read() | |
| # 呼叫 AI 服務中的分類函式 | |
| food_name = classify_food_image(image_bytes) | |
| # 查詢營養資訊 | |
| nutrition_info = fetch_nutrition_data(food_name) | |
| if nutrition_info is None: | |
| raise HTTPException(status_code=404, detail=f"找不到 {food_name} 的營養資訊。") | |
| # TODO: 在下一階段,我們會在這裡加入從資料庫查詢營養資訊的邏輯 | |
| # 目前,我們先直接回傳辨識出的食物名稱 | |
| return {"food_name": food_name, "nutrition_info": nutrition_info} |