From db6e88e765cacf1d8a2c69e2a5d74aa6e60ebea1 Mon Sep 17 00:00:00 2001 From: ma <1062634917@qq.com> Date: Wed, 27 Oct 2021 18:40:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9ocr=E6=8E=A5=E5=8F=A31027?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/carbasics/api/OcrController.java | 6 ++-- .../ccsens/carbasics/service/IOcrService.java | 4 ++- .../ccsens/carbasics/service/OcrService.java | 33 +++++++++++++++---- src/main/resources/application.yml | 4 +-- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/ccsens/carbasics/api/OcrController.java b/src/main/java/com/ccsens/carbasics/api/OcrController.java index 7775e9f..7bf3531 100644 --- a/src/main/java/com/ccsens/carbasics/api/OcrController.java +++ b/src/main/java/com/ccsens/carbasics/api/OcrController.java @@ -29,6 +29,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; +import java.util.Map; +import java.util.Set; /** * @description: @@ -67,9 +69,9 @@ public class OcrController { @MustLogin @ApiOperation(value = "图片文字识别",notes = "") @RequestMapping(value="/general/basic",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"}) - public JsonResponse> queryInpatient(QueryDto> params, Long projectId) throws Exception { + public JsonResponse>> queryInpatient(QueryDto> params, Long projectId) throws Exception { log.info("图片文字识别请求:{}", params); - List words = ocrService.discernWords(params.getParam(), params.getUserId(),projectId); + Map> words = ocrService.discernWords(params.getParam(), params.getUserId(),projectId); log.info("图片文字识别结束:{}", words); return JsonResponse.newInstance().ok(words); } diff --git a/src/main/java/com/ccsens/carbasics/service/IOcrService.java b/src/main/java/com/ccsens/carbasics/service/IOcrService.java index b8f2528..64619f6 100644 --- a/src/main/java/com/ccsens/carbasics/service/IOcrService.java +++ b/src/main/java/com/ccsens/carbasics/service/IOcrService.java @@ -9,6 +9,8 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.util.List; +import java.util.Map; +import java.util.Set; /** * @author AUSU @@ -31,5 +33,5 @@ public interface IOcrService { * @return 文字列表 * @throws IOException 异常 */ - List discernWords(List param, Long userId, Long firstAidId) throws IOException, ParseException; + Map> discernWords(List param, Long userId, Long firstAidId) throws IOException, ParseException; } diff --git a/src/main/java/com/ccsens/carbasics/service/OcrService.java b/src/main/java/com/ccsens/carbasics/service/OcrService.java index 1f07597..7e6969e 100644 --- a/src/main/java/com/ccsens/carbasics/service/OcrService.java +++ b/src/main/java/com/ccsens/carbasics/service/OcrService.java @@ -197,7 +197,7 @@ public class OcrService implements IOcrService { @Override - public List discernWords(List param, Long userId,Long projectId) throws IOException, ParseException { + public Map> discernWords(List param, Long userId,Long projectId) throws IOException, ParseException { // FirstAid firstAidInfo = firstAidDao.selectByPrimaryKey(firstAidId); FirstAid firstAidInfo = firstAidDao.queryByProjectId(projectId); if (ObjectUtil.isNull(firstAidInfo)) { @@ -208,7 +208,7 @@ public class OcrService implements IOcrService { List ocrKeywordList = ocrKeywordDao.queryByHospital(firstAidInfo.getHospitalId()); log.info("规则:{}", ocrKeywordList); if (ObjectUtil.isNull(ocrKeywordList)) { - return resultList; + return new HashMap<>(); } SimpleDateFormat frontTime = new SimpleDateFormat("yy-MM-ddHH:mm"); String frontReg = "\\d{1,2}-\\d{1,2}-\\d{2,4}:\\d{1,2}"; @@ -225,6 +225,14 @@ public class OcrService implements IOcrService { //识别图片,放入文字集合 List strList = new ArrayList<>(); Long startOcr = System.currentTimeMillis(); + log.info("接收到的文件{}",param); + if (CollectionUtil.isNotEmpty(param)) { + if (param.get(param.size()-1).getOriginalFilename().equals(param.get(param.size()-2).getOriginalFilename())) { + log.info("已删除相同文件"); + param.remove(param.size()-1); + } + } + for (MultipartFile file : param) { ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageUtil.scale(ImageIO.read(file.getInputStream()), out, 1); @@ -254,7 +262,7 @@ public class OcrService implements IOcrService { Long ocrEnd = System.currentTimeMillis(); log.info("识图+保存文件花费时间{}",ocrEnd-startOcr); if (CollectionUtil.isEmpty(strList)) { - return resultList; + return new HashMap<>(); } //TODO 查询出院时间 (暂时没有根据医院id查询) OcrKeyword dischargeTime = ocrKeywordDao.queryDischargeTime(firstAidInfo.getHospitalId()); @@ -366,7 +374,8 @@ public class OcrService implements IOcrService { long endTimestamp = 0L; if (backMatcher.find()) { String endTime = backMatcher.group(); - endTimestamp = backTime.parse(year + endTime).getTime(); + String endTimeNew = endTime.replaceAll("[[\\s-:punct:]]", ""); + endTimestamp = backTime.parse(year + endTimeNew).getTime(); } //将code与答案保存到结果集合 giveCodeAndAnswer(resultList,ocrKeyword.getId(),(byte)0,newStr,strList.get(i),endTimestamp,timeOfDischarge); @@ -388,9 +397,19 @@ public class OcrService implements IOcrService { } } } - ArrayList newList = resultList.stream().collect(Collectors - .collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(QuestionOcrVo.CodeAndAnswer::getAnswer))), ArrayList::new)); - return newList; + + Map> resultGroup = resultList.stream().collect(Collectors.groupingBy(QuestionOcrVo.CodeAndAnswer::getCode)); + Map> resultSet = new HashMap<>(); + for (String key : resultGroup.keySet()) { + resultSet.put(key,new HashSet<>(resultGroup.get(key))); + } + +// ArrayList newList = resultList.stream().collect(Collectors +// .collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(QuestionOcrVo.CodeAndAnswer::getAnswer))), ArrayList::new)); + +// Map> collect = newList.stream().collect(Collectors.groupingBy(QuestionOcrVo.CodeAndAnswer::getCode)); + return resultSet; +// return newList; } /** diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c3b11fb..5abf242 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: test - include: common, util-test + active: prod + include: common, util-prod