# app/services/card_service.py import cv2 import numpy as np from ..core.model_loader import get_predictor from app.core.logger import get_logger logger = get_logger(__name__) class CardInferenceService: def predict(self, inference_type: str, image_bytes: bytes) -> dict: """ 执行卡片识别推理。 Args: inference_type: 模型类型 (e.g., 'outer_box'). image_bytes: 从API请求中获得的原始图像字节。 Returns: 一个包含推理结果的字典。 """ # 1. 获取对应的预测器实例 predictor = get_predictor(inference_type) # 2. 将字节流解码为OpenCV图像 # 将字节数据转换为numpy数组 np_arr = np.frombuffer(image_bytes, np.uint8) # 从numpy数组中解码图像 img_bgr = cv2.imdecode(np_arr, cv2.IMREAD_COLOR) if img_bgr is None: raise ValueError("无法解码图像,请确保上传的是有效的图片格式 (JPG, PNG, etc.)") # 3. 调用我们新加的 predict_from_image 方法进行推理 result = predictor.predict_from_image(img_bgr) # 4. 返回JSON兼容的结果 return result # 创建一个单例服务 card_service = CardInferenceService()