| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # 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()
|