简单的图片验证码识别

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——————

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

以上是关于简单的图片验证码识别的主要内容,如果未能解决你的问题,请参考以下文章

简单的验证码识别

简单的图片验证码识别

简单的验证码识别

基于Tensorflow的验证码识别

学习图片处理和简单的验证码识别

通过百度AI识别简单的验证码