card_service.py 1.3 KB

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