1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java的开源文字识别Tess4j与Tesseract-OCR

Java的开源文字识别Tess4j与Tesseract-OCR

时间:2020-04-20 10:23:51

相关推荐

Java的开源文字识别Tess4j与Tesseract-OCR

提示:本文中部分内容图片节选自互联网,无意冒犯。如有侵权请私信联系作者即可删除、更改。

原因

由于项目需要,要求项目可以识别简单的图片,客户不想使用付费的大厂接口,于是我在查看资料后决定使用Tesseract-OCR,因为Tesseract-OCR可以在特定场景下训练语言识别提高正确率。但是在配置和使用过程中遇到各式各样的错误,经过一天的探索终于完成了Tesseract-OCR接口的基本使用。

本文在旨在使读者能够掌握Tesseract-OCR并能使用Java代码进行简单的图像文字识别,以项目实战为例展示Tesseract-OCR的使用。以下是项目运行的识别结果(有点不准确,因为这是官网的语言包没有经过训练。所以识别正确率不是太高,语言识别训练可以观看我的下一篇文章,这篇文章主要讲解Tesseract-OCR的配置事项)

项目搭建过程:

Tesseract-OCR 是一款开源OCR引擎,由Google维护。相比于其他的开源OCR来说Tesseract-OCR 的好处就是可以通过场景训练语言库提高识别效率。Tesseract-OCR 可以集成多种语言进行图像识别、文字提取等操作。

Java使用Tesseract是通过Tess4j作为桥梁进行调用的。所以Java要使用Tesseract进行OCR识别,需要使用Tess4j作为Jar包调用Tesseract-ocr的语言库。

Tesseract-ocr是安装包,Tess4j是Java调用Tesseract进行识别的jar包。如果只是单纯使用Java调用OCR不牵扯语言训练的话本机无需安装Tesseract-ocr.exe。只需要下载搭建Tesseract-ocr的语言包,并在项目中导入Tess4依赖即可运行,当然识别效果不太好。但是本章节主要讲解Tess4j的项目配置。具体使用Tesseract-ocr并进行语言训练的请参考我的本专栏下另一篇文章Tesseract-OCR 配置与语言训练。

下边是Java调用Tess4j 的步骤:

下载Tesseract语言包,解压到本地目录,并在项目中配置语言包运行测试。下载Tess4j的Demo,并使用其中的Jar包对自己的项目进行配置。

注意:一定要使用官方Demo中的jar进行配置,因为自己搭建环境可能导致Jar的版本冲突导致各的错误。本人曾亲身经历各种麻烦。

详细的使用步骤如下:

进入Tesseract的GitHub官网进行语言包下载

点击图片中的高亮的Download ZIP会下载语言包的压缩文件,将下载好的压缩文件放入磁盘的根目录下,如本例中解压到E盘根目录下:

登录Tess4j官网下载最新的Tess4j Demo(点击前边的Tess4j Demo文字即可跳转目的地。Tess4j网站语言包下载页面:/projects/tess4j/)

点击Download页面会出现下载等待的提示,等待一会浏览器就会下载,将下载后的文件夹解压缩后文件的目录结构如下:

你需要做的就是新建一个Java项目并将,上图中高亮的dist和lib文件夹中的所有jar文件复制到项目中的lib文件夹中并添加到项目依赖,新建的项目如下:

这个项目的页面自己使用Swing做的一个能类似于QQ进行划区域截图,并对提取文字的小工具,工具能在后台运行并通过监听window快捷键进行划区域截图完成文字提取,并将识别得文字自动复制到剪贴板。想要此工具源码和源码解析的小伙伴请参考本专栏的另一篇文章:java工具OCR。工具的运行界面如下:

创建测试类Test,代码如下:

public class Test {public static void main(String[] args) throws TesseractException {ITesseract instance = new Tesseract();//指定语言包的位置就是步骤1中解压的语言包路径instance.setDatapath("E:\\tessdata");// 我们需要指定识别语种+代表使用多语言识别instance.setLanguage("eng+chi_sim");// 指定识别图片File imgDir = new File("d:\\001.jpg");String ocrResult = instance.doOCR(imgDir);// 输出识别结果System.out.println(ocrResult);}}

运行即可。

运行中出现的问题

如果运行中出现如下错误:

Failed loading language ‘eng’ Tesseract couldn’t load any languages!

Exception in thread “main” java.lang.Error: Invalid memory access

是自己的语言包位置没有导入,请检查setDatapath();方法传入的路径是否与自己的语言路径一至。

如运行中出现如下错误:

Unable to load library ‘libtesseract351’: ÕҲ»µ½ָ¶¨

类似于这种得错误是tess4j中得libtesseract3051.dll文件没有被正确加载,这种情况就比较复杂了,这个文件是Java通过JNI调用其他语言得接口,一般在运行项目时Tess4j会将其另存在另一个存储目录由Java调用。出现调用不了得情况有可能是Java项目配置得Jar不对(所以要严格使用官网得jar包),也有可能是libtesseract3051.dll的文件路径不对(文件路径不对可以对源码调试,不过一般不是这种情况)。

如果使用中还有其他问题欢迎私信我,一起探讨解决。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。