1.通用场景文字识别

This commit is contained in:
jiangtd 2026-05-25 01:43:43 +08:00
parent d9ceec0103
commit d49ae0b390
25 changed files with 451 additions and 452 deletions

View File

@ -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;
}

View File

@ -74,7 +74,7 @@ public class BAccurateHandle extends BaiduBaseHandle<BAccurateRequest, BAccurate
sb.append("&eng_granularity=" + bAccurateRequest.getEngGranularity());
}
if (StringUtils.isNotBlank(bAccurateRequest.getRecognizeGranularity())) {
sb.append("&recognize_granularity=" + bAccurateRequest.getDetectDirection());
sb.append("&recognize_granularity=" + bAccurateRequest.getRecognizeGranularity());
}
if (StringUtils.isNotBlank(bAccurateRequest.getDetectDirection())) {
sb.append("&detect_direction=" + bAccurateRequest.getDetectDirection());

View File

@ -60,7 +60,7 @@ public class BHandwritingHandle extends BaiduBaseHandle<AHandwritingRequest, AHa
sb.append("&detect_direction=").append(aHandwritingRequest.getDetectDirection());
}
if (StringUtils.isNotBlank(aHandwritingRequest.getDetectAlteration())) {
sb.append("&detect_alteration=").append(aHandwritingRequest.getLanguageType());
sb.append("&detect_alteration=").append(aHandwritingRequest.getDetectAlteration());
}
if (StringUtils.isNotBlank(aHandwritingRequest.getLanguageType())) {
sb.append("&language_type=").append(aHandwritingRequest.getLanguageType());

View File

@ -0,0 +1,76 @@
package com.heyu.api.baidu.handle.common;
import com.heyu.api.data.annotation.CustomPath;
import com.heyu.api.data.utils.StringUtils;
import com.heyu.api.baidu.BaiduBaseHandle;
import com.heyu.api.baidu.request.common.BPaddleOcrRequest;
import com.heyu.api.baidu.response.common.BPaddleOcrResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* PaddleOCR-VL 文档解析提交 Handle
*
* 基于百度自研OCR大模型PaddleOCR-VL的文档解析能力
* 支持将PDF/图片中的文字表格公式等结构化输出
* 异步任务提交后返回 taskId需通过 BPaddleOcrQueryHandle 查询结果
*/
@Component
@Slf4j
@CustomPath("paddleOcr")
public class BPaddleOcrHandle extends BaiduBaseHandle<BPaddleOcrRequest, BPaddleOcrResp> {
@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();
}
}

View File

@ -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<BPaddleOcrQueryRequest, BPaddleOcrQueryResp> {
@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();
}
}

View File

@ -42,10 +42,10 @@ public class BSealHandle extends BaiduBaseHandle<BSealRequest, BSealResp> {
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();
}

View File

@ -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&timestamp=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中的表格结构化输出支持返回Excelbase64编码和结构化JSON数据
*/
@Component
@Slf4j
@CustomPath("table")
public class BTableHandle extends BaiduBaseHandle<ATableRequest, ATableResp> {
@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();
}
}

View File

@ -34,8 +34,7 @@ public class BParserTextHandle extends BaiduBaseHandle<BParserTextRequest, BPars
return "fileData和fileUrl不能同时为空";
}
if (StringUtils.isBlank(bParserTextRequest.getFileName())
|| StringUtils.isBlank(bParserTextRequest.getFileName())
|| bParserTextRequest.getFileUrl().endsWith(".pdf")) {
|| !bParserTextRequest.getFileName().endsWith(".pdf")) {
return "fileName 不能为空 或 fileName 的后缀必须是 .pdf";
}

View File

@ -1,14 +1,16 @@
package com.heyu.api.baidu.request.common;
import com.heyu.api.baidu.response.BBaseResp;
import com.heyu.api.baidu.request.BaiduImageUrlRequest;
import lombok.Data;
/**
* https://console.bce.baidu.com/support/?_=1740219852952&timestamp=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
*
* 表格识别请求参数
*/
@Data
public class ATableRequest extends BBaseResp {
public class ATableRequest extends BaiduImageUrlRequest {
/**

View File

@ -0,0 +1,12 @@
package com.heyu.api.baidu.request.common;
import com.heyu.api.baidu.request.BTaskIdRequest;
import lombok.Data;
/**
* PaddleOCR-VL 文档解析查询请求
*/
@Data
public class BPaddleOcrQueryRequest extends BTaskIdRequest {
}

View File

@ -0,0 +1,36 @@
package com.heyu.api.baidu.request.common;
import com.heyu.api.baidu.request.convert.BParserTextRequest;
import lombok.Data;
/**
* PaddleOCR-VL 文档解析提交请求
*
* 基于百度自研OCR大模型PaddleOCR-VL的文档解析能力
* 支持将PDF/图片中的文字表格公式等结构化输出
*/
@Data
public class BPaddleOcrRequest extends BParserTextRequest {
/** 是否对文档进行版面分析「default=true」 */
private String layoutAnalysis = "true";
/** 是否识别表格图片「default=true」 */
private String recgTables = "true";
/** 是否对文档中的公式进行识别公式以Latex格式返回「default=true」 */
private String recgFormula = "true";
/** 是否识别印章「default=false」 */
private String recogSeal = "false";
/** 是否返回每行识别结果的置信度「default=false」 */
private String lineProbability = "false";
/** 是否分析文档版面包括layout图、表、标题、段落的分析输出「default=false」 */
private String pageAnalysis = "false";
/** 是否分析文档版面属性栏、页眉、页脚、页码、脚注的分析输出「default=false」 */
private String attributeAnalysis = "false";
}

View File

@ -0,0 +1,77 @@
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;
import java.util.List;
/**
* PaddleOCR-VL 文档解析查询响应
*
* 查询解析结果包含页面级别的文字表格公式等结构化信息
*/
@NoArgsConstructor
@Data
public class BPaddleOcrQueryResp extends BBaseResp {
@JsonProperty("error_code")
private Integer errorCode;
@JsonProperty("error_msg")
private String errorMsg;
@JsonProperty("log_id")
private String logId;
@JsonProperty("task_progress")
private String taskProgress;
@JsonProperty("result")
private ResultDTO result;
@NoArgsConstructor
@Data
public static class ResultDTO {
@JsonProperty("pages")
private List<PagesDTO> pages;
}
@NoArgsConstructor
@Data
public static class PagesDTO {
@JsonProperty("page_num")
private Integer pageNum;
@JsonProperty("text")
private String text;
@JsonProperty("tables")
private List<TablesDTO> tables;
@JsonProperty("formulas")
private List<FormulasDTO> formulas;
@NoArgsConstructor
@Data
public static class TablesDTO {
@JsonProperty("html")
private String html;
@JsonProperty("position")
private List<Integer> position;
}
@NoArgsConstructor
@Data
public static class FormulasDTO {
@JsonProperty("latex")
private String latex;
@JsonProperty("position")
private List<Integer> position;
}
}
}

View File

@ -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;
}
}

