纯 Java 实现的 OCR 推理系统:JiaJiaOCR,告别 exe/dll 依赖!
一、为什么需要JiaJiaOCR?
在OCR(光学字符识别)领域,开源项目多以Python开发为主。这给Java开发者带来了不少困扰:
-
要么调用外部exe可执行文件,增加部署复杂度;
-
要么依赖特定平台的dll动态链接库,跨平台兼容性差;
-
调试困难,外部依赖导致问题定位复杂。
为解决Java开发者的痛点,JiaJiaOCR应运而生——一个完全基于Java实现的OCR推理系统,无需调用任何exe或dll文件,让Java开发者轻松集成OCR功能,实现跨平台无缝部署!
二、JiaJiaOCR核心优势
-
纯Java实现:原生Java代码编写,易于Java开发者使用;
-
跨平台支持:兼容Windows和Linux x86环境,一次开发,多处运行;
-
低门槛集成:仅需引入jar包和少量依赖,即可快速接入项目;
-
功能完整:支持通用文本识别、文本行检测,满足多样化OCR需求;
-
轻量高效:基于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的核心返回结果包含两类关键信息:

-
文本行坐标:返回文本行坐标,表示文本行的位置。
-
识别的文字:包含文本内容、置信度等信息,支持多语言文本识别(具体语言支持取决于模型)。
五、适用场景
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分钟即可集成!
更多推荐


所有评论(0)