详细教程:Java如何使用Tess4J进行ocr识别
一、什么是OCR(Optical Character Recognition)?
先了解下概念,ORC
即光学字符识别,简单讲就是对图片文件中的文字进行分析识别,获取的过程。在很多生活场景中都用到,如车牌的扫描识别、身份证扫描识别、图片文本内容识别等。
Tesseract
是一个著名的开源OCR
引擎,初期是由惠普实验室研发,后期开源,由Google
改进优化升级,目前查到windows
最新的安装包版本已经到了setup-v5.0.0.20190623.exe
,Mac
用brew
下载默认的是Tesseract 4.0.0
,Linux
的是Tesseract 4.1.1
,想训练字库提高OCR
识别率,可以下载window安装包下载地址以及训练工具jTessBoxEditorFX-2.3.0.zip(FX为中文训练软件)。我先入手的window
版本的,毕竟Tess4J
的jar包中附带了编译好的dll
文件上手更快,训练教程文档后面在整理。
Tess4J
是对Tesseract OCR API
的Java JNA
封装。使java能够通过调用Tess4J
的API来使用Tesseract OCR
。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF
。这个开始接触的时候,我对这两个东西还搞混淆了。明确说一下,Tess4J
是java直接可使用的jar包,而Tesseract OCR
是支持Tess4J
进文件文字识别的基础,Tess4J
可直接使用Maven
方式引入。
备注:本人尝试了下Tess4J
最新版本但是会报错找不到模块,最后选着了4.4.0
这个版本做的调试。
二、项目搭建
好了,闲话少叙,废话少说,咱们开始进入正题,先以windows环境开始。
1. 新建一个maven
工程,引入Tess4J
的依赖,等待maven
下载(下载不下来的自己用下面的地址下然后安装到本地Maven仓库)Tess4j Maven地址。
POM依赖如下:
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.4.0</version>
</dependency>
2. 引入依赖成功后,我们打开tess4j
的jar包,可以发现在包内已经有编译好的dll
库,这个是支持window
环境动态库,我们在调用tess4j
进行图片识别时,它会先把包内的dll
拷贝到新创建的临时目录,同时语言库也是一样,这个Tess4j
会自动完成的,我们直接调用就可以了。
3. 下载
Tess4j
的所需要的语言库,我下载了chi_sim.traineddata
(中文简体)语言库,存放自定义目录下,(网上有说放入可以直接放入项目resources
目录下,本人试了几次,总是报错,后期考虑可能替换自己的训练库,就不在纠结放在项目中了,这样可以随时替换)。其他语言库可根据自己需求选择下载:tessdata语言库下载地址。ok,上代码:
public void testDoOCR_ImageByte(byte[] imageByte) {
logger.info("doOCR on a jpg image");
try {
InputStream sbs = new ByteArrayInputStream(imageByte);
BufferedImage img = ImageIO.read(sbs);
ITesseract instance = new Tesseract();
//设置语言库所在的文件夹位置,最好是绝对的,不然加载不到就直接报错了
instance.setDatapath("/Users/用户/Desktop/tessdata");
//设置使用的语言库类型:chi_sim 中文简体
instance.setLanguage("chi_sim");
String result = instance.doOCR(img);
logger.info("扫描的文本:"+result);
} catch (Exception e) {
logger.error("扫描图片文本错误:{}", e);
}
}
运行结果
总结:最简单最快速的ocr图文识别项目就完成了。在了解Tess4j
前,我对百度AipOcr
、有道的ORC
,先进行了学习,对比Tess4j
后,不管是识别率还是速度,都相差甚远,这个是正常的毕竟人家有强大的GPU
在后面支持呢,但是Tess4j
最大的优势就开源且免费,并且可以部署私有云,像百度、有道云这些部署私有云的费用是相当可观的啊。不知道增加图片的训练后能否提高Tess4j
效率啊。
三、MAC环境下使用Tess4j进行调试
Mac OS
系统上没法直接使用Tess4j
包,需要安装tesseract
,因为没有编译好的dylib
动态库,所以需要在此环境下安装Tesseract-OCR
引擎,这个里面是有dylib
动态库来支持Tess4j
进行图文识别。
打开终端,我用的Homebrew
命令安装的:
在mac中使用 brew install 安装的软件默认都是最新版本的
brew install tesseract
安装开始会存在权限问题,因为Tesseract
我是先安装完了在进行的文档整理,所以详细的安装已经没有记录了,获取权限后就可以安装了,我这里没出现什么奇怪的问题。
安装完成后,查看一下版本:
tesseract --version
安装完成查看tesseract版本信息
在终端使用命令测试
Tesseract
识别功能,如下:
完整命令:
tesseract /Users/用户/Desktop/ceshitupian.png wenben -l chi_sim
要识别的图片路径:
/Users/用户/Desktop/522D5B50-D761-4030-B3AB-F90031D30DF8.png
识别后文本会以wenben.txt文件写出
识别所需要的语言库名称:chi_sim
ok,Tesseract
安装成功,把上面window上面的项目拷贝过来,在Mac上直接运行,记得指定语言库的位置
,但是运行后仍然报错,如下:
这是因为没有设置程序运行的语言环境:
打开
idea -> Run -> Edit Configuration -> Environment variables
设置
LC_CTYPE=C
这里就不需要再去设置其他的了,程序会默认去/usr/local/lib
中加载动态库,运行如下图打印:
四、Linux环境下使用Tess4j
Linux跟mac环境一样也是没法直接使用 tess4j,需要安装tesseract和leptonica,进行编译后,才能得到所需要的so库,步骤相当麻烦。
Linux环境详细编译过程:《Linux环境如何支持使用tess4j进行ORC》