OcrClientService.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package com.qmth.ops.biz.service;
  2. import com.qmth.boot.core.ai.model.ocr.OcrType;
  3. import com.qmth.ops.biz.ai.client.OcrApiClient;
  4. import com.qmth.ops.biz.ai.client.OcrApiConfig;
  5. import com.qmth.ops.biz.ai.exception.OcrClientNotFound;
  6. import com.qmth.ops.biz.domain.OcrSupplier;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.stereotype.Service;
  10. import javax.annotation.Resource;
  11. import java.util.List;
  12. @Service
  13. public class OcrClientService {
  14. private static final Logger log = LoggerFactory.getLogger(OcrClientService.class);
  15. private OcrApiClient defaultClient;
  16. @Resource
  17. private OcrSupplierService ocrSupplierService;
  18. public synchronized void init() {
  19. //取第一个prior的为默认客户端,没有则取第一个
  20. defaultClient = null;
  21. List<OcrSupplier> list = ocrSupplierService.list();
  22. if (!list.isEmpty()) {
  23. initApiClient(list.stream().filter(OcrSupplier::getPrior).findFirst().orElse(list.get(0)));
  24. }
  25. }
  26. private void initApiClient(OcrSupplier supplier) {
  27. try {
  28. String className = OcrApiClient.class.getName().replace("OcrApiClient", supplier.getClientClass());
  29. OcrApiConfig config = new OcrApiConfig(supplier);
  30. Class<?> clientClass = Class.forName(className);
  31. OcrApiClient client = (OcrApiClient) clientClass.getConstructor(OcrApiConfig.class).newInstance(config);
  32. if (defaultClient == null) {
  33. defaultClient = client;
  34. }
  35. } catch (Exception e) {
  36. log.error("OCR api client init error, supplier={}, class={}", supplier.getName(),
  37. supplier.getClientClass());
  38. }
  39. }
  40. public String forImage(OcrType type, byte[] imageData) throws Exception {
  41. if (defaultClient == null) {
  42. throw new OcrClientNotFound(type);
  43. }
  44. return defaultClient.forImage(type, imageData);
  45. }
  46. }