View File

@ -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<AccurateBasicResp> respList = new ArrayList<>();
ApiR<BAccurateBasicResp> bR = bAccurateBasicHandle.handle(request);
if (bR.isSuccess()) {
BAccurateBasicResp bAccurateBasicResp = bR.getData();
List<BAccurateBasicResp.WordsResultDTO> 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());
}

View File

@ -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<DocAnalysisOfficeResp> respList = new ArrayList<>();
ApiR<BDocAnalysisOfficeResp> 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());
}

View File

@ -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<HandwritingResp> respList = new ArrayList<>();
ApiR<AHandwritingResp> apiR = aHandwritingHandle.handle(request);
if (apiR.isSuccess()) {
AHandwritingResp aHandwritingResp = apiR.getData();
List<AHandwritingResp.WordsResultDTO> 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());
}

View File

@ -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&timestamp=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<NumbersResp> respList = new ArrayList<>();
ApiR<ANumbersResp> bR = bNumbersHandle.handle(request);
if (bR.isSuccess()) {
ANumbersResp aNumbersResp = bR.getData();
List<ANumbersResp.WordsResultDTO> 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());

View File

@ -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&timestamp=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<SealResp> respList = new ArrayList<>();
ApiR<BSealResp> bR = bSealHandle.handle(request);
if (bR.isSuccess()) {
BSealResp bSealResp = bR.getData();
List<BSealResp.ResultDTO> 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<SealOtherResp> 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());
}
}

View File

@ -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<SmartStructResp> respList = new ArrayList<>();
ApiR<ASmartStructResp> bR = bSmartStructHandle.handle(request);
if (bR.isSuccess()) {
ASmartStructResp aSmartStructResp = bR.getData();
ASmartStructResp.WordsResultDTO wordsResultDTO = aSmartStructResp.getWordsResult();
ASmartStructResp.WordsResultDTO.StructInfoDTO structInfoDTO = wordsResultDTO.getStructInfo();
List<ASmartStructResp.WordsResultDTO.StructInfoDTO.GroupDTO> 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());
}
}

View File

@ -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&timestamp=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<WebImageLocLineResp> respList = new ArrayList<>();
ApiR<BWebImageLocResp> 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<WebImageLocLineResp.CharsDTO> 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());
}
}

View File

@ -48,15 +48,7 @@ public class ParserTextController extends BaseController {
@CacheResult
public R parse(ParserTextReq request) {
if (StringUtils.isNotBlank(request.getTaskId())) {
ApiR<BParserTextResp> 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<BParserTextResp> bR = bParserTextHandle.handle(request);
if (bR.isSuccess()) {
BParserTextResp bParserTextResp = bR.getData();
return R.ok().setData(bParserTextResp.getResult());
}
return R.error(bR.getErrorMsg());
}
}

View File

@ -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<String, Object> 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<ATableResp> 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<String, Object> 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<BPaddleOcrQueryResp> 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<BPaddleOcrResp> 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 {
}
}

View File

@ -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_resultwords_result_numlog_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<String> 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<String> 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<BGeneralBasicResp> aR = bGeneralBasicHandle.handle(bGeneralBasicRequest);
List<String> 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());

View File

@ -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<String> 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<BDocAnalysisOfficeResp> aR = bDocAnalysisOfficeHandle.handle(bGeneralBasicRequest);
List<HighPrecisionOcrResp> 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());
}
}

View File

@ -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&timestamp=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<BQrcodeReconizeResp> bR = bqrCodeHandle.handle(request);
if (bR.isSuccess()) {
BQrcodeReconizeResp bQrcodeReconizeResp = bR.getData();
List<BQrcodeReconizeResp.CodesResultDTO> 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<RecognizeQrCodeResponse> 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<RecognizeQrCodeResponseBody.RecognizeQrCodeResponseBodyDataElements> responseBodyDataElements = responseBodyData.getElements();
if (CollectionUtils.isNotEmpty(responseBodyDataElements)) {
RecognizeQrCodeResponseBody.RecognizeQrCodeResponseBodyDataElements responseBodyDataElements1 = responseBodyDataElements.get(0);
List<RecognizeQrCodeResponseBody.RecognizeQrCodeResponseBodyDataElementsResults> 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());
}
}