最近有个朋友需要用Java做一个图像识别的东西,因此帮忙参考了网上资料写了一个基于Tess4J简单版的图像识别demo,供参考。
1、首先创建一个新的maven项目(创建教程在此省略,自行百度),将所需jar包引入pom.xml
<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>5.4.0</version>
</dependency>
2、在任意地方创建一个文件夹tessdata,将下载的chi_sim.traineddata 和 eng.traineddata语言包存放在该目录下,也可以直接存放到自己项目的resources/tessdata目录下。
语言库下载地址:https://github.com/tesseract-ocr/tessdata
我下面下载的是精简版,文件更小,精度也没什么损失。
https://raw.githubusercontent.com/tesseract-ocr/tessdata_fast/main/chi_sim.traineddata
https://raw.githubusercontent.com/tesseract-ocr/tessdata_fast/main/eng.traineddata

3、编写代码
public static void main(String[] args) {
// 识别图片的路径(修改为自己的图片路径)
String path = "D:\\2.png";
// 语言库位置(修改为跟自己语言库文件夹的路径)
String lagnguagePath = "D:\\study\\tess4j-test\\src\\main\\resources";
System.out.println(lagnguagePath);
File file = new File(path);
ITesseract instance = new Tesseract();
//设置训练库的位置
instance.setDatapath(lagnguagePath);
//chi_sim :简体中文, eng 根据需求选择语言库
instance.setLanguage("chi_sim");
String result = null;
try {
long startTime = System.currentTimeMillis();
result = instance.doOCR(file);
long endTime = System.currentTimeMillis();
System.out.println("Time is:" + (endTime - startTime) + " 毫秒");
} catch (TesseractException e) {
e.printStackTrace();
}
System.out.println("result: ");
System.out.println(result);
}
4、测试
本文以一张简单的图片为例:图片放置在D:\2.png根目录下,因此使用代码测试前需要修改代码中指定的两个路径!!!
识别图片:

运行代码后:
