From 81edf77e84dda7aacaff01f89fa5a7e02b58a867 Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Tue, 14 May 2024 14:19:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=8A=80=E6=9C=AF=E8=AF=84?= =?UTF-8?q?=E5=AE=A1=E5=A7=94=E5=91=98=E4=BC=9A=E6=84=8F=E8=A7=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=94=99=E8=AF=AF=E7=A0=81=E7=9A=84=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OCRPython/configs/basic_config.py | 21 ++ OCRPython/extractor/identitycard_extractor.py | 186 +++++++----------- OCRPython/maincopy.py | 90 +++++---- OCRTool/pom.xml | 10 +- .../java/com/bonus/core/ErrorHandler.java | 39 ++++ .../main/java/com/bonus/core/ErrorInfo.java | 32 +++ .../bonus/core/IdentifyRecognitionParams.java | 36 ++-- .../java/com/bonus/core/OCRRecognition.java | 38 ++-- 8 files changed, 264 insertions(+), 188 deletions(-) create mode 100644 OCRTool/src/main/java/com/bonus/core/ErrorHandler.java create mode 100644 OCRTool/src/main/java/com/bonus/core/ErrorInfo.java diff --git a/OCRPython/configs/basic_config.py b/OCRPython/configs/basic_config.py index a3dcd93..11385a9 100644 --- a/OCRPython/configs/basic_config.py +++ b/OCRPython/configs/basic_config.py @@ -2,6 +2,24 @@ import logging import os from logging.handlers import RotatingFileHandler +RECOGNITION_INFO_COMPLETE = 20000 +RECOGNITION_INFO_INCOMPLETE = 20001 +LOCAL_PATH_NOT_EXIST = 20002 +BASE64_DATA_INCOMPLETE = 20003 +NO_TEXT_RECOGNIZED = 20004 +OCR_RECOGNIZE_OTHER_EXCEPTION = 20005 +RECOGNITION_INFO_PARSE_OTHER_EXCEPTION = 20006 + + +error_codes = { + RECOGNITION_INFO_COMPLETE: "身份证信息完整", + RECOGNITION_INFO_INCOMPLETE: "身份证信息不完整", + LOCAL_PATH_NOT_EXIST: "识别本地图片路径不存在", + BASE64_DATA_INCOMPLETE: "图片Base64编码异常", + NO_TEXT_RECOGNIZED: "识别本地图片路径存在,但没有识别出文字", + OCR_RECOGNIZE_OTHER_EXCEPTION: "OCR识别身份证其他异常", + RECOGNITION_INFO_PARSE_OTHER_EXCEPTION: "身份证信息解析其他异常", +} # 是否显示详细日志 log_verbose = True # 通常情况下不需要更改以下内容 @@ -32,3 +50,6 @@ file_handler.setFormatter(formatter) # 获取日志记录器并添加文件处理程序 logger.addHandler(file_handler) + + +# print(f"error_codes[0].value:{error_codes['200']}") \ No newline at end of file diff --git a/OCRPython/extractor/identitycard_extractor.py b/OCRPython/extractor/identitycard_extractor.py index 592fecb..31a6de8 100644 --- a/OCRPython/extractor/identitycard_extractor.py +++ b/OCRPython/extractor/identitycard_extractor.py @@ -1,78 +1,25 @@ import re from extractor import Extractor -from configs.basic_config import logger - +from configs.basic_config import * class IdentityCardExtractor(Extractor): - def extract_text(self, text:str)->dict: - try: - patterns = { - "issuingAuthority": r"签发机关\n(.+?)\n", - "validTime": r"有效期限\n(.+?)\n", - "name": r"(\S+)\n(?:男|女)", - "gender": r"(\S+)民族", - "ethnicity": r"民族(\S+)", - "dateOfBirth": r"(\d+年\d+月\d+日)", - "address": r"(住址|佳址)\s*(.*?)公民身份号码", - "idNumber": r"(\d{18}|\d{17}[Xx])" - } - tempText = self.remove_blank_lines(text) - # 提取信息 - info = {} - for key, pattern in patterns.items(): - match = re.search(pattern, tempText,re.DOTALL) - if match: - if "address" == key: - tempStr = match.group(2).strip() - else: - tempStr = match.group(1).strip() - info[key] = tempStr.replace("\n", "") - return info - except Exception as e: - print(e) - logger.error(e) - return {} - - # def extract_textbyPaddle(self, text:str)->dict: - # try: - # patterns = { - # "issuingAuthority": r"签发机关\n*(.+?)\n", - # "validTime": r"有效期限\n*(.+?)\n", - # "name": r"姓名(.*?)\n", ##### - # "gender": r"(\S)民族", - # "ethnicity": r"民族(\S+)", - # "dateOfBirth": r"(\d+年\d+月\d+日)", - # "address": r"(住址|佳址)\s*(.*?)公民身份号码", - # "idNumber": r"(\d{18}|\d{17}[Xx])" - # } - # - # tempText = self.remove_blank_lines(text) - # # 提取信息 - # info = {} - # for key, pattern in patterns.items(): - # match = re.search(pattern, tempText,re.DOTALL) - # if match: - # if "address" == key: - # tempStr = match.group(2).strip() - # else: - # tempStr = match.group(1).strip() - # info[key] = tempStr.replace("\n", "") - # return info - # except Exception as e: - # print(e) - # logger.error(e) - # return {} - def extract_textbyPaddle(self, text:str)->dict: + data = { + "issuingAuthority": "", + "validTime": "", + "name": "", + "gender": "", + "ethnicity": "汉", + "dateOfBirth": "", + "address": "", + "idNumber": "", + } + + result = { + "code": RECOGNITION_INFO_COMPLETE, + "msg": error_codes[RECOGNITION_INFO_COMPLETE], + "data": data + } try: - result = { - "issuingAuthority": "", - "validTime": "", - "name": "", - "gender": "", - "ethnicity": "汉", - "dateOfBirth": "", - "address": "", - "idNumber": ""} # 提取签发机关 issuing_authority = re.search(r"(签发机关|签发机美)\n*(.+?)\n", text, re.DOTALL) if issuing_authority: @@ -80,14 +27,14 @@ class IdentityCardExtractor(Extractor): if "公安局" not in tempAuthority: issuing_authority = re.search(r"(\S+)\n*(签发机关|签发机美)\n", text, re.DOTALL) if issuing_authority: - result["issuingAuthority"] = issuing_authority.group(1).strip() + data["issuingAuthority"] = issuing_authority.group(1).strip() else: - result["issuingAuthority"] = issuing_authority.group(2).strip() + data["issuingAuthority"] = issuing_authority.group(2).strip() # 提取有效期限 valid_time = re.search(r"有效期限\n*(\d{4}\.\d{2}\.\d{2}-\S+)", text, re.DOTALL) if valid_time: - result["validTime"] = valid_time.group(1).strip() + data["validTime"] = valid_time.group(1).strip() # 提取姓名 name = re.search(r"姓名\s*(.*?)\n", text,re.DOTALL) @@ -95,78 +42,85 @@ class IdentityCardExtractor(Extractor): tempName = name.group(1).strip() if tempName in "性别男" or tempName in "性别女" or "性别男" in tempName or "性别女" in tempName or tempName.isupper() or tempName.islower(): name = re.search(r"(\S+)\s*姓名", text, re.DOTALL) - result["name"] = name.group(1).strip() + data["name"] = name.group(1).strip() else: - result["name"] = name.group(1).strip() + data["name"] = name.group(1).strip() else: name = re.search(r"米名(\S*)址\s*(\S+)", text, re.DOTALL) if name: - result["name"] = name.group(2).strip() + data["name"] = name.group(2).strip() else: name = re.search(r"名\s*(\S+)\s*姓\s*", text, re.DOTALL) if name: - result["name"] = name.group(1).strip() + data["name"] = name.group(1).strip() else: name = re.search(r"(\S+)\s*(男|女|性别)", text, re.DOTALL) if name: - result["name"] = name.group(1).strip() - tempName = result["name"] + data["name"] = name.group(1).strip() + tempName = data["name"] if tempName.startswith("名"): - result["name"] = tempName[len("名"):] + data["name"] = tempName[len("名"):] # 提取民族 ethnicity = re.search(r"民\s*(族|旅)\s*(\S+)", text, re.DOTALL) if ethnicity: - result["ethnicity"] = ethnicity.group(2).strip() + data["ethnicity"] = ethnicity.group(2).strip() # 提取地址 address = re.search(r"(住址|佳址)(.*?)公民身份号码", text, re.DOTALL) if address: - result["address"] = address.group(2).strip().replace("\n", "") + data["address"] = address.group(2).strip().replace("\n", "") else: address = re.search(r"(\S+省)(.*?)公民身份号码", text, re.DOTALL) if address: - result["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") + data["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") else: address = re.search(r"(\S+市)(.*?)公民身份号码", text, re.DOTALL) if address: - result["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") + data["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") else: address = re.search(r"(\S+县)(.*?)公民身份号码", text, re.DOTALL) if address: - result["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") - if result["address"]: - result["address"] = re.sub(r'[A-Z]', '', result["address"]) + data["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") + if data["address"]: + data["address"] = re.sub(r'[A-Z]', '', data["address"]) pattern = r"\d+[号组室房]" # 匹配数字+号、数字+组、数字+室、数字+房 的最后一个匹配项 - tempAddress = result["address"] + tempAddress = data["address"] matchAddress = None for m in re.finditer(pattern, tempAddress): matchAddress = m if matchAddress: index = matchAddress.end() # 获取匹配项的结束位置 - result["address"] = tempAddress[:index] # 截取匹配项及之前的字符串 + data["address"] = tempAddress[:index] # 截取匹配项及之前的字符串 #去掉地址后面的 else: pattern = r"\d{18,}$" # 匹配1位以上的数字结尾 - result["address"] = re.sub(pattern, "", result["address"]) + data["address"] = re.sub(pattern, "", data["address"]) # 提取身份证号码 id_number = re.search(r"([123456]\d{17}|[123456]\d{16}[Xx])", text, re.DOTALL) if id_number: - result["idNumber"] = id_number.group(1).strip() + data["idNumber"] = id_number.group(1).strip() - if result["idNumber"]: + if data["idNumber"]: # 提取出生日期 - result["dateOfBirth"] = self.extract_birthday_from_id(result["idNumber"]) + data["dateOfBirth"] = self.extract_birthday_from_id(data["idNumber"]) # 提取性别 - result["gender"] = self.get_gender_from_id(result["idNumber"]) + data["gender"] = self.get_gender_from_id(data["idNumber"]) + + for key, value in data.items(): + if not value or len(value) == 0: + result["code"] = RECOGNITION_INFO_INCOMPLETE + result["msg"] = error_codes[RECOGNITION_INFO_INCOMPLETE] return result + except Exception as e: - print(e) + result["code"] = RECOGNITION_INFO_PARSE_OTHER_EXCEPTION + result["msg"] = error_codes[RECOGNITION_INFO_PARSE_OTHER_EXCEPTION] logger.error(e) - return {} + return result class InvoiceExtractor(Extractor): def extract_text(self,text:str)->dict: @@ -294,25 +248,25 @@ class IdentityCardExtractor(Extractor): # 公民身份号码 # 513401197807087411 # """ -# text = """中华人民共和国 -# 居民身份证 -# 签发机关 -# 木里县公安局 -# 有效期限 -# 2020.03.16-2025.03.16 -# 名 -# 蒋子古 -# 姓 -# 男 -# 民族彝 -# 出生 -# 2005年1月4日 -# 住址 -# 四川省木里藏族自治县耗 -# 牛坪乡泥珠村5组29号 -# 公民身份号码 -# 513422200501044415 -# """ +text = """中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2020.03.16-2025.03.16 +名 +蒋子古 +姓 +男 +民族彝 +出生 +2005年1月4日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村5组29号 +公民身份号码 +513422200501044415 +""" # # text = """姓名苏龙格德·胡尔查巴特尔 # 性别男民族蒙古 @@ -364,7 +318,7 @@ class IdentityCardExtractor(Extractor): # 林村10组 # 8430124197005132917 # 公民身份号码""" -# + # text = """中华人民共和国 # 居民身份证 # 签发机关醴陵市公安局 diff --git a/OCRPython/maincopy.py b/OCRPython/maincopy.py index b7dd4cf..6698f40 100644 --- a/OCRPython/maincopy.py +++ b/OCRPython/maincopy.py @@ -1,95 +1,107 @@ # -*- coding: utf-8 -*- import sys import io -import os from paddleocr import PaddleOCR import time -from configs.basic_config import logger +from configs.basic_config import * from extractor.identitycard_extractor import IdentityCardExtractor import base64 import json sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') -def extractIdCardInfo(type:int, filePath1: str, filePath2: str)->str: - if (0 == type): +def extractIdCardInfo(type:int=0, filePath1: str= "", filePath2: str= "")->str: + if 0 == type: return extractIdCardInfoByPath(filePath1, filePath2) - elif (1 == type): + elif 1 == type: return extractIdCardInfoByBase64Data(filePath1,filePath2) else: pass -def extractIdCardInfoByPath(filePath1: str, filePath2: str)->str: +def extractIdCardInfoByPath(filePath1: str = "", filePath2: str = "")->str: ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory text = "" start_time = time.time() # 记录结束时间 - jsonString = "" - try: - if os.path.exists(filePath1): - result = ocr.ocr(filePath1, cls=False) - for idx in range(len(result)): - res = result[idx] - for line in res: - text += (line[1][0] + '\n') - else: - logger.error(f"{filePath1} doesn't exist") + finalResult = { + "code": LOCAL_PATH_NOT_EXIST, + "msg": error_codes[LOCAL_PATH_NOT_EXIST], - if os.path.exists(filePath2): - result = ocr.ocr(filePath2, cls=False) - for idx in range(len(result)): - res = result[idx] - for line in res: - text += (line[1][0] + '\n') - else: - logger.error(f"{filePath2} doesn't exist") + } + try: + if len(filePath1) > 0: + if os.path.exists(filePath1): + result = ocr.ocr(filePath1, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + else: + logger.error(f"{filePath1} doesn't exist,error information:{finalResult}") + return json.dumps(finalResult, ensure_ascii=False) + + if len(filePath2) > 0: + if os.path.exists(filePath2): + result = ocr.ocr(filePath2, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + else: + logger.error(f"{filePath2} doesn't exist,error information:{finalResult}") + return json.dumps(finalResult, ensure_ascii=False) except Exception as e: - logger.error(e) - print(e) + finalResult["code"] = OCR_RECOGNIZE_OTHER_EXCEPTION + finalResult["msg"] = error_codes[OCR_RECOGNIZE_OTHER_EXCEPTION] + logger.error(f"{e} ,error information:{finalResult}") + return json.dumps(finalResult, ensure_ascii=False) if 0 != len(text): - logger.info(f"text:{text}") extractor = IdentityCardExtractor() tempdict = extractor.extract_textbyPaddle(text) jsonString = json.dumps(tempdict, ensure_ascii=False) end_time = time.time() # 记录结束时间 execution_time = end_time - start_time # 计算执行时间 logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + return jsonString else: - logger.error(f"{filePath1},{filePath2} can't be recognized") - return jsonString + finalResult["code"] = NO_TEXT_RECOGNIZED + finalResult["msg"] = error_codes[NO_TEXT_RECOGNIZED] + logger.error(f"{filePath1},{filePath2} can't be recognized,error information:{finalResult}") + return json.dumps(finalResult, ensure_ascii=False) def extractIdCardInfoByBase64Data(base64data1:str, base64Data2: str)->str: + finalResult = { + "code": BASE64_DATA_INCOMPLETE, + "msg": error_codes[BASE64_DATA_INCOMPLETE], + } logger.info(f"extractIdCardInfoByBase64Data") start_time = time.time() # 记录结束时间 jsonString = "" try: - if 0!=len(base64data1): - logger.info(f"not base64data1.empty()") + if 0 != len(base64data1): image_data1 = base64.b64decode(base64data1) with open("file1.png", "wb") as file: file.write(image_data1) - if 0!=len(base64Data2): - logger.info(f"not base64Data2.empty()") + if 0 != len(base64Data2): image_data2 = base64.b64decode(base64Data2) with open("file2.png", "wb") as file: file.write(image_data2) if os.path.exists("file1.png") and os.path.exists("file2.png"): - logger.info(f"file1.png and file2.png exist") jsonString = extractIdCardInfoByPath("file1.png","file2.png") os.remove("file1.png") os.remove("file2.png") elif os.path.exists("file1.png"): - logger.info(f"file1.png exist") jsonString = extractIdCardInfoByPath("file1.png","") os.remove("file1.png") elif os.path.exists("file2.png"): - logger.info(f"file2.png exist") jsonString = extractIdCardInfoByPath("file2.png","") os.remove("file2.png") except Exception as e: logger.error(e) + logger.error(f"{e},error information:{finalResult}") + return json.dumps(finalResult, ensure_ascii=False) end_time = time.time() # 记录结束时间 execution_time = end_time - start_time # 计算执行时间 @@ -100,7 +112,11 @@ def extractIdCardInfoByBase64Data(base64data1:str, base64Data2: str)->str: # base64_image_string = base64.b64encode(image_file.read()).decode('utf-8') # # jsonString = extractIdCardInfoByBase64Data(base64_image_string,"") -# jsonString = extractIdCardInfoByBase64Data("/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg","/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg") +#jsonString = extractIdCardInfoByPath("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +#jsonString = extractIdCardInfoByPath("./images/bf4343cfb5806c77ae21c56a8c35f474.jpeg") +#print(jsonString) + +# jsonString = extractIdCardInfoByPath("/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg","/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg") # print(jsonString) # # # jsonString = extractIdCardInfoByPath("./images/han.jpg","") diff --git a/OCRTool/pom.xml b/OCRTool/pom.xml index 9debe2c..ba0219a 100644 --- a/OCRTool/pom.xml +++ b/OCRTool/pom.xml @@ -6,7 +6,7 @@ com.bonus.core OCRTool - 1.0-SNAPSHOT + 1.0 jar @@ -34,6 +34,12 @@ org.springframework.boot spring-boot-starter-web + + + com.google.code.gson + gson + 2.8.6 + @@ -56,7 +62,7 @@ maven-central BonusMavenRepo - http://192.168.0.56:8081/repository/maven-public/ + http://192.168.0.56:8081/repository/maven-central/ diff --git a/OCRTool/src/main/java/com/bonus/core/ErrorHandler.java b/OCRTool/src/main/java/com/bonus/core/ErrorHandler.java new file mode 100644 index 0000000..b3ecd19 --- /dev/null +++ b/OCRTool/src/main/java/com/bonus/core/ErrorHandler.java @@ -0,0 +1,39 @@ +package com.bonus.core; + +/** + * @author wangvivi + */ + +import com.google.gson.Gson; + +public class ErrorHandler { + public static final int PYTHON_INTERPRETER_NO_EXIST = 30001; + public static final int PYTHON_SCRIPT_NO_EXIST = 30002; + public static final int PYTHON_PROCESS_START_ERROR = 30003; + public static final int PYTHON_SCRIPT_EXECUTE_ERROR = 30004; + public static final int PYTHON_EXECUTE_OTHER_ERROR = 30005; + public static final int JAVA_CALL_PYTHON_UNKWON_ERROR = 30006; + + public static String getErrorInfo(int errorCode) { + switch (errorCode) { + case PYTHON_INTERPRETER_NO_EXIST: + return getInternalErrorInfo(errorCode, "python解释器文件不存在"); + case PYTHON_SCRIPT_NO_EXIST: + return getInternalErrorInfo(errorCode, "python脚本不存在"); + case PYTHON_PROCESS_START_ERROR: + return getInternalErrorInfo(errorCode, "启动python进程报错"); + case PYTHON_SCRIPT_EXECUTE_ERROR: + return getInternalErrorInfo(errorCode, "python脚本执行异常"); + case PYTHON_EXECUTE_OTHER_ERROR: + return getInternalErrorInfo(errorCode, "python脚本执行其他错误"); + default: + return getInternalErrorInfo(JAVA_CALL_PYTHON_UNKWON_ERROR, "未知错误"); + } + } + + private static String getInternalErrorInfo(int errorCode, String errorMsg){ + ErrorInfo errorInfo = new ErrorInfo(errorCode, errorMsg); + Gson gson = new Gson(); + return gson.toJson(errorInfo); + } +} diff --git a/OCRTool/src/main/java/com/bonus/core/ErrorInfo.java b/OCRTool/src/main/java/com/bonus/core/ErrorInfo.java new file mode 100644 index 0000000..3800ac3 --- /dev/null +++ b/OCRTool/src/main/java/com/bonus/core/ErrorInfo.java @@ -0,0 +1,32 @@ +package com.bonus.core; + + +/** + * @author wangvivi + */ +public class ErrorInfo { + private int code; + private String msg; + + public ErrorInfo(int errorCode, String errorMessage) { + this.code = errorCode; + this.msg = errorMessage; + } + + public String getMsg() { + return msg; + } + + public int getCode() { + return code; + } + + public void setMsg(String errormsg) { + this.msg = errormsg; + } + + public void setMsg(int code) { + this.code = code; + } +} + diff --git a/OCRTool/src/main/java/com/bonus/core/IdentifyRecognitionParams.java b/OCRTool/src/main/java/com/bonus/core/IdentifyRecognitionParams.java index dc42b3a..f23a19b 100644 --- a/OCRTool/src/main/java/com/bonus/core/IdentifyRecognitionParams.java +++ b/OCRTool/src/main/java/com/bonus/core/IdentifyRecognitionParams.java @@ -2,24 +2,9 @@ package com.bonus.core; public class IdentifyRecognitionParams { private RecognitionType type; - private String recognitionData1=""; - private String recognitionData2=""; + private String recognitionFrontData = ""; + private String recognitionBackData = ""; - public String getRecognitionData1() { - return recognitionData1; - } - - public void setRecognitionData1(String recognitionData1) { - this.recognitionData1 = recognitionData1; - } - - public String getRecognitionData2() { - return recognitionData2; - } - - public void setRecognitionData2(String recognitionData2) { - this.recognitionData2 = recognitionData2; - } public int getType() { return type.ordinal(); @@ -29,6 +14,23 @@ public class IdentifyRecognitionParams { this.type = type; } + public String getRecognitionFrontData() { + return this.recognitionFrontData; + } + + public void setRecognitionFrontData(String recognitionFrontData) { + this.recognitionFrontData = recognitionFrontData; + } + + public String getRecognitionBackData() { + return this.recognitionBackData; + } + + public void setRecognitionBackData(String recognitionBackData) { + this.recognitionBackData = recognitionBackData; + } + + // Enum for different recognition types public enum RecognitionType { //参数带入的是图片路径 diff --git a/OCRTool/src/main/java/com/bonus/core/OCRRecognition.java b/OCRTool/src/main/java/com/bonus/core/OCRRecognition.java index fb6d719..b127bc6 100644 --- a/OCRTool/src/main/java/com/bonus/core/OCRRecognition.java +++ b/OCRTool/src/main/java/com/bonus/core/OCRRecognition.java @@ -3,10 +3,7 @@ package com.bonus.core; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; +import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -35,28 +32,35 @@ public class OCRRecognition { logger.info(pythonEnv); logger.info(scriptEnv); logger.info("开始打印从请求里带过来的参数:"); - logger.info(String.valueOf(recognitionParams.getType())); - logger.info("参数1的string 是:"); - logger.info(recognitionParams.getRecognitionData1()); - logger.info("参数2的string 是:"); - logger.info(recognitionParams.getRecognitionData2()); - //*, recognitionParams.getRecognitionData1(), recognitionParams.getRecognitionData2()*/ + String typeStr = Integer.toString(recognitionParams.getType()); + logger.info(typeStr); + File file = new File(pythonEnv); + if (!file.exists()) { + logger.info("pythonEnv不存在"); + return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_INTERPRETER_NO_EXIST); + } + file = new File(scriptEnv); + if (!file.exists()) { + logger.info("scriptEnv 不存在"); + return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_SCRIPT_NO_EXIST); + } + String[] str = new String[]{pythonEnv,scriptEnv, String.valueOf(recognitionParams.getType())}; Runtime runtime = Runtime.getRuntime(); if (runtime == null) { - System.out.println("runtime == null"); - return ""; + logger.info("runtime == null"); + return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_PROCESS_START_ERROR); } proc = runtime.exec(str); logger.info("proc = runtime.exec(str)"); OutputStream outputStream = proc.getOutputStream(); - if (!recognitionParams.getRecognitionData1().isEmpty()) { - byte[] input = recognitionParams.getRecognitionData1().getBytes(StandardCharsets.UTF_8); + if (!recognitionParams.getRecognitionFrontData().isEmpty()) { + byte[] input = recognitionParams.getRecognitionFrontData().getBytes(StandardCharsets.UTF_8); passParameter(outputStream, input); } - if (!recognitionParams.getRecognitionData2().isEmpty()) { + if (!recognitionParams.getRecognitionBackData().isEmpty()) { outputStream.write(System.lineSeparator().getBytes()); - byte[] input = recognitionParams.getRecognitionData2().getBytes(StandardCharsets.UTF_8); + byte[] input = recognitionParams.getRecognitionBackData().getBytes(StandardCharsets.UTF_8); passParameter(outputStream, input); } outputStream.flush(); @@ -72,7 +76,9 @@ public class OCRRecognition { proc.waitFor(); in.close(); } catch (Exception e) { + Thread.currentThread().interrupt(); logger.error(e.getMessage()); + return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_EXECUTE_OTHER_ERROR); } if (!stringList.isEmpty()) { lastElement = stringList.get(stringList.size() - 1);