计算机系统应用教程网站

网站首页 > 技术文章 正文

简单图片验证码识别

btikc 2024-09-02 17:15:21 技术文章 10 ℃ 0 评论

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

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

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

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


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表