[在用 java 的 Jsoup 做爬虫爬取数据时遇到了验证码识别的问题 (基于 maven), 找了网上挺多的资料, 发现 Tess4j 可以自动识别验证码, 在这里简单记录下学习过程及遇到的一些问题.]
步骤:
把 tessreact 项目里面的 tessdata 文件夹提取出来放在某个位置: https://github.com/tesseract-ocr/tesseract
需要在步骤一的 tessdata 文件中加入相关语言包 (训练文件), 在这里下载: https://github.com/tesseract-ocr/tessdata , 如果是简单的英文数字验证码, 下载 eng.traineddata 然后放到文件夹里即可, 中文的是 chi 开头的 traineddata.
导入相关依赖, maven 相关依赖如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.1.1</version>
<exclusions>
<exclusion>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
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.
来源: https://www.cnblogs.com/zengbojia/p/9401047.html