Java 验证码识别库 Tess4j
学习
【在用
java 的
Jsoup
做爬虫爬取数据时遇到了验证码识别的问题(基于
maven
),找了网上挺多的资料,发现
Tess4j
可以自动识别验证码,在这里简单记录下学习过程及遇到的一些问题。】
步骤:
需要在步骤一的
tessdata文件中加入 相关语言包
(
训练文件
),
在这里下载:
https://github.com/tesseract-ocr/tessdata
,
如果是简单的英文数字验证码,下载
eng.traineddata 然后放到文件夹里即可,中文的是
chi 开头的
traineddata 。
导入相关依赖,
maven 相关依赖如下:
junit
junit
3.8.1
test
net.java.dev.jna
jna
4.2.1
net.sourceforge.tess4j
tess4j
4.1.1
com.sun.jna
jna
4,编写相关代码(自测可正常运行):
package yanZhengMaTest.pikachu;
import java.io.File;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class Test {
public static void main(String[] args) {
//验证码图片存储地址
File imageFile = new File("C:\Users\pc\Desktop\1.gif");
if(!imageFile.exists()){
System.out.println("图片不存在");;
}
Tesseract tessreact = new Tesseract();
tessreact.setDatapath("F:\Program Files (x86)\Tesseract-OCR\tessdata");
String result;
try {
result = "测验结果:" + tessreact.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
e.printStackTrace();
}
}
}
出现异常及处理
:
(本人因为开始的时候没用
maven导入依赖,自己去下载了各种网上要的jar包去导入,遇到了一堆问题,最后卡在了Invalid memory access这个异常上,后来通过换成maven项目并解决了异常)
A. 【
Exception in thread “main” java.lang.Error: Invalid memory access:】
如果出现类似于
Invalid memory access的异常
(1). 首先你先确定JAVA代码中:
tessreact.setDatapath("F:\Program Files (x86)\Tesseract-OCR\tessdata");
这里的地址要填你步骤一下载的
tessdata 文件夹地址。
(2). 如果地址无误,那可能是你 tess4j依赖的版本太低
,需重新导入依赖,在pom中修改即可。
B. 【
Exception in thread “main” java.lang.UnsupportedClassVersionError: net/sourceforge/tess4j/Tesseract :】
发生该异常的原因是
JDK版本低于1.7,使用1.7以上即可解决问题。
C. 【出现图片非法异常】:可能是你图片有问题,换张图片试试,下载的图片不要去修改它的后缀,否则也可能报错。
痛的领悟
:
不要直接用
java 项目自己去导入相关
jar
包,直接用
maven
项目去加入依赖包就好,否则可能会出现一堆莫名其妙的异常,个人觉得是因为
maven
项目依赖包导入时还会导入其他
jar
包,
java
项目则需要自己去补增一些
jar
包,在此建议用
maven
。
附:
可识别验证码示例:http://es.bnuz.edu.cn/checkcode.aspx?0.33556625493951997/
注意:本文来自博客园精华区。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!
CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。