第5章 验证码识别

        验证码CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)是全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机还是人的公共全自动程序。设计的初衷是防止恶意破解密码、刷票、论坛灌水,实际上用验证码是现在很多网站通行的方式。验证码的基本假设是,由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。攻防是相生相伴的,针对验证码出现了大量的破解技术。

        常见的数字型验证码变种多样,比如某招聘网站验证码,字母周围有噪点,字体扭曲。某电商网站验证码,不同样式,字母阴影,字母粘连,背景色干扰。某社交网站,主体干扰线,背景色干扰,背景字母干扰,字体扭曲,字母粘连。

        本章主要以MNIST数据集为例介绍识别数字型验证码,介绍验证码识别使用的特征提取方法,包括一维向量、二维向量、使用的模型以及对应的验证结果,包括K近邻、支持向量机和深度学习。

5.1 数据集

       验证码识别使用的数据集为MNIST数据集,MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。该数据集也包含每一张图片对应的标签,告诉我们这个是数字几。数据集包含60000个图片训练数据集和10000个图片测试数据集。每一个MNIST数据单元由两部分组成:一张包含手写数字的图片和一个对应的标签。每一张图片包含28*28个像素点,可以把这个数组展开成一个一维向量,长度是28*28=784。

        文件读取方式为:

import pickle
import gzip


def load_data():
    with gzip.open('./mnist.pkl.gz') as fp:
        training_data, valid_data, test_data = pickle.load(fp)
    return training_data, valid_data, test_data

5.2 特征提取

1.一维向量

        这也是MNIST默认的特征提供方式,将28*28的图片转换成了长度为784的一维向量:

import tflearn.datasets.mnist as mnist

X, Y, testX, testY = mnist.load_data(one_hot=True)

2.二维向量

        为了适应特定模型,需要将原本的一维向量转换回原有的28*28的二维向量,具体方法使用数组的reshape函数即可:

import tflearn.datasets.mnist as mnist

X, Y, testX, testY = mnist.load_data(one_hot=True)
X = X.reshape([-1, 28, 28, 1])
testX = testX.reshape([-1, 28, 28, 1])

5.3 模型训练与验证

5.3.1 K近邻算法  

        使用K近邻算法,特征提取使用一维向量。

(1)读取MNIST数据集数据。

(2)按照文件划分为训练集和测试集。

(3)使用K近邻算法在训练集上训练,获得模型数据。

(4)使用模型数据在测试集上进行预测。

(5)验证K近邻算法,特征提取方式使用一维向量,其中邻居数量n_neighbors设置为15。

5.3.2 支持向量机算法

5.3.3 深度学习算法之MLP

5.3.4 深度学习算法之CNN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值