from fastapi import APIRouter, File, UploadFile, Depends, HTTPException from fastapi.responses import FileResponse, JSONResponse from fastapi.concurrency import run_in_threadpool from enum import Enum from ..core.config import settings from app.services.score_service import ScoreService from app.core.logger import logger import json router = APIRouter() score_names = settings.SCORE_TYPE ScoreType = Enum("InferenceType", {name: name for name in score_names}) @router.post("/score_inference", description="输入卡片类型(正反面, 缺陷类型), 是否为反射卡") async def card_model_inference( score_type: ScoreType, is_reflect_card: bool = False, file: UploadFile = File(...) ): """ 接收一张卡片图片,使用指定类型的模型进行推理,并返回JSON结果。 - **inference_type**: 要使用的模型类型(从下拉列表中选择)。 - **file**: 要上传的图片文件。 """ service = ScoreService() image_bytes = await file.read() try: json_result = await run_in_threadpool( service.score_inference, score_type=score_type.value, is_reflect_card=is_reflect_card, image_bytes=image_bytes ) return json_result except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail=f"服务器内部错误: {e}")