card_service.py 1.2 KB

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