当前位置: 首页 > news >正文

PaddleOCR项目实战(2):SpringBoot服务开发之接口设计

1 新建项目

新建一个springboot项目,引用依赖如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.16</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>ocrspringboottest</artifactId><version>1.0-SNAPSHOT</version><name>ocrspringboottest</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.yitter</groupId><artifactId>yitter-idgenerator</artifactId><version>1.0.6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.8.3</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.6</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>1.8.6</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

2 接口设计

接口参数:图⽚使⽤Base64编码后,作为参数,Post⽅式进⾏上传。使⽤Base64编码上传图⽚,服务端接⼝实现和调⽤端都相对multipart/form-data⽅式简单灵活。服务端需要将Base64编码的图⽚字符串,转换成图⽚,因此还需要知道图⽚的格式。综上需要两个参数 imgBase64和imgType,分别表示 Base64编码的图⽚字符串和图⽚格式。

编写接口参数的Param对象:

package org.example.domain.param;import lombok.Data;/*** @description: OCR 接口参数*/
@Data
public class OcrParam {/*** 图片base64编码后的字符串*/private String imgBase64;/*** 图片格式*/private String imgType;
}

返回参数:根据PaddleOCR识别图⽚返回的结果及参考百度通⽤⽂字识别接⼝和结合实际使⽤场景。

普通⽂本识别接⼝:

  1. 返回位置坐标、⽂本、识别精度均返回接⼝
  2. 只返回⽂本和识别精度接⼝
  3. 只返回⽂本接口

⻋牌/身份证识别接⼝:

  1. 返回⽂本和识别精度接⼝
  2. 只返回⽂本接⼝

DTO对象封装如下:

(1)返回识别结果包含文本和识别精度的接口对象

package org.example.domain.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @description: 返回识别结果包含文本和可信度*/@NoArgsConstructor
@AllArgsConstructor
@Data
public class TextAccuracyDto {/*** 识别文本*/private String text;/*** 识别可信度*/private String accuracy;
}

(2)返回位置坐标、⽂本、识别精度均返回接⼝

package org.example.domain.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Map;/*** @description:识别结果包含文本、可信度、字符位置*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TextAccuracyLocationDto {/*** 识别的字符文本*/private String text;/*** 可信度*/private String accuracy;/*** 识别的字符文本在图片上的位置,按照顺时针 左上、右上、右下、左下*/private Map<String,OcrPoint> location;
}

(3)只返回⽂本接⼝

package org.example.domain.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @description:只返回识别的文本*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class TextOcrDto {/*** 识别的文本*/private String text;
}

(4)返回文本字符的像素坐标

package org.example.domain.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @description:文本字符的像素坐标*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class OcrPoint {/*** 横坐标的值*/private String x;/*** 纵坐标的值*/private String y;
}

相关文章:

  • 知识体系_研究模型_价格敏感度测试模型(PSM)
  • 【SpringCloud】2.0 服务治理——nacos
  • 面向对象设计原则
  • 【论文解读】LLaMA-Berry: 将“refine”当作动作解决数学推理
  • MySQL 根据时间自动创建分区脚本
  • 数据库学习(七)——MySQL执行引擎
  • DeepSeek提示词指南:从基础到高阶的全面解析
  • LlamaRL 大规模分布式异步强化学习框架
  • Leetcode 3585. Find Weighted Median Node in Tree
  • 【python深度学习】Day 54 Inception网络及其思考
  • 基于C#部署YOLOv5目标检测模型核心技术深度解析
  • 如何让DeepSeek-R1-Distill-Qwen-32B支持Function calling
  • Hudi 与 Hive 集成
  • 阿里开源的MaskSearch:教AI学会“自己找答案”的魔法书
  • 域与对象的生命周期
  • WSL备份与还原
  • Python函数基础知识(2/3)
  • SAP顾问职位汇总(第24周)
  • IDA动态调试环境配置全流程
  • Arduino入门教程:6、计时与定时
  • 编辑网页的工具有哪些/江门seo外包公司
  • 广州手机网站建设公司/快速优化网站排名软件
  • 如何做网站小编/百度指数官网查询
  • 网站开发时数据库的工作/安卓优化大师手机版下载
  • 网页小游戏网址大全/seo的中文含义
  • 做网站排名公司推荐/怎么制作链接网页