From f322015e6db8b1639108249df62abb7ef592a406 Mon Sep 17 00:00:00 2001 From: zhouwentao <1577701412@qq.com> Date: Mon, 7 Aug 2023 12:03:58 +0800 Subject: [PATCH] updates --- .../jeecg/modules/ocr/model/OcrResult2.java | 27 ++++++ .../service/impl/OcrIdentifyServiceImpl.java | 93 ++++++++++++++++++- 2 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrResult2.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrResult2.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrResult2.java new file mode 100644 index 0000000..0205537 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrResult2.java @@ -0,0 +1,27 @@ +package org.jeecg.modules.ocr.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Description 异步通知ocr识别结果 + * @Author ZhouWenTao + * @Date 2023/7/21 14:51 + */ +@Data +public class OcrResult2 { + @ApiModelProperty(value = "检索字段名称") + private String tag; + @ApiModelProperty(value = "api输入值") + private String inputText; + @ApiModelProperty(value = "ocr识别文本") + private String ocrText; + @ApiModelProperty(value = "ocr识别置信度") + private Double ocrPrecisionRate; + @ApiModelProperty(value = "图片来源") + private SourceImage sourceImage; + @ApiModelProperty(value = "失败原因") + private String failureReason; + @ApiModelProperty(value = "规则验证结果") + private Boolean ruleValidation=false; +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java index 4197974..dc26f89 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java @@ -192,7 +192,6 @@ public class OcrIdentifyServiceImpl extends ServiceImpl checkSemanticModelMap = getCheckSemanticModelMap(ocrRuleCheckVo.getConfigRuleMap(), ocrRuleCheckVo.getFieldMap(), ocrIdentifyVo.getSourceJsonObjects()); + //// + String text=null;//ocr 识别的文本, + Double probability = 0d; + //用于数据结构化的对象 + List ocrResultList = new ArrayList<>(); + + StringBuffer rMessage = new StringBuffer(); + Map fieldRightMap = new LinkedHashMap<>();//存放 字段判断正确map + //========================== + checkSemanticFor: + for (CheckSemanticModel value : checkSemanticModelMap.values()) { + String field = value.getField(); + String fieldName = value.getFieldName();//校验的字段名称 + String ruleInfo = value.getRuleInfo();//是否绝对判断 0-绝对判断,1-不绝对判断 + String inputText = value.getInputText();//校验文本 ,ocr识别的文本如果不包含该内容,则算作失败. + List fieldNameList = Arrays.asList(fieldName.split(",")); + boolean b = ArrayOUtils.containsStringList(fieldNameList, semanticResult.keySet().stream().collect(Collectors.toList())); + //查看ocr识别返回的字段名称中是否有当前这个字段名称 + if (b) { + //TODO 注意,ocr 识别返回的 字段是多个结果(数组),有一个值匹配上即为正确 + List ocrArray = new ArrayList<>(); + for (String s : fieldNameList) { + JSONArray jsonArray = semanticResult.getJSONArray(s); + if (jsonArray != null && jsonArray.size() > 0) { + ocrArray.addAll(jsonArray.toJavaList(JSONObject.class)); + } + } + if (ocrArray.size()>0) { + ocrArrayFor: for (int i = 0; i < ocrArray.size(); i++) { + JSONObject ocrItem = ocrArray.get(i); + text = ocrItem.getString("text");//ocr 识别的文本 + probability = ocrItem.getDouble("probability");//置信度 + log.info("ocrItem:"); + log.info(ocrItem.toJSONString()); + if (StringUtils.isBlank(text)) { + //ocr识别参数为空,不通过 + rMessage.append(value.getFieldName() + "参数未获取到结果
"); + mapPutIfTrue(fieldRightMap, field, false); + ocrResultAdd(ocrResultList, field, inputText, text, probability, imgPath, value.getFieldName() + "参数未获取到结果", false); + } else if ("1".equals(ruleInfo) && StringUtils.isNotBlank(text)) { + //不必校验,有值就行,通过 + fieldRightMap.put(field, true); + ocrResultAdd(ocrResultList, field, inputText, text, probability, imgPath, "", true); + } else if ("0".equals(ruleInfo)) { + //必定验证参数,必须有值且匹配 + if (StringUtils.isBlank(inputText) || text.contains(inputText)) { + fieldRightMap.put(field, true); + ocrResultAdd(ocrResultList, field, inputText, text, probability, imgPath, "", true); + } else { + rMessage.append(value.getFieldName() + "不匹配
"); + mapPutIfTrue(fieldRightMap, field, false); + ocrResultAdd(ocrResultList, field, inputText, text, probability, imgPath, value.getFieldName() + "不匹配", false); + } + } + } + }else{ + rMessage.append(value.getFieldName() + "参数未获取到结果
"); + mapPutIfTrue(fieldRightMap, field, false); + ocrResultAdd(ocrResultList, field, inputText, text, probability, imgPath, value.getFieldName() + "参数未获取到结果", false); + } + + } else { + rMessage.append(value.getFieldName() + "参数未获取到结果
"); + ocrResultAdd(ocrResultList, field, inputText, null, 0d, imgPath, value.getFieldName() + "参数未获取到结果", false); + fieldRightMap.put(field, false); + } + } + + //其中有一个字段 全部都是 失败,则该图片失败. + if (fieldRightMap != null && fieldRightMap.values().size() > 0 && !fieldRightMap.containsValue(false)) { + ocrIdentifyDetail.setStatus("0");//全部通过 + } else { + ocrIdentifyDetail.setStatus("1");//有失败的 + ocrIdentifyDetail.setMessage(rMessage.toString()); + } + ocrIdentifyDetail.setDataStructured(JSONArray.toJSONString(ocrResultList));//数据结构化 + ocrIdentifyDetailService.updateById(ocrIdentifyDetail); + } + + }*/ + + + + + //4.更新主任务状态 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); updateWrapper.eq(OcrIdentify::getId, id);