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网站语言包下载页面:https://sourceforge.net/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的文件路径不对(文件路径不对可以对源码调试,不过一般不是这种情况)。
如果使用中还有其他问题欢迎私信我,一起探讨解决。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiafebh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22