score_inference.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from fastapi import APIRouter, File, UploadFile, Depends, HTTPException
  2. from fastapi.responses import FileResponse, JSONResponse
  3. from fastapi.concurrency import run_in_threadpool
  4. from enum import Enum
  5. from ..core.config import settings
  6. from app.services.score_service import ScoreService
  7. from app.core.logger import logger
  8. import json
  9. router = APIRouter()
  10. score_names = settings.SCORE_TYPE
  11. ScoreType = Enum("InferenceType", {name: name for name in score_names})
  12. @router.post("/score_inference", description="输入卡片类型(正反面, 缺陷类型), 是否为反射卡")
  13. async def card_model_inference(
  14. score_type: ScoreType,
  15. is_reflect_card: bool = False,
  16. file: UploadFile = File(...)
  17. ):
  18. """
  19. 接收一张卡片图片,使用指定类型的模型进行推理,并返回JSON结果。
  20. - **inference_type**: 要使用的模型类型(从下拉列表中选择)。
  21. - **file**: 要上传的图片文件。
  22. """
  23. service = ScoreService()
  24. image_bytes = await file.read()
  25. try:
  26. json_result = await run_in_threadpool(
  27. service.score_inference,
  28. score_type=score_type.value,
  29. is_reflect_card=is_reflect_card,
  30. image_bytes=image_bytes
  31. )
  32. return json_result
  33. except ValueError as e:
  34. raise HTTPException(status_code=400, detail=str(e))
  35. except Exception as e:
  36. raise HTTPException(status_code=500, detail=f"服务器内部错误: {e}")