大家好,又见面了,我是你们的朋友全栈君。
基本概念
Tesseract Open Source OCR Engine :包含一个OCR引擎 –
libtesseract
和一个命令行程序 –tesseract
。Tesseract 4添加了一个新的基于LSTM的OCR引擎,该引擎专注于行识别,但仍支持Tesseract 3的传统Tesseract OCR引擎,该引擎通过识别字符模式进行工作。通过使用传统OCR引擎模式(–oem 0),可以与Tesseract 3兼容。它还需要训练有素的数据文件来支持旧式引擎,例如tessdata存储库中的文件。Tess4J:Tesseract OCR API的 Java JNA包装器。
Maven
代码语言:javascript复制<dependencies>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.4.0</version>
</dependency>
</dependencies>
GitHub
Tesseract Open Source OCR Engine :https://github.com/tesseract-ocr/tesseract Tess4J项目:https://github.com/nguyenq/tess4j 语言库:https://github.com/tesseract-ocr/tessdata/blob/master/eng.traineddata
DEMO
1、首先创建一个新的maven项目,将所需jar包引入pom.xml
2、在任意地方创建一个文件夹tessdata,将下载的chi_sim.traineddata 和 eng.traineddata语言包存放在该目录下,也可以直接存放到自己项目的resources/tessdata目录下。
3、编写代码
代码语言:javascript复制 // 识别图片的路径(修改为自己的图片路径)
String path = "D:\test.jpg";
// 语言库位置(修改为跟自己语言库文件夹的路径)
String lagnguagePath = "D:\tessdata";
File file = new File(path);
ITesseract instance = new Tesseract();
//设置训练库的位置
instance.setDatapath(lagnguagePath);
//chi_sim :简体中文, eng 根据需求选择语言库
instance.setLanguage("eng");
String result = null;
try {
long startTime = System.currentTimeMillis();
result = instance.doOCR(file);
long endTime = System.currentTimeMillis();
System.out.println("Time is:" (endTime - startTime) " 毫秒");
} catch (TesseractException e) {
e.printStackTrace();
}
System.out.println("result: ");
System.out.println(result);
5、可选步骤:配置环境变量(TESSDATA_PREFIX) 环境变量地址指向你存放语言包的文件夹路径,如:我的语言包路径在 D:tessdata
运行结果
以一张简单的图片为例:图片放置在D:test.png根目录下,因此使用代码测试前需要修改代码中指定的两个路径!!!
识别图片:
运行代码后:
常见问题
解决chi_sim.traineddata报read_params_file: parameter not found: allow_blob_division
Warning: Invalid resolution 0 dpi. Using 70 instead.
关于tesseract 出错信息:read_params_file: Can’t open chi_sim
扩展学习
提高识别率
1.对称近邻均值滤波
参考: http://blog.csdn.net/fangbinwei93/article/details/50562449
2.指定config为digits,并修改tessdataconfigsdigits文件,将白名单中设置需要识别的内容。如只需要识别数字,则指定whitelist为0123456789即可。
也可在程序中指定:
参考: http://blog.csdn.net/hellousb2010/article/details/39477859
3.尽量指定图像的一块区域识别。比如验证码起始位置和结束位置很多空白的,可以去掉,只对验证码区域做识别。
4.训练字库,提升识别率
参考: http://blog.csdn.net/white0blue/article/details/47972405 http://blog.csdn.net/tuling_research/article/details/41091163
其他参考
tesseract-ocr参数:http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version
参考文章
https://www.jianshu.com/p/ef60ef5395c5
https://www.cnblogs.com/asker009/p/11098220.html
https://blog.csdn.net/qincidong/article/details/82781361
https://blog.csdn.net/zai_xia/article/details/80003778
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135530.html原文链接:https://javaforall.cn