纯 Java 实现的 OCR 推理系统:JiaJiaOCR,告别 exe/dll 依赖!

一、为什么需要JiaJiaOCR?

在OCR(光学字符识别)领域,开源项目多以Python开发为主。这给Java开发者带来了不少困扰:

  • 要么调用外部exe可执行文件,增加部署复杂度;

  • 要么依赖特定平台的dll动态链接库,跨平台兼容性差;

  • 调试困难,外部依赖导致问题定位复杂。

为解决Java开发者的痛点,JiaJiaOCR应运而生------一个完全基于Java实现的OCR推理系统,无需调用任何exe或dll文件,让Java开发者轻松集成OCR功能,实现跨平台无缝部署!

二、JiaJiaOCR核心优势

  1. 纯Java实现:原生Java代码编写,易于Java开发者使用;

  2. 跨平台支持:兼容Windows和Linux x86环境,一次开发,多处运行;

  3. 低门槛集成:仅需引入jar包和少量依赖,即可快速接入项目;

  4. 功能完整:支持通用文本识别、文本行检测,满足多样化OCR需求;

  5. 轻量高效:基于ONNX Runtime和DJL框架,推理性能优异。

三、快速开始:集成JiaJiaOCR

1. 环境要求

  • JDK 8及以上版本;

  • 支持Windows/Linux x86操作系统。

2. 引入依赖

在项目的pom.xml中添加以下依赖(完整依赖配置,直接复制即可):

复制代码
<dependencies>    <!-- ONNX Runtime:用于模型推理 -->    <dependency>        <groupId>com.microsoft.onnxruntime</groupId>        <artifactId>onnxruntime</artifactId>        <version>1.19.0</version>    </dependency>    <!-- DJL MXNet引擎:深度学习框架支持 -->    <dependency>        <groupId>ai.djl.mxnet</groupId>        <artifactId>mxnet-engine</artifactId>        <version>0.31.0</version>    </dependency>    <!-- OpenCV:图像处理 -->    <dependency>        <groupId>ai.djl.opencv</groupId>        <artifactId>opencv</artifactId>        <version>0.31.0</version>    </dependency>    <!-- DJL核心API:深度学习模型管理 -->    <dependency>        <groupId>ai.djl</groupId>        <artifactId>api</artifactId>        <version>0.31.0</version>    </dependency></dependencies>

3. 下载JiaJiaOCR jar包

前往项目GitHub仓库的releases页面,下载JiaJiaOCR 1.0版本的jar包,放入项目的依赖目录中。

4. 核心功能示例

JiaJiaOCR提供了两大核心功能:通用文本识别文本行检测。以下是完整的使用示例:

