Explorar o código

新增阿里云OCR识别逻辑

Woody hai 3 semanas
pai
achega
098eaf5850

+ 6 - 0
framework-aliyun/pom.xml

@@ -15,6 +15,7 @@
     <version>1.0.0-RELEASE</version>
 
     <properties>
+        <aliyun-ocr.version>3.1.3</aliyun-ocr.version>
         <aliyun-green.version>2.20.0</aliyun-green.version>
         <aliyun-captcha.version>1.1.2</aliyun-captcha.version>
         <aliyun-dypnsapi.version>1.2.1</aliyun-dypnsapi.version>
@@ -27,6 +28,11 @@
             <artifactId>framework-base</artifactId>
             <version>${framework-base.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>ocr_api20210707</artifactId>
+            <version>${aliyun-ocr.version}</version>
+        </dependency>
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>green20220302</artifactId>

+ 9 - 0
framework-aliyun/src/main/java/com/chelvc/framework/aliyun/AliyunHandler.java

@@ -1,5 +1,6 @@
 package com.chelvc.framework.aliyun;
 
+import com.aliyun.ocr_api20210707.models.RecognizeGeneralRequest;
 import com.chelvc.framework.common.model.Risk;
 
 /**
@@ -40,4 +41,12 @@ public interface AliyunHandler {
      * @return true/false
      */
     boolean verifyCaptcha(String verification);
+
+    /**
+     * OCR通用文字识别
+     *
+     * @param request 请求对象
+     * @return 文本内容
+     */
+    String recognizeGeneral(RecognizeGeneralRequest request);
 }

+ 27 - 1
framework-aliyun/src/main/java/com/chelvc/framework/aliyun/DefaultAliyunHandler.java

@@ -12,6 +12,8 @@ import com.aliyun.green20220302.models.ImageModerationRequest;
 import com.aliyun.green20220302.models.ImageModerationResponse;
 import com.aliyun.green20220302.models.TextModerationRequest;
 import com.aliyun.green20220302.models.TextModerationResponse;
+import com.aliyun.ocr_api20210707.models.RecognizeGeneralRequest;
+import com.aliyun.ocr_api20210707.models.RecognizeGeneralResponse;
 import com.aliyun.teaopenapi.models.Config;
 import com.aliyun.teautil.models.RuntimeOptions;
 import com.chelvc.framework.aliyun.config.AliyunProperties;
@@ -32,6 +34,7 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class DefaultAliyunHandler implements AliyunHandler {
     private final String scene;
+    private final com.aliyun.ocr_api20210707.Client ocr;
     private final com.aliyun.green20220302.Client green;
     private final com.aliyun.captcha20230305.Client captcha;
     private final com.aliyun.dypnsapi20170525.Client dypnsapi;
@@ -43,8 +46,13 @@ public class DefaultAliyunHandler implements AliyunHandler {
         this.runtime.connectTimeout = 10000;
 
         try {
-            // 初始化green客户端
+            //初始化ocr客户端
             Config config = this.getConfig(properties);
+            config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
+            this.ocr = new com.aliyun.ocr_api20210707.Client(config);
+
+            // 初始化green客户端
+            config = this.getConfig(properties);
             config.endpoint = "green-cip.cn-shanghai.aliyuncs.com";
             config.setRegionId("cn-shanghai");
             config.setReadTimeout(6000);
@@ -172,4 +180,22 @@ public class DefaultAliyunHandler implements AliyunHandler {
         }
         return true;
     }
+
+    @Override
+    public String recognizeGeneral(@NonNull RecognizeGeneralRequest request) {
+        RecognizeGeneralResponse response;
+        try {
+            response = this.ocr.recognizeGeneralWithOptions(request, this.runtime);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        if (response == null || response.body == null) {
+            throw new RuntimeException("Invalid aliyun response");
+        }
+        if (StringUtils.notEmpty(response.body.code)) {
+            log.error("Aliyun general recognize failed: {}, {}", response.body.code, response.body.message);
+            return null;
+        }
+        return response.body.data;
+    }
 }