龙空技术网

简单图片验证码识别

三观诊疗室 183

前言:

此时同学们对“图片验证码获取不到是什么原因”大约比较珍视,同学们都想要剖析一些“图片验证码获取不到是什么原因”的相关知识。那么小编同时在网摘上汇集了一些关于“图片验证码获取不到是什么原因””的相关文章,希望小伙伴们能喜欢,朋友们一起来了解一下吧!

验证码是为了区分人和机器的,在某些场景下,可能会需要使用机器来模拟人的一些操作。

因此,就必须要教会机器读懂图片验证码。

本文讲的是如何使用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——————

喜欢本文的朋友,欢迎关注收看更多精彩内容~

标签: #图片验证码获取不到是什么原因