复制代码
import com.jiajia.common_object.*;import com.jiajia.core.JiaJiaOCR;import org.apache.commons.lang3.tuple.Pair;import org.opencv.core.Mat;import org.opencv.core.MatOfPoint;import org.opencv.core.Point;import org.opencv.core.Scalar;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;import java.util.ArrayList;import java.util.List;public class JiaJiaOCRDemo {    public static void main(String... args) {        String imgPath = "38.jpg"; // 替换为你的图片路径
        // 功能1:通用文本识别(识别图片中的所有文字及位置)        generalOCRTest(imgPath);
        // 功能2:文本行检测(检测图片中的文本行区域)        textLineDetText(imgPath);    }    /**     * 通用文本识别示例     * @param imgPath 图片路径     */    public static void generalOCRTest(String imgPath) {        // 初始化JiaJiaOCR实例        JiaJiaOCR jiaJiaOCR = JiaJiaOCR.builder();        // 调用识别接口,返回文本内容与位置的配对列表        List<Pair<Text, Box>> pairList = jiaJiaOCR.recognizeGeneralText(imgPath);        // 打印识别结果        System.out.println("通用文本识别结果:" + pairList);    }    /**     * 文本行检测示例(含可视化)     * @param imgPath 图片路径     */    public static void textLineDetText(String imgPath) {        // 初始化JiaJiaOCR实例        JiaJiaOCR jiaJiaOCR = JiaJiaOCR.builder();        // 调用检测接口,返回文本行坐标        Boxes boxes = jiaJiaOCR.detectTextLines(imgPath);        System.out.println("文本行检测结果:" + boxes);
        // 可视化检测结果(在原图上绘制文本行框)        Mat img = Imgcodecs.imread(imgPath);        drawPredictions(img, boxes);        // 保存带检测框的图片        Imgcodecs.imwrite("38textline.jpg", img);        System.out.println("检测结果已保存至:38textline.jpg");    }    /**     * 绘制文本行检测框(多边形绘制)     * @param img 原图Mat对象     * @param detBoxes 检测到的文本行框     */    public static void drawPredictions(Mat img, Boxes detBoxes) {        List<Box> boxList = detBoxes.getBoxes();        for (Box box : boxList) {            // 获取文本行的8个坐标点(四边形)            double[] linePos = box.getLinePosition();            Point[] points = new Point[4];            points[0] = new Point(linePos[0], linePos[1]);            points[1] = new Point(linePos[2], linePos[3]);            points[2] = new Point(linePos[4], linePos[5]);            points[3] = new Point(linePos[6], linePos[7]);
            // 转换为OpenCV多边形格式并绘制            MatOfPoint polygon = new MatOfPoint(points);            List<MatOfPoint> matOfPointList = new ArrayList<>();            matOfPointList.add(polygon);            Imgproc.polylines(img, matOfPointList, true,                               new Scalar(0, 0, 255), // 红色框                              1); // 线宽        }    }}

四、返回结果说明

JiaJiaOCR的核心返回结果包含两类关键信息:

  1. 文本行坐标:返回文本行坐标,表示文本行的位置。

  2. 识别的文字:包含文本内容、置信度等信息,支持多语言文本识别(具体语言支持取决于模型)。

五、适用场景

JiaJiaOCR可广泛应用于各类Java项目的OCR需求:

  • 文档数字化:批量识别扫描件、PDF中的文字;

  • 发票/证件识别:自动提取发票号码、证件信息;

  • 图像内容审核:检测图片中的违规文字;

  • 工业场景:识别产品标签、包装上的文字;

  • 移动应用:Android/iOS平台的Java OCR集成。

六、如何获取

  • GitHub仓库https://github.com/jiangnanboy/JiaJiaOCR

  • 版本更新 :关注releases页面,并下载,获取最新功能和bug修复;

  • 问题反馈:欢迎在Issues中提交使用问题或建议;

写在最后

JiaJiaOCR的目标是为Java开发者提供一个简单、高效、跨平台的OCR解决方案,让OCR集成不再是难题。无论你是个人开发者还是企业团队,都可以轻松接入,快速实现OCR功能。

如果你正在寻找Java OCR库,不妨试试JiaJiaOCR------纯Java实现,5分钟即可集成!

相关推荐
leikooo1 天前
Spring AI 工具调用回调与流式前端展示的完整落地方案
java·spring·ai·ai编程
vx1_Biye_Design1 天前
基于web的物流管理系统的设计与实现-计算机毕业设计源码44333
java·前端·spring boot·spring·eclipse·tomcat·maven
MediaTea1 天前
Python:MRO 解密 —— C3 线性化算法
java·开发语言
sunfove1 天前
Python小游戏:在 2048 游戏中实现基于线性插值(Lerp)的平滑动画
开发语言·python·游戏
tqs_123451 天前
倒排索引数据结构
java·前端·算法
2501_944526421 天前
Flutter for OpenHarmony 万能游戏库App实战 - 抽牌游戏实现
android·开发语言·python·flutter·游戏
a程序小傲1 天前
听说前端又死了?
开发语言·前端·mysql·算法·postgresql·深度优先
饱饱要坚持可持续发展观1 天前
SpringBoot 集成 Liquibase
java·spring boot·后端
学Linux的语莫1 天前
python项目打包为镜像
java·python·spring
熊明才1 天前
DeepSeek-OCR VLLM 环境配置指南
ocr·vllm