diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/AIOcrRequest.java b/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/AIOcrRequest.java index 53c6b03..60a7ab9 100644 --- a/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/AIOcrRequest.java +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/AIOcrRequest.java @@ -19,5 +19,19 @@ public class AIOcrRequest { private String imageBase64; + /*** + * 任务ID,用于查询文档解析结果 + * + * 当调用 /ai/orc/document/parsing 时: + * - 无 taskId:提交文档解析任务 + * - 有 taskId:查询文档解析结果 + */ + private String fileName; + + private String fileUrl; + + private String fileData; + + private String taskId; } diff --git a/api-third/src/main/java/com/heyu/api/baidu/handle/common/BAccurateHandle.java b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BAccurateHandle.java index 027c323..19da3f7 100644 --- a/api-third/src/main/java/com/heyu/api/baidu/handle/common/BAccurateHandle.java +++ b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BAccurateHandle.java @@ -74,7 +74,7 @@ public class BAccurateHandle extends BaiduBaseHandle { + + @Override + public String getUri() { + return "/rest/2.0/brain/online/v2/paddle-vl-parser/task"; + } + + @Override + public String check(BPaddleOcrRequest bPaddleOcrRequest) { + if (StringUtils.isBlank(bPaddleOcrRequest.getFileData()) + && StringUtils.isBlank(bPaddleOcrRequest.getFileUrl())) { + return "fileData和fileUrl不能同时为空"; + } + if (StringUtils.isBlank(bPaddleOcrRequest.getFileName())) { + return "fileName不能为空"; + } + return null; + } + + @Override + public String getContent(BPaddleOcrRequest bPaddleOcrRequest) { + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotBlank(bPaddleOcrRequest.getFileName())) { + sb.append("file_name=").append(bPaddleOcrRequest.getFileName()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getFileUrl())) { + sb.append("&file_url=").append(bPaddleOcrRequest.getFileUrl()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getFileData())) { + sb.append("&file_data=").append(bPaddleOcrRequest.getFileData()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getLayoutAnalysis())) { + sb.append("&layout_analysis=").append(bPaddleOcrRequest.getLayoutAnalysis()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getRecgTables())) { + sb.append("&recg_tables=").append(bPaddleOcrRequest.getRecgTables()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getRecgFormula())) { + sb.append("&recg_formula=").append(bPaddleOcrRequest.getRecgFormula()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getRecogSeal())) { + sb.append("&recog_seal=").append(bPaddleOcrRequest.getRecogSeal()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getLineProbability())) { + sb.append("&line_probability=").append(bPaddleOcrRequest.getLineProbability()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getPageAnalysis())) { + sb.append("&page_analysis=").append(bPaddleOcrRequest.getPageAnalysis()); + } + if (StringUtils.isNotBlank(bPaddleOcrRequest.getAttributeAnalysis())) { + sb.append("&attribute_analysis=").append(bPaddleOcrRequest.getAttributeAnalysis()); + } + return sb.toString(); + } +} diff --git a/api-third/src/main/java/com/heyu/api/baidu/handle/common/BPaddleOcrQueryHandle.java b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BPaddleOcrQueryHandle.java new file mode 100644 index 0000000..91d090f --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BPaddleOcrQueryHandle.java @@ -0,0 +1,35 @@ +package com.heyu.api.baidu.handle.common; + + +import com.heyu.api.data.annotation.CustomPath; +import com.heyu.api.baidu.BaiduBaseHandle; +import com.heyu.api.baidu.request.common.BPaddleOcrQueryRequest; +import com.heyu.api.baidu.response.common.BPaddleOcrQueryResp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * PaddleOCR-VL 文档解析查询 Handle + * + * 根据 taskId 查询文档解析结果 + */ +@Component +@Slf4j +@CustomPath("paddleOcrQuery") +public class BPaddleOcrQueryHandle extends BaiduBaseHandle { + + @Override + public String getUri() { + return "/rest/2.0/brain/online/v2/paddle-vl-parser/task/query"; + } + + @Override + public String check(BPaddleOcrQueryRequest bPaddleOcrQueryRequest) { + return checkTaskId(bPaddleOcrQueryRequest); + } + + @Override + public String getContent(BPaddleOcrQueryRequest bPaddleOcrQueryRequest) { + return "task_id=" + bPaddleOcrQueryRequest.getTaskId(); + } +} diff --git a/api-third/src/main/java/com/heyu/api/baidu/handle/common/BSealHandle.java b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BSealHandle.java index 8336421..d06056e 100644 --- a/api-third/src/main/java/com/heyu/api/baidu/handle/common/BSealHandle.java +++ b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BSealHandle.java @@ -42,10 +42,10 @@ public class BSealHandle extends BaiduBaseHandle { public String getContent(BSealRequest bSealRequest) { StringBuffer sb = getOfdContent(bSealRequest); if (StringUtils.isNotBlank(bSealRequest.getReturnImage())) { - sb.append("return_image=" + bSealRequest.getReturnImage()); + sb.append("&return_image=" + bSealRequest.getReturnImage()); } if (StringUtils.isNotBlank(bSealRequest.getFlattenImage())) { - sb.append("flatten_image=" + bSealRequest.getFlattenImage()); + sb.append("&flatten_image=" + bSealRequest.getFlattenImage()); } return sb.toString(); } diff --git a/api-third/src/main/java/com/heyu/api/baidu/handle/common/BTableHandle.java b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BTableHandle.java new file mode 100644 index 0000000..22c3e4d --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/baidu/handle/common/BTableHandle.java @@ -0,0 +1,51 @@ +package com.heyu.api.baidu.handle.common; + + +import com.heyu.api.data.annotation.CustomPath; +import com.heyu.api.data.constants.ApiConstants; +import com.heyu.api.data.utils.StringUtils; +import com.heyu.api.baidu.BaiduBaseHandle; +import com.heyu.api.baidu.request.common.ATableRequest; +import com.heyu.api.baidu.response.common.ATableResp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * https://console.bce.baidu.com/support/?_=1740219852952×tamp=1740297734240#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E9%80%9A%E7%94%A8%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Ftable&method=post + * + * 表格识别 + * 将图片/PDF中的表格结构化输出,支持返回Excel(base64编码)和结构化JSON数据 + */ +@Component +@Slf4j +@CustomPath("table") +public class BTableHandle extends BaiduBaseHandle { + + @Override + public String getUri() { + return "/rest/2.0/ocr/v1/table"; + } + + @Override + public String check(ATableRequest aTableRequest) { + if (!ApiConstants.trueOrFalse.contains(aTableRequest.getReturnExcel())) { + return "returnExcel 仅能传 " + ApiConstants.trueOrFalse + ",是否输出excel文件"; + } + if (!ApiConstants.trueOrFalse.contains(aTableRequest.getCellContents())) { + return "cellContents 仅能传 " + ApiConstants.trueOrFalse + ",是否输出单元格文字位置信息"; + } + return checkImageUri(aTableRequest); + } + + @Override + public String getContent(ATableRequest aTableRequest) { + StringBuffer sb = getImageContent(aTableRequest); + if (StringUtils.isNotBlank(aTableRequest.getReturnExcel())) { + sb.append("&return_excel=").append(aTableRequest.getReturnExcel()); + } + if (StringUtils.isNotBlank(aTableRequest.getCellContents())) { + sb.append("&cell_contents=").append(aTableRequest.getCellContents()); + } + return sb.toString(); + } +} diff --git a/api-third/src/main/java/com/heyu/api/baidu/handle/convert/BParserTextHandle.java b/api-third/src/main/java/com/heyu/api/baidu/handle/convert/BParserTextHandle.java index 171ae19..253b05c 100644 --- a/api-third/src/main/java/com/heyu/api/baidu/handle/convert/BParserTextHandle.java +++ b/api-third/src/main/java/com/heyu/api/baidu/handle/convert/BParserTextHandle.java @@ -34,8 +34,7 @@ public class BParserTextHandle extends BaiduBaseHandle pages; + } + + @NoArgsConstructor + @Data + public static class PagesDTO { + @JsonProperty("page_num") + private Integer pageNum; + + @JsonProperty("text") + private String text; + + @JsonProperty("tables") + private List tables; + + @JsonProperty("formulas") + private List formulas; + + @NoArgsConstructor + @Data + public static class TablesDTO { + @JsonProperty("html") + private String html; + + @JsonProperty("position") + private List position; + } + + @NoArgsConstructor + @Data + public static class FormulasDTO { + @JsonProperty("latex") + private String latex; + + @JsonProperty("position") + private List position; + } + } +} diff --git a/api-third/src/main/java/com/heyu/api/baidu/response/common/BPaddleOcrResp.java b/api-third/src/main/java/com/heyu/api/baidu/response/common/BPaddleOcrResp.java new file mode 100644 index 0000000..e3a35ec --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/baidu/response/common/BPaddleOcrResp.java @@ -0,0 +1,37 @@ +package com.heyu.api.baidu.response.common; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.heyu.api.baidu.response.BBaseResp; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * PaddleOCR-VL 文档解析提交响应 + * + * 提交成功时返回 taskId,可用于后续查询解析结果 + */ +@NoArgsConstructor +@Data +public class BPaddleOcrResp extends BBaseResp { + + @JsonProperty("error_code") + private Integer errorCode; + + @JsonProperty("error_msg") + private String errorMsg; + + @JsonProperty("log_id") + private String logId; + + @JsonProperty("result") + private ResultDTO result; + + @NoArgsConstructor + @Data + public static class ResultDTO { + /** 任务ID,用于查询解析结果 */ + @JsonProperty("task_id") + private String taskId; + } +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/AccurateBasicController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/AccurateBasicController.java index c1e1718..5913145 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/AccurateBasicController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/AccurateBasicController.java @@ -9,14 +9,11 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.AccurateBasicResp; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; /** @@ -47,24 +44,9 @@ public class AccurateBasicController extends BaseController { public R recognize(BAccurateBasicRequest request) { - List respList = new ArrayList<>(); - - ApiR bR = bAccurateBasicHandle.handle(request); if (bR.isSuccess()) { - BAccurateBasicResp bAccurateBasicResp = bR.getData(); - - - List list = bAccurateBasicResp.getWordsResult(); - for (BAccurateBasicResp.WordsResultDTO wordsResultDTO : list) { - - AccurateBasicResp resp = new AccurateBasicResp(); - resp.setWord(wordsResultDTO.getWords()); - - respList.add(resp); - } - - return R.ok().setData(respList); + return R.ok().setData(bR.getData()); } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/DocAnalysisOfficeController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/DocAnalysisOfficeController.java index 3ef2393..40866f3 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/DocAnalysisOfficeController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/DocAnalysisOfficeController.java @@ -8,14 +8,11 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.DocAnalysisOfficeResp; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; /*** * @@ -54,21 +51,10 @@ public class DocAnalysisOfficeController { @CacheResult public R recognize(BDocAnalysisOfficeRequest request) { - List respList = new ArrayList<>(); - ApiR br = bDocAnalysisOfficeHandle.handle(request); if (br.isSuccess()) { - BDocAnalysisOfficeResp bDocAnalysisOfficeResp = br.getData(); - for (BDocAnalysisOfficeResp.ResultsDTO result : bDocAnalysisOfficeResp.getResults()) { - DocAnalysisOfficeResp resp = new DocAnalysisOfficeResp(); - resp.setWordsType(result.getWordsType()); - resp.setAverageLineProbability(result.getWords().getLineProbability().getAverage()); - resp.setMinLineProbability(result.getWords().getLineProbability().getMin()); - resp.setWord(result.getWords().getWord()); - respList.add(resp); - } - return R.ok().setData(respList); + return R.ok().setData(br.getData()); } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/HandwritingController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/HandwritingController.java index 5c34cc8..ad7a8b2 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/HandwritingController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/HandwritingController.java @@ -8,14 +8,11 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.HandwritingResp; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; /** @@ -42,29 +39,13 @@ public class HandwritingController { @CacheResult public R recognize(AHandwritingRequest request) { - List respList = new ArrayList<>(); - ApiR apiR = aHandwritingHandle.handle(request); if (apiR.isSuccess()) { - AHandwritingResp aHandwritingResp = apiR.getData(); - - List wordsResultDTOS = aHandwritingResp.getWordsResult(); - for (AHandwritingResp.WordsResultDTO wordsResultDTO : wordsResultDTOS) { - HandwritingResp resp = new HandwritingResp(); - resp.setWords(wordsResultDTO.getWords()); - resp.setLeft(wordsResultDTO.getLocation().getLeft()); - resp.setTop(wordsResultDTO.getLocation().getTop()); - resp.setWidth(wordsResultDTO.getLocation().getWidth()); - resp.setHeight(wordsResultDTO.getLocation().getHeight()); - - respList.add(resp); - - } - return R.ok().setData(respList); + return R.ok().setData(apiR.getData()); } - return R.error(); + return R.error(apiR.getErrorMsg()); } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/NumbersController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/NumbersController.java index 6e8e052..df76549 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/NumbersController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/NumbersController.java @@ -8,15 +8,11 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.NumbersResp; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; /** * https://console.bce.baidu.com/support/?_=1740219852952×tamp=1740299353970#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E9%80%9A%E7%94%A8%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fnumbers&method=post @@ -37,28 +33,11 @@ public class NumbersController { @CacheResult public R recognize(ANumbersRequest request) { - - List respList = new ArrayList<>(); - ApiR bR = bNumbersHandle.handle(request); if (bR.isSuccess()) { - ANumbersResp aNumbersResp = bR.getData(); - List wordsResultDTOS = aNumbersResp.getWordsResult(); - if (CollectionUtils.isNotEmpty(wordsResultDTOS)) { - for (ANumbersResp.WordsResultDTO wordsResultDTO : wordsResultDTOS) { - NumbersResp resp = new NumbersResp(); - resp.setWords(wordsResultDTO.getWords()); - resp.setTop(wordsResultDTO.getLocation().getTop()); - resp.setLeft(wordsResultDTO.getLocation().getLeft()); - resp.setHeight(wordsResultDTO.getLocation().getHeight()); - resp.setWidth(wordsResultDTO.getLocation().getWidth()); - - respList.add(resp); - } - return R.ok().setData(respList); - } + return R.ok().setData(bR.getData()); } return R.error(bR.getErrorMsg()); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SealController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SealController.java index 584cd6f..9c68bf3 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SealController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SealController.java @@ -1,6 +1,5 @@ package com.heyu.api.controller.common; - import com.heyu.api.baidu.handle.common.BSealHandle; import com.heyu.api.baidu.request.common.BSealRequest; import com.heyu.api.baidu.response.common.BSealResp; @@ -9,77 +8,27 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.SealOtherResp; -import com.heyu.api.resp.common.SealResp; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; - -/*** - * https://console.bce.baidu.com/support/?_=1740219852952×tamp=1742702349425#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E9%80%9A%E7%94%A8%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fseal&method=post - * - * 印章识别 - * - *接口描述 - * 检测并识别合同文件或常用票据中的印章,输出文字内容、印章位置信息以及相关置信度,支持识别印章编码,可覆盖圆形章、椭圆形章、方形章等常见种类的印章。 - * - * - * - */ @Slf4j @RestController @RequestMapping("/seal") @NotIntercept public class SealController extends BaseController { - @Autowired private BSealHandle bSealHandle; @RequestMapping("/recognize") @CacheResult public R recognize(BSealRequest request) { - - List respList = new ArrayList<>(); - ApiR bR = bSealHandle.handle(request); if (bR.isSuccess()) { - BSealResp bSealResp = bR.getData(); - - List resultDTOList = bSealResp.getResult(); - if (CollectionUtils.isNotEmpty(resultDTOList)) { - for (BSealResp.ResultDTO resultDTO : resultDTOList) { - SealResp resp = new SealResp(); - resp.setType(resultDTO.getType()); - resp.setMajorWords(resultDTO.getMajor().getWords()); - - if (CollectionUtils.isNotEmpty(resultDTO.getMinor())) { - List sealOtherResps = new ArrayList<>(); - for (BSealResp.ResultDTO.MinorDTO minorDTO : resultDTO.getMinor()) { - - SealOtherResp otherResp = new SealOtherResp(); - - otherResp.setMinorWords(minorDTO.getWords()); - otherResp.setMinorProbability(minorDTO.getProbability() + ""); - - sealOtherResps.add(otherResp); - - } - resp.setOtherSealList(sealOtherResps); - } - respList.add(resp); - } - return R.ok().setData(respList); - } - + return R.ok().setData(bR.getData()); } - - return R.error(); + return R.error(bR.getErrorMsg()); } - } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SmartStructController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SmartStructController.java index 9f3b82a..28bce1d 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SmartStructController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/SmartStructController.java @@ -9,14 +9,11 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.SmartStructResp; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; /** @@ -42,27 +39,10 @@ public class SmartStructController extends BaseController { @RequestMapping("/recognize") @CacheResult public R recognize(ASmartStructRequest request) { - List respList = new ArrayList<>(); ApiR bR = bSmartStructHandle.handle(request); if (bR.isSuccess()) { - ASmartStructResp aSmartStructResp = bR.getData(); - ASmartStructResp.WordsResultDTO wordsResultDTO = aSmartStructResp.getWordsResult(); - ASmartStructResp.WordsResultDTO.StructInfoDTO structInfoDTO = wordsResultDTO.getStructInfo(); - List groupDTOS = structInfoDTO.getGroup(); - for (ASmartStructResp.WordsResultDTO.StructInfoDTO.GroupDTO groupDTO : groupDTOS) { - - SmartStructResp resp = new SmartStructResp(); - - for (int i = 0; i < groupDTO.getKey().size(); i++) { - ASmartStructResp.WordsResultDTO.StructInfoDTO.GroupDTO.KeyDTO keyDTO = groupDTO.getKey().get(i); - ASmartStructResp.WordsResultDTO.StructInfoDTO.GroupDTO.ValueDTO valueDTO = groupDTO.getValue().get(i); - resp.setKey(keyDTO.getWord()); - resp.setValue(valueDTO.getWord()); - respList.add(resp); - } - } - return R.ok().setData(respList); + return R.ok().setData(bR.getData()); } - return R.error(); + return R.error(bR.getErrorMsg()); } } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/WebImageLocLineController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/WebImageLocLineController.java index 0acafc6..1e627f7 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/common/WebImageLocLineController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/common/WebImageLocLineController.java @@ -1,6 +1,5 @@ package com.heyu.api.controller.common; - import com.heyu.api.baidu.handle.common.BWebImageLocHandle; import com.heyu.api.baidu.request.common.BWebImageLocRequest; import com.heyu.api.baidu.response.common.BWebImageLocResp; @@ -8,99 +7,28 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.common.WebImageLocLineResp; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; - -/** - * https://console.bce.baidu.com/support/?_=1740219852952×tamp=1740294887952#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E9%80%9A%E7%94%A8%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fwebimage_loc&method=post - * 网络图片文字识别(含位置版) - * - * - * - */ @Slf4j @RestController @RequestMapping("/image/web/line") @NotIntercept public class WebImageLocLineController { - @Autowired private BWebImageLocHandle bWebImageLocHandle; - @RequestMapping("/recognize") @CacheResult public R recognize(BWebImageLocRequest request) { - - request.setRecognizeGranularity("big"); - - List respList = new ArrayList<>(); - ApiR bR = bWebImageLocHandle.handle(request); - if(bR.isSuccess()){ - - BWebImageLocResp bWebImageLocResp = bR.getData(); - if(CollectionUtils.isNotEmpty(bWebImageLocResp.getWordsResult())){ - for (BWebImageLocResp.WordsResultDTO wordsResultDTO : bWebImageLocResp.getWordsResult()) { - WebImageLocLineResp resp = new WebImageLocLineResp(); - - resp.setWords(wordsResultDTO.getWords()); - // 当 probability=true 时返回该字段。识别结果中每一行的置信度值,包含 average:行置信度平均值,variance:行置信度方差,min:行置信度最小值 - WebImageLocLineResp.ProbabilityDTO probabilityDTO = new WebImageLocLineResp.ProbabilityDTO(); - - WebImageLocLineResp.LocationDTO locationDTO = new WebImageLocLineResp.LocationDTO(); - - if(wordsResultDTO.getProbability() !=null){ - probabilityDTO.setMin(wordsResultDTO.getProbability().getMin()); - probabilityDTO.setVariance(wordsResultDTO.getProbability().getVariance()); - probabilityDTO.setAverage(wordsResultDTO.getProbability().getAverage()); - - } - - if(wordsResultDTO.getLocation() !=null){ - locationDTO.setTop(wordsResultDTO.getLocation().getTop()); - locationDTO.setLeft(wordsResultDTO.getLocation().getLeft()); - locationDTO.setWidth(wordsResultDTO.getLocation().getWidth()); - locationDTO.setHeight(wordsResultDTO.getLocation().getHeight()); - } - - resp.setDirection(bWebImageLocResp.getDirection() + ""); - resp.setProbability(probabilityDTO); - resp.setLocation(locationDTO); - - - List chars = new ArrayList<>(); - if(CollectionUtils.isNotEmpty(wordsResultDTO.getChars())){ - for (BWebImageLocResp.WordsResultDTO.CharsDTO aChar : wordsResultDTO.getChars()) { - WebImageLocLineResp.CharsDTO c = new WebImageLocLineResp.CharsDTO(); - c.setCharX(aChar.getCharX()); - - if(aChar.getLocation() !=null){ - WebImageLocLineResp.CharsDTO.LocationDTO location = new WebImageLocLineResp.CharsDTO.LocationDTO(); - - location.setTop(aChar.getLocation().getTop()); - location.setLeft(aChar.getLocation().getLeft()); - location.setWidth(aChar.getLocation().getWidth()); - location.setHeight(aChar.getLocation().getHeight()); - c.setLocation(location); - } - chars.add(c); - } - } - respList.add(resp); - } - } + if (bR.isSuccess()) { + return R.ok().setData(bR.getData()); } - return R.error(); + return R.error(bR.getErrorMsg()); } - } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/convert/ParserTextController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/convert/ParserTextController.java index e4115b5..7bdd163 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/convert/ParserTextController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/convert/ParserTextController.java @@ -48,15 +48,7 @@ public class ParserTextController extends BaseController { @CacheResult public R parse(ParserTextReq request) { if (StringUtils.isNotBlank(request.getTaskId())) { - ApiR bR = bParserTextHandle.handle(request); - - if (bR.isSuccess()) { - BParserTextResp bParserTextResp = bR.getData(); - return R.ok().setData(bParserTextResp.getResult()); - } - return R.error(bR.getErrorMsg()); - } else { - + // 有 taskId → 查询文档解析结果 BParserTextQueryRequest bParserTextQueryRequest = new BParserTextQueryRequest(); bParserTextQueryRequest.setTaskId(request.getTaskId()); @@ -65,6 +57,15 @@ public class ParserTextController extends BaseController { return R.ok().setData(bR.getData()); } return R.error(bR.getErrorMsg()); + } else { + // 无 taskId → 提交文档解析任务 + ApiR bR = bParserTextHandle.handle(request); + + if (bR.isSuccess()) { + BParserTextResp bParserTextResp = bR.getData(); + return R.ok().setData(bParserTextResp.getResult()); + } + return R.error(bR.getErrorMsg()); } } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/AIOcrController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/AIOcrController.java index 20764c2..854600d 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/AIOcrController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/AIOcrController.java @@ -5,10 +5,20 @@ import com.heyu.api.alibaba.LLMUtils; import com.heyu.api.alibaba.bailian.AlibabaOCREnums; import com.heyu.api.alibaba.request.common.text.AIOcrRequest; import com.heyu.api.alibaba.resp.ModelResult; -import com.heyu.api.baidu.handle.common.BDocAnalysisOfficeHandle; +import com.heyu.api.baidu.handle.common.BPaddleOcrHandle; +import com.heyu.api.baidu.handle.common.BPaddleOcrQueryHandle; +import com.heyu.api.baidu.handle.common.BTableHandle; +import com.heyu.api.baidu.request.common.ATableRequest; +import com.heyu.api.baidu.request.common.BPaddleOcrQueryRequest; +import com.heyu.api.baidu.request.common.BPaddleOcrRequest; +import com.heyu.api.baidu.response.common.ATableResp; +import com.heyu.api.baidu.response.common.BPaddleOcrQueryResp; +import com.heyu.api.baidu.response.common.BPaddleOcrResp; import com.heyu.api.data.annotation.EbAuthentication; import com.heyu.api.data.constants.ApiConstants; +import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; +import com.heyu.api.data.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; @@ -25,7 +35,13 @@ public class AIOcrController { @Autowired - private BDocAnalysisOfficeHandle bDocAnalysisOfficeHandle; + private BTableHandle bTableHandle; + + @Autowired + private BPaddleOcrHandle bPaddleOcrHandle; + + @Autowired + private BPaddleOcrQueryHandle bPaddleOcrQueryHandle; // http://localhost:8888/ai/precision/orc/recognize?imageBase64=3232 @@ -70,38 +86,72 @@ public class AIOcrController { // http://localhost:8888/ai/precision/orc/recognize?imageBase64=3232 // https://heyuoss.oss-cn-shanghai.aliyuncs.com/prd/testxxx.jpg - // 3. table_parsing: 表格解析 + // 3. table_parsing: 表格解析(已从阿里大模型切换为百度表格识别API) /** - * 模型会对图像中的表格元素进行解析,以带有HTML格式的文本返回识别结果。 + * 使用百度表格识别API,将图片中的表格结构化输出,支持返回Excel和结构化JSON数据。 + * 请求参数:imageUrl / imageBase64(与阿里云百炼公用 AIOcrRequest) */ - @EbAuthentication(tencent = ApiConstants.TENCENT_AUTH) @RequestMapping("/table/parsing") - public R table_parsing(@RequestBody AIOcrRequest aiOcrRequest) throws Exception { - ModelResult modelResult = LLMUtils.callOcr(aiOcrRequest.getImageUrl(), aiOcrRequest.getImageBase64(), - AlibabaOCREnums.table_parsing); - Map data = new HashMap<>(); - data.put("content", modelResult.getResult()); - return R.ok().setData(data); + public R tableParsing(@RequestBody AIOcrRequest aiOcrRequest) { + if (bTableHandle == null) { + return R.error("表格识别服务暂不可用"); + } + + ATableRequest tableRequest = new ATableRequest(); + tableRequest.setImageBase64(aiOcrRequest.getImageBase64()); + tableRequest.setImageUrl(aiOcrRequest.getImageUrl()); + + ApiR apiR = bTableHandle.handle(tableRequest); + if (apiR.isSuccess()) { + return R.ok().setData(apiR.getData()); + } + return R.error(apiR.getErrorMsg()); } - // http://localhost:8888/ai/precision/orc/recognize?imageBase64=3232 - // https://heyuoss.oss-cn-shanghai.aliyuncs.com/prd/testxxx.jpg - - /*** + /** + * 4. document_parsing : 文档解析(已从阿里大模型切换为百度 PaddleOCR-VL) * - / 4. document_parsing : 文档解析 - /** - * 模型支持解析以图像形式存储的扫描件或PDF文档,能识别文件中的标题、摘要、标签等,以带有LaTeX格式的文本返回识别结果。 + * 基于百度自研OCR大模型PaddleOCR-VL的文档解析能力。 + * 无 taskId 时提交文档解析任务;有 taskId 时查询解析结果。 + * 请求参数:imageUrl / imageBase64(提交时),或 taskId(查询时) */ - @EbAuthentication(tencent = ApiConstants.TENCENT_AUTH) @RequestMapping("/document/parsing") - public R document_parsing(@RequestBody AIOcrRequest aiOcrRequest) throws Exception { - ModelResult modelResult = LLMUtils.callOcr(aiOcrRequest.getImageUrl(), aiOcrRequest.getImageBase64(), - AlibabaOCREnums.document_parsing); - Map data = new HashMap<>(); - data.put("content", modelResult.getResult()); - return R.ok().setData(data); + public R documentParsing(@RequestBody AIOcrRequest aiOcrRequest) { + // 有 taskId → 查询解析结果 + if (StringUtils.isNotBlank(aiOcrRequest.getTaskId())) { + if (bPaddleOcrQueryHandle == null) { + return R.error("文档解析查询服务暂不可用"); + } + + BPaddleOcrQueryRequest queryRequest = new BPaddleOcrQueryRequest(); + queryRequest.setTaskId(aiOcrRequest.getTaskId()); + ApiR apiR = bPaddleOcrQueryHandle.handle(queryRequest); + if (apiR.isSuccess()) { + return R.ok().setData(apiR.getData()); + } + return R.error(apiR.getErrorMsg()); + } + + // 无 taskId → 使用 PaddleOCR-VL 提交文档解析任务 + if (bPaddleOcrHandle == null) { + return R.error("文档解析服务暂不可用"); + } + + BPaddleOcrRequest paddleRequest = new BPaddleOcrRequest(); + paddleRequest.setFileName(aiOcrRequest.getFileName()); + paddleRequest.setFileUrl(StringUtils.isNotBlank(aiOcrRequest.getFileUrl()) + ? aiOcrRequest.getFileUrl() + : aiOcrRequest.getImageUrl()); + paddleRequest.setFileData(StringUtils.isNotBlank(aiOcrRequest.getFileData()) + ? aiOcrRequest.getFileData() + : aiOcrRequest.getImageBase64()); + + ApiR apiR = bPaddleOcrHandle.handle(paddleRequest); + if (apiR.isSuccess()) { + return R.ok().setData(apiR.getData()); + } + return R.error(apiR.getErrorMsg()); } @@ -159,3 +209,4 @@ public class AIOcrController { } } + diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/GeneralBasicOcrController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/GeneralBasicOcrController.java index 8413c8d..d5a36e2 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/GeneralBasicOcrController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/GeneralBasicOcrController.java @@ -12,21 +12,15 @@ import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; import com.heyu.api.data.utils.StringUtils; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; - /*** - * 银行卡三要素核验 + * 通用文字识别(高精度基础版) * - * - * * - * *银行卡二要素核验 + * 返回百度原始响应,包含 words_result、words_result_num、log_id 等完整字段 */ @Slf4j @RestController @@ -48,48 +42,6 @@ public class GeneralBasicOcrController extends BaseController { @RequestMapping("/recognize") public R recognize(@RequestBody GeneralBasicOcrRequest generalBasicOcrRequest) throws Exception { - - //String base64 = Base64Utils.encodeImageToBase64("/Users/quyixiao/Desktop/ocr/testxxx.jpg"); - - //log.info("base64 :{}",base64); - - //String xx = StringUtils.encodeURIComponent(base64); - - //log.info("xx :{}",xx); - - - - - //读取文件内容到Stream流中,按行读取 - //Stream lines = Files.lines(Paths.get("/Users/quyixiao/gitb/eb-service-api/api-web/api-interface/src/main/resources/filebase64.txt")); - - - //String a = lines.collect(Collectors.joining()); - - - //log.info("imagebase64:{}", a); - //generalBasicOcrRequest.setImageBase64(a); - - - //generalBasicOcrRequest.setImageBase64(null); - - //generalBasicOcrRequest.setImageUrl("https://heyuoss.oss-cn-shanghai.aliyuncs.com/prd/testxxx.jpg"); - - - - - // 读取文件内容到Stream流中,按行读取 - //Stream lines = Files.lines(Paths.get("/Users/quyixiao/gitb/eb-service-api/api-web/api-interface/src/main/resources/pdfbase64.txt")); - - - //String a = lines.collect(Collectors.joining()); - - - //log.info("imagebase64:{}", a); - //generalBasicOcrRequest.setImageBase64(null); - //generalBasicOcrRequest.setPdfFile("xxxxxx"); - - if(StringUtils.isNotBlank(generalBasicOcrRequest.getImageBase64())){ String imageBase64 = StringUtils.encodeURIComponent(generalBasicOcrRequest.getImageBase64()); generalBasicOcrRequest.setImageBase64(imageBase64); @@ -116,17 +68,9 @@ public class GeneralBasicOcrController extends BaseController { bGeneralBasicRequest.setOfd_file_num(generalBasicOcrRequest.getOfdFileNum()); ApiR aR = bGeneralBasicHandle.handle(bGeneralBasicRequest); - List list = new ArrayList<>(); if (aR.isSuccess()) { - BGeneralBasicResp bGeneralBasicResp = aR.getData(); - if (CollectionUtils.isNotEmpty(bGeneralBasicResp.getWordsResult())) { - for (BGeneralBasicResp.WordsResultDTO wordsResultDTO : bGeneralBasicResp.getWordsResult()) { - list.add(wordsResultDTO.getWords()); - } - return R.ok().setData(list); - } - return R.ok().setMsg(bGeneralBasicResp.getErrorMsg()); + return R.ok().setData(aR.getData()); } return R.error(aR.getErrorMsg()); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/HighPrecisionOcrController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/HighPrecisionOcrController.java index 2a93f34..aec5603 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/HighPrecisionOcrController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/ocr/HighPrecisionOcrController.java @@ -3,9 +3,6 @@ package com.heyu.api.controller.ocr; import com.heyu.api.alibaba.request.common.text.HighPrecisionOcrRequest; import com.heyu.api.baidu.handle.common.BDocAnalysisOfficeHandle; -import com.heyu.api.baidu.ocr.HighPrecisionOcrResp; -import com.heyu.api.baidu.ocr.LineProbabilityResp; -import com.heyu.api.baidu.ocr.WordsLocationResp; import com.heyu.api.baidu.request.common.BDocAnalysisOfficeRequest; import com.heyu.api.baidu.response.common.BDocAnalysisOfficeResp; import com.heyu.api.data.annotation.EbAuthentication; @@ -14,15 +11,11 @@ import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; import com.heyu.api.data.utils.StringUtils; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.List; - @Slf4j @RestController @RequestMapping("/high/precision/orc/") @@ -39,17 +32,6 @@ public class HighPrecisionOcrController { @RequestMapping("/recognize") public R recognize(@RequestBody HighPrecisionOcrRequest generalBasicOcrRequest) throws Exception { - // 读取文件内容到Stream流中,按行读取 - //Stream lines = Files.lines(Paths.get("/Users/quyixiao/gitb/eb-service-api/api-web/api-interface/src/main/resources/pdfbase64.txt")); - - //String a = lines.collect(Colle - // ctors.joining()); - //log.info("imagebase64:{}", a); - //generalBasicOcrRequest.setImageBase64(null); - //generalBasicOcrRequest.setPdfFile("xxxxxxxxx"); - //generalBasicOcrRequest.setImageUrl("https://heyuoss.oss-cn-shanghai.aliyuncs.com/prd/testxxx.jpg"); - - if(StringUtils.isNotBlank(generalBasicOcrRequest.getImageBase64())){ String imageBase64 = StringUtils.encodeURIComponent(generalBasicOcrRequest.getImageBase64()); generalBasicOcrRequest.setImageBase64(imageBase64); @@ -67,9 +49,6 @@ public class HighPrecisionOcrController { } - - - BDocAnalysisOfficeRequest bGeneralBasicRequest = new BDocAnalysisOfficeRequest(); bGeneralBasicRequest.setImageBase64(generalBasicOcrRequest.getImageBase64()); bGeneralBasicRequest.setImageUrl(generalBasicOcrRequest.getImageUrl()); @@ -80,50 +59,11 @@ public class HighPrecisionOcrController { bGeneralBasicRequest.setLineProbability("true"); ApiR aR = bDocAnalysisOfficeHandle.handle(bGeneralBasicRequest); - List list = new ArrayList<>(); if(aR.isSuccess()){ - BDocAnalysisOfficeResp bGeneralBasicResp = aR.getData(); - if(CollectionUtils.isNotEmpty(bGeneralBasicResp.getResults())){ - for (BDocAnalysisOfficeResp.ResultsDTO result : bGeneralBasicResp.getResults()) { - BDocAnalysisOfficeResp.ResultsDTO.WordsDTO wordsDTO = result.getWords(); - if(wordsDTO !=null){ - HighPrecisionOcrResp highPrecisionOcrResp = new HighPrecisionOcrResp(); - highPrecisionOcrResp.setText(wordsDTO.getWord()); - - BDocAnalysisOfficeResp.ResultsDTO.WordsDTO.LineProbabilityDTO lineProbabilityDTO = wordsDTO.getLineProbability(); - - - LineProbabilityResp lineProbabilityResp = new LineProbabilityResp(); - lineProbabilityResp.setMin(lineProbabilityDTO.getMin()); - lineProbabilityResp.setAverage(lineProbabilityDTO.getAverage()); - - - highPrecisionOcrResp.setLineProbabilityResp(lineProbabilityResp); - - BDocAnalysisOfficeResp.ResultsDTO.WordsDTO.WordsLocationDTO wordsLocationDTO = wordsDTO.getWordsLocation(); - - - WordsLocationResp wordsLocationResp = new WordsLocationResp(); - wordsLocationResp.setHeight(wordsLocationDTO.getHeight()); - wordsLocationResp.setWidth(wordsLocationDTO.getWidth()); - wordsLocationResp.setTop(wordsLocationDTO.getTop()); - wordsLocationResp.setLeft(wordsLocationDTO.getLeft()); - - highPrecisionOcrResp.setWordsLocationResp(wordsLocationResp); - - list.add(highPrecisionOcrResp); - } - } - return R.ok().setData(list); - } - - return R.ok().setMsg(bGeneralBasicResp.getErrorMsg()); - + return R.ok().setData(aR.getData()); } return R.error(aR.getErrorMsg()); } - - } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/qrcode/RecognizeQrCodeController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/qrcode/RecognizeQrCodeController.java index fde82e5..aca24bc 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/qrcode/RecognizeQrCodeController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/qrcode/RecognizeQrCodeController.java @@ -1,10 +1,5 @@ package com.heyu.api.controller.qrcode; - -import com.aliyun.ocr20191230.models.RecognizeQrCodeResponse; -import com.aliyun.ocr20191230.models.RecognizeQrCodeResponseBody; -import com.heyu.api.alibaba.handle.common.text.ARecognizeQrCodeHandle; -import com.heyu.api.alibaba.request.common.text.ARecognizeQrCodeRequest; import com.heyu.api.baidu.handle.common.BQrCodeHandle; import com.heyu.api.baidu.request.common.BQrcodeReconizeRequest; import com.heyu.api.baidu.response.common.BQrcodeReconizeResp; @@ -13,38 +8,16 @@ import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; -import com.heyu.api.resp.qrcode.RecognizeQrCodeResp; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - -/*** - * https://next.api.aliyun.com/api/ocr/2019-12-30/RecognizeQrCode?tab=DEMO&lang=JAVA - * - * - * 二维码识别 - * - * RecognizeQrCode - * - * - * - * https://console.bce.baidu.com/support/?_=1740219852952×tamp=1742644047533#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E9%80%9A%E7%94%A8%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fqrcode&method=post - * - * - */ @Slf4j @RestController @RequestMapping("/qrcode") - @NotIntercept public class RecognizeQrCodeController extends BaseController { - @Autowired - private ARecognizeQrCodeHandle arecognizeQrCodeHandle; - @Autowired private BQrCodeHandle bqrCodeHandle; @@ -52,44 +25,10 @@ public class RecognizeQrCodeController extends BaseController { @RequestMapping("/recognize") @CacheResult public R recognize(BQrcodeReconizeRequest request) { - RecognizeQrCodeResp resp = new RecognizeQrCodeResp(); - ApiR bR = bqrCodeHandle.handle(request); if (bR.isSuccess()) { - BQrcodeReconizeResp bQrcodeReconizeResp = bR.getData(); - List codesResultDTOS = bQrcodeReconizeResp.getCodesResult(); - for (BQrcodeReconizeResp.CodesResultDTO codesResultDTO : codesResultDTOS) { - resp.setQrCodesData(codesResultDTO.getText()); - resp.setType(resp.getType()); - return R.ok().setData(resp); - } + return R.ok().setData(bR.getData()); } - - ARecognizeQrCodeRequest arecognizeQrCodeRequest = new ARecognizeQrCodeRequest(); - arecognizeQrCodeRequest.setImageBase64(request.getImageBase64()); - arecognizeQrCodeRequest.setImageUrl(request.getImageUrl()); - - ApiR aR = arecognizeQrCodeHandle.handle(arecognizeQrCodeRequest); - - if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { - RecognizeQrCodeResponse response = aR.getData(); - RecognizeQrCodeResponseBody responseBody = response.getBody(); - RecognizeQrCodeResponseBody.RecognizeQrCodeResponseBodyData responseBodyData = responseBody.getData(); - List responseBodyDataElements = responseBodyData.getElements(); - if (CollectionUtils.isNotEmpty(responseBodyDataElements)) { - RecognizeQrCodeResponseBody.RecognizeQrCodeResponseBodyDataElements responseBodyDataElements1 = responseBodyDataElements.get(0); - - List results = responseBodyDataElements1.getResults(); - RecognizeQrCodeResponseBody.RecognizeQrCodeResponseBodyDataElementsResults responseBodyDataElementsResults = results.get(0); - resp.setQrCodesData(responseBodyDataElementsResults.getQrCodesData()); - resp.setRate(responseBodyDataElementsResults.getRate()); - resp.setSuggestion(responseBodyDataElementsResults.getSuggestion()); - resp.setLabel(responseBodyDataElementsResults.getLabel()); - return R.ok().setData(resp); - } - } - - - return R.error(); + return R.error(bR.getErrorMsg()); } }