验证码是为了区分人和机器的,在某些场景下,可能会需要使用机器来模拟人的一些操作。
因此,就必须要教会机器读懂图片验证码。
本文讲的是如何使用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>
网速捉急,就不上传了,你们自己下载吧,毕竟几十兆大小要上传半天呢。。。
四、所需数据集
点击前往下载
五、测试图像验证码识别
这里用来测试的是上例中的第一种,比较清晰,识别成功率较高。
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——————
喜欢本文的朋友,欢迎关注收看更多精彩内容~
本文暂时没有评论,来添加一个吧(●'◡'●)