一、为什么需要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集成。
六、如何获取
-
版本更新 :关注
releases页面,并下载,获取最新功能和bug修复; -
问题反馈:欢迎在Issues中提交使用问题或建议;
写在最后
JiaJiaOCR的目标是为Java开发者提供一个简单、高效、跨平台的OCR解决方案,让OCR集成不再是难题。无论你是个人开发者还是企业团队,都可以轻松接入,快速实现OCR功能。
如果你正在寻找Java OCR库,不妨试试JiaJiaOCR------纯Java实现,5分钟即可集成!