score_inference.py 1.5 KB

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