diff --git a/api-third/src/main/java/com/heyu/api/baidu/response/educational/BDocAnalysisResp.java b/api-third/src/main/java/com/heyu/api/baidu/response/educational/BDocAnalysisResp.java index 3f81380..f1ffd57 100644 --- a/api-third/src/main/java/com/heyu/api/baidu/response/educational/BDocAnalysisResp.java +++ b/api-third/src/main/java/com/heyu/api/baidu/response/educational/BDocAnalysisResp.java @@ -12,7 +12,6 @@ import java.util.List; * https://console.bce.baidu.com/support/?_=1740575657628×tamp=1740583045120#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E6%95%99%E8%82%B2%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fdoc_analysis&method=post * *试卷分析与识别 - * */ @NoArgsConstructor @Data diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/educational/DocAnalysisController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/educational/DocAnalysisController.java new file mode 100644 index 0000000..ff31e76 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/educational/DocAnalysisController.java @@ -0,0 +1,90 @@ +package com.heyu.api.controller.educational; + + +import com.heyu.api.baidu.handle.educational.BDocAnalysisHandle; +import com.heyu.api.baidu.request.educational.BDocAnalysisRequest; +import com.heyu.api.baidu.response.educational.BDocAnalysisResp; +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.doc.DocAnalysisResp; +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/?_=1740575657628×tamp=1742719522919#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E6%95%99%E8%82%B2%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fdoc_analysis&method=post + * + * 试卷分析与识别 + * + * + * 接口描述 + * 可对文档版面进行分析,输出图、表、标题、文本的位置,并输出分版块内容的OCR识别结果,支持中、英两种语言,手写、印刷体混排多种场景,支持公式识别、手写竖式识别。 + * + */ +@Slf4j +@RestController +@RequestMapping("/doc") +@NotIntercept +public class DocAnalysisController { + + @Autowired + private BDocAnalysisHandle bDocAnalysisHandle; + + + @RequestMapping("/analysis") + @CacheResult + public R analysis(BDocAnalysisRequest request) { + + DocAnalysisResp resp = new DocAnalysisResp(); + + ApiR bR = bDocAnalysisHandle.handle(request); + if (bR.isSuccess()) { + BDocAnalysisResp bDocAnalysisResp = bR.getData(); + + resp.setResultsNum(bDocAnalysisResp.getResultsNum()); + resp.setLayoutsNum(bDocAnalysisResp.getLayoutsNum()); + resp.setImgDirection(bDocAnalysisResp.getImgDirection()); + + List resultsDTOList = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(bDocAnalysisResp.getResults())) { + + for (BDocAnalysisResp.ResultsDTO result : bDocAnalysisResp.getResults()) { + DocAnalysisResp.ResultsDTO resultsDTO = new DocAnalysisResp.ResultsDTO(); + resultsDTO.setWordsType(result.getWordsType()); + resultsDTO.setWords(result.getWordsType()); + resultsDTOList.add(resultsDTO); + } + } + + resp.setResults(resultsDTOList); + + + if (CollectionUtils.isNotEmpty(resp.getFormWords())) { + List formWords = new ArrayList<>(); + for (String formWord : resp.getFormWords()) { + formWords.add(formWord); + } + resp.setFormWords(formWords); + } + + if (CollectionUtils.isNotEmpty(resp.getWords())) { + List words = new ArrayList<>(); + for (String word : resp.getWords()) { + words.add(word); + } + resp.setWords(words); + } + } + return R.error(); + } + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/educational/PenController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/educational/PenController.java new file mode 100644 index 0000000..e3f1563 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/educational/PenController.java @@ -0,0 +1,77 @@ +package com.heyu.api.controller.educational; + + +import com.heyu.api.baidu.handle.educational.BPenHandle; +import com.heyu.api.baidu.request.educational.BPenRequest; +import com.heyu.api.baidu.response.educational.BPenResp; +import com.heyu.api.controller.BaseController; +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.doc.PenResp; +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; + +/*** + * + * + * https://console.bce.baidu.com/support/?_=1740575657628×tamp=1742720986912#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E6%95%99%E8%82%B2%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fpen&method=post + * + * + * 词典笔文字识别 + * + * + * + 接口描述 + 面向词典笔应用场景,是词典笔的基本功能之一,主要用于扫描文字并识别,为字词查询和翻译提供文本信息支撑。支持中英文识别、印刷手写混排识别,满足多种复杂背景下的文字扫描识别。 + + + + */ +@Slf4j +@RestController +@RequestMapping("/doc") +@NotIntercept +public class PenController extends BaseController { + + + @Autowired + private BPenHandle bPenHandle; + + + @RequestMapping("/pen") + @CacheResult + public R pen(BPenRequest request) { + List respList = new ArrayList<>(); + + ApiR bR = bPenHandle.handle(request); + if (bR.isSuccess()) { + BPenResp bPenResp = bR.getData(); + for (BPenResp.WordsResultDTO wordsResultDTO : bPenResp.getWordsResult()) { + PenResp penResp = new PenResp(); + penResp.setWords(wordsResultDTO.getWords()); + + PenResp.ProbabilityDTO probabilityDTO = new PenResp.ProbabilityDTO(); + BPenResp.WordsResultDTO.ProbabilityDTO probability = wordsResultDTO.getProbability(); + + + probabilityDTO.setAverage(probability.getAverage()); + probabilityDTO.setVariance(probability.getVariance()); + probabilityDTO.setMin(probability.getMin()); + + penResp.setProbability(probabilityDTO); + + } + + return R.ok().setData(respList); + } + + return R.error(bR.getErrorMsg()); + } +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/doc/DocAnalysisResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/doc/DocAnalysisResp.java new file mode 100644 index 0000000..ae946e3 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/doc/DocAnalysisResp.java @@ -0,0 +1,38 @@ +package com.heyu.api.resp.doc; + + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + +import java.util.List; + +@Data +public class DocAnalysisResp extends BaseResp { + + + private Integer resultsNum; // 识别结果数,表示results的元素个数 + private Integer imgDirection; // detect_direction=true 时返回。检测到的图像朝向,0 :正向; 1:逆时针旋转90度;2:逆时针旋转180度;3:逆时针旋转270度 + private Integer layoutsNum; // 版面分析结果数,表示layout的元素个数 + private List results; // 识别结果数组 + private List formWords; // 识别结果中的公式数组,包括公式位置和公式内容,recg_formula=true时返回 + + private List words; // 将普通文字和公式融合后的识别结果数组,recg_formula=true时返回 + + @Data + public static class ResultsDTO { + /** + * 文字类型。 + * 默认:印刷文字识别 + * = handwring_only:手写文字识别 + * = handprint_mix: 手写印刷混排识别 + */ + private String wordsType; + /*** + * 文字 + */ + private String words; + + } + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/doc/PenResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/doc/PenResp.java new file mode 100644 index 0000000..a97dc84 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/doc/PenResp.java @@ -0,0 +1,24 @@ +package com.heyu.api.resp.doc; + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +public class PenResp extends BaseResp { + + private ProbabilityDTO probability; + // 识别结果字符串 + private String words; + + @NoArgsConstructor + @Data + public static class ProbabilityDTO { + // 识别结果中每一行的置信度值,包含average:行置信度平均值,variance:行置信度方差,min:行置信度最小值,当 probability=true 时返回该字段 + + private Double average; + private Double min; + private Double variance; + } + +}