java - OCR tess4j识别图片文字

Tess4j是什么

Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。

Tess4J是Tesseract-OCR提供的一组Java工具类,对Tesseract OCR API.的Java JNA 封装。使java能够通过调用Tess4J的API来使用Tesseract OCR

使用Tess4j

系统环境

Tess4J运行时会访问系统本地库(如windows的dll库)

  • windows环境,则可以直接进行下一步,因为tess4j中的两个jar包:tess4j.jar、lept4j.jar已经内嵌了windows 32和64位DLL库
  • 其他环境如mac,tess4j中没有提供相关的dll库,所以需要先安装Tesseract:
1
brew install tesseract

windows环境以外的平台,不安装安装Tesseract直接运行会报错:UnsatisfiedLinkError: Unable to load library ‘tesseract’
相关信息在github文档中给出了解释和解决办法:https://github.com/tesseract-ocr/tesseract/wiki

tess4j相关下载地址

准备项目环境

创建demo项目,在项目下创建文件夹lib
jar包

解压下载好的zip:Tess4J-3.4.8-src.zip

将dist目录和lib下的jar包全部拷贝到项目的lib中,build path

准备语言库

如果是识别图片中的英文,不需要额外准备字库,如果需要识别中文或其他语言,则需要下载字库

github中找到所需要的字库(中文字库:chi_sim.traineddata)

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Tess4jTest {
public static void main(String[] args) {
//创建识别的图片
File imageFile = new File("/.../Downloads/eg.png");
ITesseract instance = new Tesseract();
//设置tessdata的路径,如果放在项目根目录下则不需要制定,如果不在则指定为tessdata目录的绝对路径
instance.setDatapath("/Users/xxx/.../OCR/Tess4J-3.4.8");
//如果是识别英文,不需要以下语句指定,如果识别英文以外的语言,则需要设置识别语言(中文是chi_sim)
instance.setLanguage("chi_sim");
try {
String result = instance.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
e.printStackTrace();
}
}
}