From eb863d3d84d4d98cfdd60c81517e3bad68a03449 Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Tue, 11 May 2021 17:35:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E5=83=8F=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ccsens/tcm/api/OcrController.java | 6 ---- .../ccsens/tcm/bean/dto/QuestionOcrDto.java | 4 +++ .../com/ccsens/tcm/service/IOcrService.java | 4 ++- .../com/ccsens/tcm/service/OcrService.java | 34 +++++++++++++++++-- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/tcm/src/main/java/com/ccsens/tcm/api/OcrController.java b/tcm/src/main/java/com/ccsens/tcm/api/OcrController.java index 26f1c139..f96e00d6 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/OcrController.java +++ b/tcm/src/main/java/com/ccsens/tcm/api/OcrController.java @@ -2,17 +2,11 @@ package com.ccsens.tcm.api; import com.ccsens.cloudutil.annotation.MustLogin; import com.ccsens.tcm.bean.dto.QuestionOcrDto; -import com.ccsens.tcm.bean.vo.InpatientVo; import com.ccsens.tcm.bean.vo.QuestionOcrVo; import com.ccsens.tcm.service.IOcrService; -import com.ccsens.tcm.uitl.Constant; import com.ccsens.util.JsonResponse; -import com.ccsens.util.baidu.BaiDuDto; -import com.ccsens.util.baidu.BaiDuUtil; -import com.ccsens.util.baidu.BaiDuVo; import com.ccsens.util.bean.dto.QueryDto; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionOcrDto.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionOcrDto.java index b7d300d9..e064b867 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionOcrDto.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionOcrDto.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; /** * @description: 通用文字识别 @@ -16,6 +17,7 @@ public class QuestionOcrDto { @ApiModel("报告单图片文字通用识别-请求") @Data public static class GeneralBasic{ + @NotNull @ApiModelProperty("患者ID") private Long patientId; @ApiModelProperty("报告单类型") @@ -23,5 +25,7 @@ public class QuestionOcrDto { private String code; @ApiModelProperty("图片路径") private String url; + @ApiModelProperty("图片ID") + private Long fileId; } } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/IOcrService.java b/tcm/src/main/java/com/ccsens/tcm/service/IOcrService.java index 5b3386c9..0159ab77 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/IOcrService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/IOcrService.java @@ -4,6 +4,8 @@ package com.ccsens.tcm.service; import com.ccsens.tcm.bean.dto.QuestionOcrDto; import com.ccsens.tcm.bean.vo.QuestionOcrVo; +import java.io.IOException; +import java.net.MalformedURLException; import java.util.List; /** @@ -16,5 +18,5 @@ public interface IOcrService { * @param userId 用户ID * @return words */ - List identifyWords(QuestionOcrDto.GeneralBasic param, Long userId); + List identifyWords(QuestionOcrDto.GeneralBasic param, Long userId) throws IOException; } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/OcrService.java b/tcm/src/main/java/com/ccsens/tcm/service/OcrService.java index 3cfedc88..5fcb1fdf 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/OcrService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/OcrService.java @@ -1,15 +1,20 @@ package com.ccsens.tcm.service; +import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.img.Img; +import cn.hutool.core.util.ImageUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.cloudapi.sdk.model.ApiResponse; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ccsens.tcm.bean.dto.QuestionOcrDto; +import com.ccsens.tcm.bean.po.CommonFile; import com.ccsens.tcm.bean.po.ReportOcr; import com.ccsens.tcm.bean.po.ReportOcrExample; import com.ccsens.tcm.bean.vo.QuestionOcrVo; import com.ccsens.tcm.persist.dao.QuestionOcrDao; +import com.ccsens.tcm.persist.mapper.CommonFileMapper; import com.ccsens.tcm.persist.mapper.ReportOcrMapper; import com.ccsens.tcm.uitl.Constant; import com.ccsens.util.CodeEnum; @@ -24,6 +29,14 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -43,10 +56,12 @@ public class OcrService implements IOcrService { private QuestionOcrDao questionOcrDao; @Resource private ReportOcrMapper reportOcrMapper; + @Resource + private CommonFileMapper commonFileMapper; @Override - public List identifyWords(QuestionOcrDto.GeneralBasic generalBasic, Long userId) { + public List identifyWords(QuestionOcrDto.GeneralBasic generalBasic, Long userId) throws IOException { long time1 = System.currentTimeMillis(); List vos = new ArrayList<>(); // 类型测评规则 @@ -69,9 +84,21 @@ public class OcrService implements IOcrService { List contents = new ArrayList<>(); long time4 = 0; + //图片 + CommonFile commonFile = commonFileMapper.selectByPrimaryKey(generalBasic.getFileId()); + if (commonFile == null) { + throw new BaseException(CodeEnum.PARAM_ERROR); + } + File file = new File(commonFile.getLocation()); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ImageUtil.scale(ImageIO.read(file), out, 0.5f); +// Img.from(new URL(generalBasic.getUrl())).scale(0.5f).write(out); + String img = Base64.encode(out.toByteArray()); + if (baidu) { BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); - basic.setUrl(generalBasic.getUrl()); +// basic.setUrl(generalBasic.getUrl()); + basic.setImage(img); BaiDuVo.GeneralBasic words = BaiDuUtil.accurateBasic(Constant.BaiDu.APP_KEY, Constant.BaiDu.SECRET_KEY, basic); log.info("文字识别:{}", words); if (words == null || CollectionUtil.isEmpty(words.getWordsResult())) { @@ -80,7 +107,8 @@ public class OcrService implements IOcrService { words.getWordsResult().forEach(word -> contents.add(word.getWords())); } else { // 阿里 - String body = "{\"img\":\"\",\"url\":\""+generalBasic.getUrl()+"\",\"prob\":false,\"charInfo\":false,\"rotate\":false,\"table\":false}"; +// String body = "{\"img\":\"\",\"url\":\""+generalBasic.getUrl()+"\",\"prob\":false,\"charInfo\":false,\"rotate\":false,\"table\":false}"; + String body = "{\"img\":\""+img+"\",\"url\":\"\",\"prob\":false,\"charInfo\":false,\"rotate\":false,\"table\":false}"; ApiResponse response = AliInstanceUtil.getGeneralAdvancedHttps().ocrAdvancedSyncMode(body.getBytes()); time4 = System.currentTimeMillis(); log.info("阿里接口调用:{}", time4 -time3);