1.通用场景文字识别
This commit is contained in:
parent
d9ceec0103
commit
d49ae0b390
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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<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();
|
||||
}
|
||||
}
|
||||
@ -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";
|
||||
}
|
||||
|
||||
|
||||
@ -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×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
|
||||
*
|
||||
* 表格识别请求参数
|
||||
*/
|
||||
@Data
|
||||
public class ATableRequest extends BBaseResp {
|
||||
public class ATableRequest extends BaiduImageUrlRequest {
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -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 {
|
||||
}
|
||||
@ -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";
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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<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());
|
||||
|
||||
|
||||
@ -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<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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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<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());
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<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());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user