From c90295bcf2bccdec313a3f89031710dfc7210004 Mon Sep 17 00:00:00 2001 From: linrf Date: Wed, 23 Aug 2023 14:13:33 +0800 Subject: [PATCH] =?UTF-8?q?ocr=E8=AF=B7=E6=B1=82=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docus/server/vo/segmentation/FileDto.java | 25 ++++++++ .../vo/segmentation/UploadBatchFileParam.java | 35 +++++++++++ .../server/controller/FileController.java | 1 + .../server/service/impl/OcrServiceImpl.java | 32 ++++++---- .../java/com/docus/server/FileController.java | 59 +++++++++++++++++++ .../docus/server/ImageProcessingExample.java | 24 ++++++-- 6 files changed, 160 insertions(+), 16 deletions(-) create mode 100644 docus-client-interface/src/main/java/com/docus/server/vo/segmentation/FileDto.java create mode 100644 docus-client-interface/src/main/java/com/docus/server/vo/segmentation/UploadBatchFileParam.java diff --git a/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/FileDto.java b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/FileDto.java new file mode 100644 index 0000000..4dfaa06 --- /dev/null +++ b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/FileDto.java @@ -0,0 +1,25 @@ +package com.docus.server.vo.segmentation; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wyb + */ +@ApiModel("上传文件附带的文件信息") +@Data +public class FileDto { + @ApiModelProperty("文件分类ID") + private String assortId; + @ApiModelProperty("文件展示标题") + private String fileTitle; + @ApiModelProperty("上传的文件文件名,用于multipartFile") + private String uploadFileName; + @ApiModelProperty("文件类型 1:pdf 2:图片 ") + private Integer fileType = 1; + @ApiModelProperty("文件唯一标识") + private String serialNumber; + @ApiModelProperty("文件排序") + private Integer sort = 0; +} diff --git a/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/UploadBatchFileParam.java b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/UploadBatchFileParam.java new file mode 100644 index 0000000..bdf0a95 --- /dev/null +++ b/docus-client-interface/src/main/java/com/docus/server/vo/segmentation/UploadBatchFileParam.java @@ -0,0 +1,35 @@ +package com.docus.server.vo.segmentation; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +@ApiModel("文件上传参数") +public class UploadBatchFileParam { + @ApiModelProperty(value = "业务系统病案主键") + @NotNull(message = "业务系统病案主键不能为空") + private String patientId; + + @ApiModelProperty(value = "采集器id,来源") + private String collectorId; + + + @ApiModelProperty(value = "扫描用户代码 默认admin") + private String scanUserCode = "admin"; + + @ApiModelProperty(value = "扫描用户名称 默认admin") + private String scanUserName = "admin"; + + @ApiModelProperty(value = "文档类型,0:病案3.0归档系统 1:3.0门急诊归档系统 ") + private Integer recordType = 0; + + @ApiModelProperty(value = "任务id,如果有 ") + private Long taskId = -1L; + + @ApiModelProperty(value = "文件信息Json FileDto Model") + @NotNull(message = "文件信息Json不能为空!") + private String fileInfo; +} diff --git a/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java b/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java index 5b1ce61..47c4407 100644 --- a/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java +++ b/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java @@ -42,4 +42,5 @@ public class FileController { public void uploadFile(@RequestPart("files") MultipartFile[] files, String pathKey) throws Exception { iFileUploadService.uploadFile(files, pathKey); } + } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java index 4aafc27..46001cd 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java @@ -18,6 +18,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; @Service @Slf4j @@ -26,6 +28,8 @@ public class OcrServiceImpl implements OcrApi { @Value("${ocr.api-url:http://192.168.16.85:9999/uploadfile}") private String ocrHttpUrl; + private final static Lock HTTP_POST_LOCK = new ReentrantLock(); + @Override public List getText(String path) { @@ -72,18 +76,24 @@ public class OcrServiceImpl implements OcrApi { @Override public OcrResponse uploadFile(Map params) { - - String body = HttpRequest.post(ocrHttpUrl) - .form(params) - .contentType("multipart/form-data") - .execute() - .body(); - - if (StrUtil.isNotBlank(body)) { - return JSON.parseObject(body, OcrResponse.class); + + HTTP_POST_LOCK.lock(); + try { + + String body = HttpRequest.post(ocrHttpUrl) + .form(params) + .contentType("multipart/form-data") + .execute() + .body(); + + if (StrUtil.isNotBlank(body)) { + return JSON.parseObject(body, OcrResponse.class); + } + + return new OcrResponse(); + } finally { + HTTP_POST_LOCK.unlock(); } - - return new OcrResponse(); } } diff --git a/docus-segmentation/src/test/java/com/docus/server/FileController.java b/docus-segmentation/src/test/java/com/docus/server/FileController.java index cb39799..66b6a58 100644 --- a/docus-segmentation/src/test/java/com/docus/server/FileController.java +++ b/docus-segmentation/src/test/java/com/docus/server/FileController.java @@ -1,9 +1,18 @@ package com.docus.server; import cn.hutool.core.util.ZipUtil; +import cn.hutool.http.HttpRequest; import com.docus.server.common.download.downLoader.HttpDownloader; import com.docus.server.common.utils.StartUpExeUtils; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiOperation; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.web.bind.annotation.PostMapping; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; /** * 文件上传下载 API @@ -43,4 +52,54 @@ public class FileController { // ZipUtil.unGzip(new GZIPInputStream(new FileInputStream(new File("/Users/linruifeng/Desktop/collector_packages/index.tar.gz")))); // FileUtils.unTarGz("/Users/linruifeng/Desktop/collector_packages/", "/Users/linruifeng/Desktop/collector_packages/test"); } + + @ApiOperation("test") + @PostMapping("/test") + public void test2() throws Exception { + File file = new File("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); + File file1 = new File("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174052\\麻醉.jpg"); + + Map data = new HashMap<>(); + data.put("files", file); + data.put("filetype", "jpg"); + + ArrayList files = Lists.newArrayList(file, file1); + + String body = HttpRequest.post("http://localhost:9115/file/upload") + .form("files", files.toArray(new File[files.size()])) + .form("pathKey", "{\n" + + " \"success\": true,\n" + + " \"datas\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"file_type\": \"string\",\n" + + " \"angle\": \"string\",\n" + + " \"decline\": true,\n" + + " \"hand_shadow\": true,\n" + + " \"sort\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"data\": [\n" + + " {\n" + + " \"boxes\": {\n" + + " \"left\": 0,\n" + + " \"right\": 0,\n" + + " \"top\": 0,\n" + + " \"bottom\": 0\n" + + " },\n" + + " \"text\": \"string\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"time\": 0,\n" + + " \"message\": \"string\"\n" + + "}") + .contentType("multipart/form-data") + .execute() + .body(); + + System.out.println(body); + + } } diff --git a/docus-segmentation/src/test/java/com/docus/server/ImageProcessingExample.java b/docus-segmentation/src/test/java/com/docus/server/ImageProcessingExample.java index 2f1af57..d3a2691 100644 --- a/docus-segmentation/src/test/java/com/docus/server/ImageProcessingExample.java +++ b/docus-segmentation/src/test/java/com/docus/server/ImageProcessingExample.java @@ -2,16 +2,30 @@ package com.docus.server; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; -import com.alibaba.fastjson.JSON; -import com.docus.server.vo.ocr.OcrResponse; +import com.docus.core.util.json.JSON; +import com.docus.server.vo.segmentation.FileDto; +import com.docus.server.vo.segmentation.UploadBatchFileParam; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class ImageProcessingExample { public static void main(String[] args) throws Exception { + + UploadBatchFileParam uploadBatchFileParam = new UploadBatchFileParam(); + System.out.println(JSON.toJSON(uploadBatchFileParam)); + + FileDto fileDto = new FileDto(); + System.out.println(JSON.toJSON(fileDto)); + + List fileDtoList = new ArrayList<>(); + System.out.println(JSON.toJSON(fileDtoList)); + + // 1. 调整图片大小 // ImgUtil.scale(FileUtil.file("input.jpg"), FileUtil.file("output.jpg"), 0.5f); // 将input.jpg缩小为原来的一半,并保存为output.jpg @@ -22,7 +36,7 @@ public class ImageProcessingExample { // Image image = ImgUtil.rotate(ImageIO.read(FileUtil.file("C:\\Users\\dataexa\\Desktop\\麻醉.jpg")), 90); // ImgUtil.write(image, FileUtil.file("C:\\Users\\dataexa\\Desktop\\output2.jpg")); - uploadByte("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); +// uploadByte("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); } public static void uploadByte(String path) { @@ -36,8 +50,8 @@ public class ImageProcessingExample { .execute() .body(); if (StrUtil.isNotBlank(body)) { - OcrResponse jsonRootBean = JSON.parseObject(body, OcrResponse.class); - System.out.println(jsonRootBean); +// OcrResponse jsonRootBean = JSON.parseObject(body, OcrResponse.class); +// System.out.println(jsonRootBean); } // Boolean success = (Boolean)result.get("success");