小工具知识网

当前位置: 首页 > 行业知识 > Java使用PaddleOCR,这可能是Java目前最通用的OCR

行业知识

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

上一篇:2019SQL怎么创建服务器?

下一篇:揭秘京东投诉解决纠纷的高效途径与策略,维护权益,投诉不再难!