又找到一个纯Java的OCR项目,识别的格式还挺多

01 引言

前两天分享一个**RapidOCR**的项目,今天又发现一款OCR项目,Python零依赖,纯Java项目, 不用GPU也能跑,这不就是为我们这种 Java 后端量身定做的吗Java后端调用OCR又多了一份选择!

02 简介

JiaJiaOCR 是一个纯 Java 的 OCR 引擎,在通用文字识别基础上,新增了手写 OCR、版面检测、表格检测与识别,覆盖印刷体 / 手写体 / 文档结构解析全场景。

它的核心优势:

  • 纯 Java :没有 JNI、没有 EXE/DLL、不需要 Python 运行时,一个 JAR 全搞定,直接 Maven 引就能进 Spring 项目。
  • CPU 优先 :官方明确「推荐 CPU」,不依赖 GPU/CUDA,普通服务器就能跑,部署成本极低。
  • 跨平台 + 信创 :支持 x86_64 和 ARM,覆盖 Windows / Linux / macOS,还能跑在麒麟、UOS 等国产系统上。
  • 懒加载:模型按需加载,用到哪个功能才加载哪个,启动快、内存省。
  • 模型内嵌 :模型直接打进 JAR 里,开箱即用;也能用 -Djiajia.model.dir 指定外部模型目录(支持热更新)。
  • 线程安全:单个实例可并发批量识别,多线程共享一个就够了。

GitHub 地址:https://github.com/jiangnanboy/JiaJiaOCR

03 安装

JiaJiaOCR该项目没有上传到中央仓库,需要我们自行构建。

3.1 构建

bash 复制代码
mvn clean package -DskipTests

3.2 引入辅助依赖

在 pom.xml 里加这几个核心依赖(pdfbox 仅 PDF 识别才需要):

xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.microsoft.onnxruntime</groupId>
        <artifactId>onnxruntime</artifactId>
        <version>1.19.0</version>
    </dependency>
    <dependency>
        <groupId>org.openpnp</groupId>
        <artifactId>opencv</artifactId>
        <version>4.9.0-0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>3.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.17.0</version>
    </dependency>
</dependencies>

3.3 需要加载模型

https://github.com/jiangnanboy/JiaJiaOCR/releases/tag/models下放了需要模型,我们需要提前下载下来。

可以只放到项目的classpath下的models。

04 测试

JiaJiaOCR提供了多种识别方式:

  • 通用识别:中英文 / 数字 / 符号混排,返回文本、置信度、8 点坐标。
  • 手写识别 :专为中文手写优化,标准数据集 92%+ 准确率,比 Tesseract 的手写能力强太多。
  • 文本行检测:只定位文本行位置(不识别内容),方便做版面预处理。
  • 版面检测:识别标题、段落、图片、表格并给出坐标
  • 表格检测:定位表格区域 + 置信度。
  • 表格识别 :解析表结构为 HTML + 结构化 JSON(行列级),直接对接你后端的表单 / 入库逻辑。
  • PDF 识别:多页 PDF 自动转图后批量 OCR。
  • 任务取消 :长任务可传 CancellationToken,另一个线程调 cancel() 中断。
  • 多线程批量:单个实例预热后,多线程并发调用共享实例即可,无需每线程 new 一个。

我们使用通用识别测一个就好了:

java 复制代码
public class TestjiajiaOcr {

    String imagePath = "src/main/images/u.jpeg";

    @Test
    void test01() throws OrtException {
        try (JiaJiaOCR ocr = JiaJiaOCR.builder()) {
            List<Pair<Text, Box>> results = ocr.recognizeGeneralText(imagePath);
            String content = "";
            for (Pair<Text, Box> item : results) {
                content += item.getLeft().getText();
            }
            System.out.println(content);
        }
    }
}

识别目标:

识别结果:

GitHub上提啊提供了其他案例,感兴趣的老铁可以去测试。

05 小结

JiaJiaOCR给纯 Java 团队提供了另一种OCR选择,虽然在GitHub上的star数只有105,不妨碍它为我们提供的可使用的工具。

相关推荐
小灰灰搞电子1 小时前
Rust+Slint 实现动态流光边框源码分享
开发语言·前端·rust·流光边框
学编程就要猛1 小时前
MCP(Model Context Protocol)
java·springai
用户072367066601 小时前
Apollo 配置热更新落地:让 Spring Boot @ConfigurationProperties Bean 不重启即时生效
java
包小黑1 小时前
Python 转 EXE (实用工具)
开发语言·python
2601_970703831 小时前
中国除湿机与湿度控制行业研究报告
java·大数据·人工智能
我命由我123451 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
额额额对了1 小时前
【项目实战】从IMX6ULL环境监测到N647 AI视觉加速
linux·开发语言·嵌入式硬件
深入云栈2 小时前
Netty 4.2.x 源码深度解析 (二十一):Pipeline 事件传播 —— Inbound 与 Outbound 的双向流转
java·后端·架构
yiyideda2 小时前
高效的医疗票据OCR+查验怎么做?字段补全、可信标注与查验返回结构
计算机视觉·ocr·医疗票据识别·医疗ocr·医疗发票查验·项目审核