OCR 是 Optical Character Recognition (光学字符识别)的缩写,指的是通过检测图像,从而识别出文字的技术。
经过几十年的发展,如今 OCR 技术已经非常成熟,本文我们就来介绍由惠普公司开源的 OCR 算法组件 tesseract 的安装和使用。
在各个平台上都有着成熟的包管理机制,利用包管理机制直接安装即可,例如在 mac 上,你需要执行下面两个命令:
brew install tesseract brew install tesseract-lang
第一个命令是安装 tesseract 命令执行所需的组件,第二个命令则是安装 tesseract 所需的语言包。
在 mac 上,也许你需要安装 qt、python3.9 等等基础依赖,只要按提示安装即可。
其他环境,例如 Ubuntu、Debian、CentOS 等系统中,只要执行对应的包管理命令即可。
例如在 Ubuntu 系统下,只需执行:
apt-get install tesseract-ocr-all
安装 tesseract 后,通过 tesseract --help 命令可以看到说明。
执行以下命令即可:
tesseract imagename outputbase [options...] [configfile...]
例如:
tesseract ~/Downloads/temp.jpg ~/Downloads/temp -l chi_sim
-l 参数用来指定识别的文本是哪种语言,如果是英语可以传递 -l eng.
识别结果就在第二个参数 ~/Downloads/temp.txt 中记录了识别的结果。
安装上述依赖后,就可以通过代码调用了,最简单的就是通过执行系统命令直接调用 tesseract 命令,这里就不赘述了。
下面我们来看看如何通过 java SDK 调用 tesseract 实现 OCR 识别。
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>2.0.1</version>
<exclusions>
<exclusion>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
</exclusion>
</exclusions>
</dependency>
在官方文档网站找到需要识别的语言包:
https://tesseract-ocr.github.io/tessdoc/Data-Files
放到某个目录下, 这里我放到 /opt/tesseract 目录下。
public class TessTest {
public static void main(String[] args) {
ITesseract instance = new Tesseract();
File imageFile = new File("/data/images/a.jpg");
instance.setDatapath("/opt/tesseract");
instance.setLanguage("chi_sim");
try {
long time = System.currentTimeMillis();
String result = instance.doOCR(imageFile);
System.out.println(result);
System.out.println("timeout: " + (System.currentTimeMillis() - time));
} catch (TesseractException e) {
System.out.println(e.getMessage());
}
}
}
执行上述代码,报错如下:
java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract': Native library (darwin/libtesseract.dylib)
这是因为在 tess4j 的 jar 包中没有包含 darwin/libtesseract.dylib 组件,可以通过升级 jar 包到 5 以上,或是使用其他平台。
解决办法如下:
cd ~/.m2/repository/net/sourceforge/tess4j/tess4j/2.0.1 mkdir darwin jar uf tess4j-2.0.1.jar darwin cp /usr/local/opt/lib/libtesseract.5.dylib darwin/libtesseract.dylib jar uf tess4j-2.0.1.jar darwin/libtesseract.dylib
再次执行即可。
https://guides.library.illinois.edu/c.php?g=347520&p=4121425
java - Tess4j unsatisfied link error on mac OS X - Stack Overflow
Traineddata Files for Version 4.00 + | tessdoc
python 3.x - How do I install a new language pack for Tesseract on Windows - Stack Overflow
tesseract-lang — Homebrew Formulae