行业知识
Java使用PaddleOCR,这可能是Java目前最通用的OCR
2026-10-28 04:38:34
来源:互联网转载
RapidOcr-Java
项目起源
- 现有的JavaOCR工具包识别效果差强人意,PaddleOCR在实现前沿算法的基础上,考虑精度与速度的平衡,进行模型瘦身和深度优化,使其尽可能满足产业落地需求。
- PaddleOCR官方并未提供Java版本,而RapidOcr解决了这个问题,其提供了Kotlin和Java混合版本的Demo-onnx和Demo-ncnn
- 而实际使用过程中 项目中并不想再引入Kotlin、不想了解OCR相关知识,开箱即用、不想额外再部署OCR服务
因此本项目将Kotlin部分移除,并在此基础上加以完善且提供了更友好的的调用方法,更方便java开发者直接进行使用。
✨如果该项目对您有帮助,您的star是我不断优化的动力!!!
- github点击前往(有最新代码)
- gitee点击前往(更新稍慢)
项目特点
- 纯Java代码调用RapidOcr
- 集成ncnn和onnx推理引擎方式
- 均使用CPU版本,GPU版本请自行编译
- 支持Mac、Windows、Linux等多平台,详细支持的系统请查看版本说明(代码仓库查看)
快速开始
项目提供了JavaEE 和 SpringBoot 的使用Demo,仅作参考(可以拉取下来运行试一下)
1️⃣ 添加依赖
此种方式会根据你使用的系统自动使用对应的jar包,目前支持的系统请查看版本说明
io.github.mymonstercat rapidocr 0.0.7 io.github.mymonstercat rapidocr-onnx-platform 0.0.7 io.github.mymonstercat rapidocr-ncnn-platform 0.0.7
2️⃣ 使用示例
public class Main { public static void main(String[] args) { InferenceEngine engine = InferenceEngine.getInstance(Model.ONNX_PPOCR_V3); OcrResult ocrResult = engine.runOcr("/images/test.png"); System.out.println(ocrResult.getStrRes().trim()); }}更多使用示例请参考使用示例
3️⃣ 添加打印日志(可选)
项目中添加了日志打印,方便打印OCR日志,请自行添加日志实现(springboot自带,可以不用添加)
org.slf4j slf4j-simple 2.0.3 io.github.mymonstercat rapidocr slf4j-api org.slf4j
添加后效果如下:
⚠️ 注意:当前JVM启动时只能同时启动一种推理引擎,以第一次调用runOcr方法时的引擎配置为准
进阶使用
请前往代码仓库查看
- 参数调优、版本说明、分支说明
- 如何打包jar包在Linux系统上运行
- 如何在CentOS7或其他低版本Linux系统上运行
- SpringBoot示例和普通Java程序示例
- JVM下不同PaddleOCR调用方式性能比对
- 银河麒麟v10编译onnx-arm64
TODO
- 根据系统版本自适应加载动态库
- 动态库集成到jar中
- 是否删除临时文件夹配置为可选项
- CentOS7升级指引
- 添加日志,规范日志打印
- ONNX支持Mac-Arm64
- 支持Docker镜像
- Maven仓库提供packages
- SpringBoot下,以配置文件方式改造
- jvm未退出场景连续调用识别结果集乱码#1
- 集成ONNX#2,感谢nn200433及tika-server
- 多模块打包#6
- 多线程情况下库和模型可能重复加载、编译目标jdk版本改为1.8,感谢FlyInWind1
- 基于arm64的银河麒麟环境,提供linux-arm64下onnx运行库(编译过程详见进阶使用),感谢sandywalker
- 添加英语日志,感谢litongjava
- 支持传入bitmap和image的二进制数据,感谢scvzerng
FAQ
Q1:CentOS7无法运行?
- 请参考CentOS7升级GCC
- 其他系统思路同上,主要就是环境问题
Q2:如何传入二进制数据,而非图片路径?
由于缺少其他系统的设备,因此暂不提供最新的jar包(也就用v0.0.7传不了二进制),可参考以下步骤自行编译可传入二进制数据的jar包
- star本项目(感谢)
- 编译动态库
- 使用该项目进行编译
- 如何自行编译动态库
- 拉取本项目最新代码到本地
- 找到对应模块,例如我是mac-arm64,在该路径下替换上一步编译后的动态库
- 项目执行打包命令
- 传入二进制数据示例代码
如果你是mac-arm64的设备,直接 拉取项目->运行测试用例 即可,也就是仅mac-arm64的动态库是支持二进制传入的
Q3:如何使用其他版本(如服务器版本)的模型?
- 拉取本项目最新代码到本地
- 在该路径下放入模型文件
- 模型中添加对应的配置
- 项目执行打包命令
Q4:如何使用其他版本(如服务器版本)的模型?
- 如何更新模型
如有其他问题请提issue,我会尽快解决。
鸣谢
- RapidOCR
- PaddleOCR
开源许可
使用 Apache License 2.0
- 如何更新模型