简单的图片验证码识别
Posted 明伟笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的图片验证码识别相关的知识,希望对你有一定的参考价值。
验证码是为了区分人和机器的,在某些场景下,可能会需要使用机器来模拟人的一些操作。
因此,就必须要教会机器读懂图片验证码。
本文讲的是如何使用tess4j识别简单的图片验证码。
一、验证码生成
普通的图片验证码,通常是由字母、数字、汉字等元素组成。
通过程序来使得这些元素发生形变、歪曲、变色,同时加上干扰线以及干扰背景等,最终生成了我们看到的图片验证码。
二、常见的图片验证码类型
这里介绍几种常见的图片验证码:
比较清晰的一种
模糊一点的
最难的(汉字验证码的识别成功率远远低于字母和数字组成的验证码)
三、所需的jar包
1、tess4j-2.0.1.jar
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>2.0.1</version>
<exclusions>
<exclusion>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
</exclusion>
</exclusions>
</dependency>
2、jna-4.2.1.jar
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.2.1</version>
</dependency>
网速捉急,就不上传了,你们自己下载吧,毕竟几十兆大小要上传半天呢。。。
四、所需数据集
前往下载:https://github.com/tesseract-ocr/tessdata
五、测试图像验证码识别
这里用来测试的是上例中的第一种,比较清晰,识别成功率较高。
1、创建一个Maven项目
2、在项目中创建一个文件夹,名为“tessdata”,如下图所示。
3、由于这里识别的验证码是数字和字母组合,因此需要eng.traineddata数据集。
将该数据集放到tessdata文件夹内。
4、创建测试类如下:
package cn.mwxu16.ImgOCR;
import java.io.File;
import org.junit.Test;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
/*
* 测试使用tess4j来识别图片验证码
*/
public class TestImgOCR {
@Test
public void test() {
//创建要识别的验证码File对象(需要从硬盘中读取要识别的验证码图片)
File imageFile = new File("D:/ImageForOCR/1234.png");
//判断验证码图片是否存在,若存在则进行识别
if (imageFile.exists()) {
//创建识别器实例
Tesseract instance = new Tesseract();
// 创建识别结果字符串
String result;
try {
// 将验证码图片的内容识别为字符串
result = instance.doOCR(imageFile);
System.out.println("验证码是 : " + result);
} catch (TesseractException e) {
System.out.println("识别验证码失败!");
}
}else{
System.out.println("验证码图片读取失败!");
}
}
}
5、若上述步骤没有出错,运行测试类,应当会输出验证码图片上的内容或相应的异常提醒。
———————END——————
喜欢本文的朋友,欢迎长按下图关注,收看更多精彩内容~
以上是关于简单的图片验证码识别的主要内容,如果未能解决你的问题,请参考以下文章