纯 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分钟即可集成!

相关推荐
电商API&Tina8 小时前
【电商API接口】多电商平台数据API接入方案(附带实例)
运维·开发语言·数据库·chrome·爬虫·python·jenkins
叫我莫言鸭8 小时前
关于word生成报告的POI学习2循环标题内容
java·学习·word
1001101_QIA8 小时前
【C++笔试题】递归判断数组是否是递增数组
开发语言·c++
zhangx1234_8 小时前
C语言 题目2
c语言·开发语言
七夜zippoe8 小时前
Spring与MyBatis整合原理及事务管理
java·spring·mybatis·事务·mapper
YJlio8 小时前
网络与通信具总览(14.0):从 PsPing 到 TCPView / Whois 的联合作战
开发语言·网络·php
yong99908 小时前
超宽带系统链路 MATLAB 仿真
开发语言·算法·matlab
yaoxin5211238 小时前
278. Java Stream API - 限制与跳过操作全解析
java·开发语言·python
iCheney!8 小时前
php生成赛博像素风头像
开发语言·php
短剑重铸之日8 小时前
《深入解析JVM》第五章:JDK 8之后版本的优化与JDK 25前瞻
java·开发语言·jvm·后端