public static OcrLicenseVo parseOcrLicense(OcrResultVo item) {int[][][] dtPolyList = new int[9][2][2];for (int i = 0; i < item.getRecTexts().size(); i++) {String value = StringUtils.trimToEmpty(item.getRecTexts().get(i));if(StringUtils.anyContains(BREAK_NAME, value)){break;}if(StringUtils.isBlank(value) && StringUtils.anyContains(CONTINUE_NAME, value)){continue;}short idx;if(StringUtils.startsWith(value, "称")){idx = orgNameIndex;int[][] dtPoly = null;if(StringUtils.length(value) > 1){item.getRecTexts().set(i, StringUtils.substring(value, 1));dtPoly = item.getDtPolys().get(i-1);} else {dtPoly = item.getDtPolys().get(i);}dtPolyList[idx] = dtPoly;}else if(StringUtils.startsWith(value, "注册资本")){idx = capitalIndex;if(StringUtils.length(value) > 4){item.getRecTexts().set(i, StringUtils.substring(value, 4));}int[][] dtPoly = item.getDtPolys().get(i);dtPolyList[idx] = dtPoly;}else if(StringUtils.startsWith(value, "成立日期")){idx = establishDateIndex;int[][] dtPoly = item.getDtPolys().get(i);if(StringUtils.length(value) > 4){item.getRecTexts().set(i, StringUtils.substring(value, 4));}dtPolyList[idx] = dtPoly;} else if(StringUtils.startsWith(value, "营业期限")){idx = termIndex;int[][] dtPoly = item.getDtPolys().get(i);if(StringUtils.length(value) > 4){item.getRecTexts().set(i, StringUtils.substring(value, 4));}dtPolyList[idx] = dtPoly;} else if(StringUtils.startsWith(value, "法定代表人")){idx = legalPersonIndex;int[][] dtPoly = item.getDtPolys().get(i);if(StringUtils.length(value) > 5){item.getRecTexts().set(i, StringUtils.substring(value, 5));}dtPolyList[idx] = dtPoly;} else if(StringUtils.startsWith(value, "定代表人")){idx = legalPersonIndex;int[][] dtPoly = item.getDtPolys().get(i);if(StringUtils.length(value) > 4){item.getRecTexts().set(i, StringUtils.substring(value, 4));}dtPolyList[idx] = dtPoly;} else if(StringUtils.startsWith(value, "经营范围")){idx = scopeIndex;int[][] dtPoly = item.getDtPolys().get(i);if(StringUtils.length(value) > 4){item.getRecTexts().set(i, StringUtils.substring(value, 4));}dtPolyList[idx] = dtPoly;} else if(StringUtils.startsWith(value, "所")){idx = addressIndex;int[][] dtPoly = null;if(StringUtils.length(value) > 1){item.getRecTexts().set(i, StringUtils.substring(value, 1));dtPoly = item.getDtPolys().get(i-1);} else {dtPoly = item.getDtPolys().get(i);}dtPolyList[idx] = dtPoly;}else if(StringUtils.startsWith(value, "型")){idx = orgTypeIndex;int[][] dtPoly = null;if(StringUtils.length(value) > 1){item.getRecTexts().set(i, StringUtils.substring(value, 1));dtPoly = item.getDtPolys().get(i-1);} else {dtPoly = item.getDtPolys().get(i);}dtPolyList[idx] = dtPoly;} else {idx = getValueIndex(value);if(idx >= 0){int[][] dtPoly = item.getDtPolys().get(i);dtPolyList[idx] = dtPoly;}}}String[] licenseValues = new String[9];for (int i = 0; i < item.getRecTexts().size(); i++) {String value = StringUtils.trimToEmpty(item.getRecTexts().get(i));if(StringUtils.anyContains(BREAK_NAME, value)){break;}if(StringUtils.isBlank(value) && StringUtils.anyContains(CONTINUE_NAME, value)){continue;}if (LICENSE_PATTERN_SIMPLE.matcher(value).matches()) {licenseValues[creditCodeIndex] = value;log.info("scan value {} {} {}", i, 0, value);} else {int[][] currentPoly = item.getDtPolys().get(i);for (int index = 0; index < dtPolyList.length; index++) {int[][] dtPoly = dtPolyList[index];int hdiff = Math.abs(currentPoly[0][0] - dtPoly[0][0]);int vdiff = Math.abs(currentPoly[3][1] - dtPoly[3][1]);if(hdiff == 0 && vdiff == 0){log.info("scan name {} {} {}", i, index, value);break;}//看2.png 类和名(称}第0个坐标的横坐标太近,不是名称//看3.png 械和 住所第0个坐标的横坐标太远,不是地址if(Objects.nonNull(dtPoly) && hdiff <50 && vdiff <80){//index=0是营业执照,通过正则获取if(index == 0){continue;}licenseValues[index] = StringUtils.trimToEmpty(licenseValues[index]) + value;} else {log.info("skip {} {} {}", i, index, value);}}}}OcrLicenseVo ocrLicenseVo = new OcrLicenseVo();ocrLicenseVo.setCreditCode(licenseValues[creditCodeIndex]);ocrLicenseVo.setOrgName(licenseValues[orgNameIndex]);ocrLicenseVo.setCapital(licenseValues[capitalIndex]);ocrLicenseVo.setOrgType(licenseValues[orgTypeIndex]);ocrLicenseVo.setEstablishDate(licenseValues[establishDateIndex]);ocrLicenseVo.setLegalPerson(licenseValues[legalPersonIndex]);ocrLicenseVo.setAddress(licenseValues[addressIndex]);ocrLicenseVo.setScope(licenseValues[scopeIndex]);ocrLicenseVo.setTerm(licenseValues[termIndex]);return ocrLicenseVo;}