Browse Source

新增ocr工具类

wangliang 2 năm trước cách đây
mục cha
commit
f2dc757dfc

+ 14 - 0
paper-library-common/pom.xml

@@ -149,5 +149,19 @@
             <groupId>net.lingala.zip4j</groupId>
             <artifactId>zip4j</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.baidu.aip</groupId>
+            <artifactId>java-sdk</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>slf4j-api</artifactId>
+                    <groupId>org.slf4j</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>slf4j-simple</artifactId>
+                    <groupId>org.slf4j</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 </project>

+ 10 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/config/DictionaryConfig.java

@@ -73,4 +73,14 @@ public class DictionaryConfig {
         return new FssLocalFileDomain();
     }
 
+    /**
+     * ocr配置
+     *
+     * @return
+     */
+    @Bean
+    @ConfigurationProperties(prefix = "ocr.config")
+    public OcrDomain ocrDomain() {
+        return new OcrDomain();
+    }
 }

+ 2 - 3
paper-library-common/src/main/java/com/qmth/paper/library/common/contant/SystemConstant.java

@@ -33,12 +33,11 @@ import java.util.stream.Collectors;
  * @Date: 2019/10/11
  */
 public class SystemConstant {
-    @Resource
-    DictionaryConfig dictionaryConfig;
-
     /**
      * 系统常量
      */
+    public static final int OCR_CONNECTION_TIMEOUT_IN_MILLIS = 2000;
+    public static final int OCR_SOCKET_TIMEOUT_IN_MILLIS = 60000;
     public static final String SYS_CONFIG_KEY_CHARSETS = "sys.txt.charset";
     public static final String SYS_PDF_SIZE_LIST = "sys.pdf.size.list";
     public static final String PDF_SIZE_LIST = "pdf.size.list";

+ 51 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/domain/OcrDomain.java

@@ -0,0 +1,51 @@
+package com.qmth.paper.library.common.domain;
+
+/**
+ * @Description: ocr前缀
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/10/12
+ */
+public class OcrDomain {
+
+    String appId;
+
+    String appKey;
+
+    String appSecret;
+
+    public OcrDomain() {
+
+    }
+
+    public OcrDomain(String appId, String appKey, String appSecret) {
+        this.appId = appId;
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+}

+ 30 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/util/GsonUtil.java

@@ -0,0 +1,30 @@
+package com.qmth.paper.library.common.util;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonParseException;
+
+import java.lang.reflect.Type;
+
+/**
+ * @Description: Json工具类
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/10/12
+ */
+public class GsonUtil {
+    private static Gson gson = new GsonBuilder().create();
+
+    public static String toJson(Object value) {
+        return gson.toJson(value);
+    }
+
+    public static <T> T fromJson(String json, Class<T> classOfT) throws JsonParseException {
+        return gson.fromJson(json, classOfT);
+    }
+
+    public static <T> T fromJson(String json, Type typeOfT) throws JsonParseException {
+        return (T) gson.fromJson(json, typeOfT);
+    }
+}

+ 114 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/util/OcrUtil.java

@@ -0,0 +1,114 @@
+package com.qmth.paper.library.common.util;
+
+import com.baidu.aip.ocr.AipOcr;
+import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.domain.OcrDomain;
+import org.json.JSONObject;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description: ocr工具
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/10/12
+ */
+@Component
+public class OcrUtil {
+
+    private OcrDomain ocrDomain;
+
+    private AipOcr client;
+
+    private HashMap<String, String> options;
+
+    @Bean
+    public OcrDomain ocrDomainEnv(OcrDomain ocrDomain) {
+        this.ocrDomain = new OcrDomain(ocrDomain.getAppId(),
+                ocrDomain.getAppKey(),
+                ocrDomain.getAppSecret());
+        client = new AipOcr(ocrDomain.getAppId(), ocrDomain.getAppKey(), ocrDomain.getAppSecret());
+        // 可选:设置网络连接参数
+        client.setConnectionTimeoutInMillis(SystemConstant.OCR_CONNECTION_TIMEOUT_IN_MILLIS);
+        client.setSocketTimeoutInMillis(SystemConstant.OCR_SOCKET_TIMEOUT_IN_MILLIS);
+        options = new HashMap<String, String>();
+        options.put("probability", "true");
+        return this.ocrDomain;
+    }
+
+    public OcrDomain getOcrDomain() {
+        return ocrDomain;
+    }
+
+    public AipOcr getClient() {
+        return client;
+    }
+
+    public Map<String, String> getOptions() {
+        return options;
+    }
+
+    /**
+     * ocr通用文字识别基础接口
+     *
+     * @param path
+     * @return
+     */
+    public JSONObject callBasicGeneral(String path) {
+        return client.basicGeneral(path, options);
+    }
+
+    /**
+     * ocr通用文字识别高精度版接口
+     *
+     * @param path
+     * @return
+     */
+    public JSONObject callBasicAccurateGeneral(String path) {
+        return client.basicAccurateGeneral(path, options);
+    }
+
+    /**
+     * ocr通用文字识别接口(含位置信息版)
+     *
+     * @param path
+     * @return
+     */
+    public JSONObject callGeneral(String path) {
+        return client.general(path, options);
+    }
+
+    /**
+     * ocr通用文字识别接口(含位置高精度版)
+     *
+     * @param path
+     * @return
+     */
+    public JSONObject callAccurateGeneral(String path) {
+        return client.accurateGeneral(path, options);
+    }
+
+    /**
+     * ocr手写文字识别接口
+     *
+     * @param path
+     * @return
+     */
+    public JSONObject callHandwriting(String path) {
+        return client.handwriting(path, options);
+    }
+
+    /**
+     * ocr手写文字识别接口
+     *
+     * @param path
+     * @return
+     */
+    public JSONObject callDocAnalysis(String path) {
+        return client.docAnalysis(path, options);
+    }
+}

+ 6 - 1
paper-library/src/main/resources/application-dev.properties

@@ -14,7 +14,7 @@ db.host=localhost
 db.port=3306
 db.name=paper-library-v1.0.0
 db.username=root
-db.password=root
+db.password=123456789
 
 #redis\u6570\u636E\u6E90\u914D\u7F6E
 com.qmth.redis.host=${db.host}
@@ -96,3 +96,8 @@ sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
 sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
 sms.config.aliyunSMSTplCode=SMS_147416565
 sms.config.aliyunSMSAuditPassCode=SMS_216425141
+
+#ocr\u8BC6\u522B
+ocr.config.appId=27869327
+ocr.config.appKey=0EatsWDMu4Ts4Q4I9eYZdgV7
+ocr.config.appSecret=rlEolf9jVqS9V0tsi6x4l9Eu4ATKnfYv

+ 6 - 0
pom.xml

@@ -48,6 +48,7 @@
         <commons-text.version>1.9</commons-text.version>
         <junit.version>4.13</junit.version>
         <zip4j.version>1.3.3</zip4j.version>
+        <baidu.ocr.version>4.16.11</baidu.ocr.version>
     </properties>
 
     <dependencyManagement>
@@ -275,6 +276,11 @@
                 <artifactId>zip4j</artifactId>
                 <version>${zip4j.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.baidu.aip</groupId>
+                <artifactId>java-sdk</artifactId>
+                <version>${baidu.ocr.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>