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

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

http://www.xdnf.cn/news/14516.html

相关文章:

  • 基于CL_PSO与BP神经网络分类模型的特征选择方法研究(Python实现)
  • 基于CATIA轴系的最小边界曲面自动化生成技术深度解析
  • linux多线程之POSIX信号量
  • PHP Swoft2 框架精华系列:Config 配置解析,使用说明
  • 如何在 Elementary OS 上安装 Google Chrome 浏览器
  • 智慧流水线在ESOP数字工厂中的作用
  • 迈向通用具身智能:具身智能的综述与发展路线
  • 前端如何调用外部api获取省市区数据
  • leetcode138-随机链表的复制
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第四篇(排名不分先后)】
  • 【C++】模板入门
  • LeetCode HOT 100
  • C语言空指针异常在Java中的解决方案
  • 智慧流水线在esop数字工厂中的作用?
  • GO语言---短变量声明
  • 手写简版React-router
  • DeepSeek提示词指南:从基础到高阶的全面解析
  • 160. 相交链表
  • MGR集群场景恢复处理
  • LoRA 与传统矩阵分解的比较
  • Ubuntu24.04一键安装ROS2
  • PoE供电异常如何排查?
  • React-router 基础使用
  • Markdown 使用 mermaid 绘制图
  • 基于Webserver的数据采集
  • Redis Cluster集群机制原理
  • 安卓9.0系统修改定制化____支持安卓9.0系统修改的一些解包 打包工具解析 基础篇 三
  • TC3xx学习笔记-启动过程详解(二)
  • 最新文章 支持一下!!
  • Datawhale---AI办公实践与应用---Cpt2-用讯飞智文做一个小案例