| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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
- import json
- from app.core.logger import get_logger
- logger = get_logger(__name__)
- 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}")
|