基于卷积神经网络的多字符类型验证码识别

摘要:

  验证码作为一种互联网安全手段, 被广泛应用于互联网各类验证界面中。由于传统的图像识 别算法对于验证码的识别准确率及速度很大程度上都依赖于算法的设计及鲁棒性上,实际应用起来效果不是很好。在本次项目中,使用 Tensorflow 框架将卷积神经网络应用于验证码的特征提取及识别上,利用 Python 中的 Captcha 库随机生成具有"数字"、"大写英文字母"及"小写英文字母"的多字符类型验证码样本,用于卷积神经网络模型的训练及测试。

关键词: 验证码识别,卷积神经网络,Tensorflow

一、研究目的及应用背景

  如今,验证码已经广泛应用于各大网络平台及网站,主要针对的是一些恶意利用脚本进行网站爆破并窃取其他用户及平台信息的情况。随着图像处理技术的不断发展,原有的纯数字类型验证码几乎很难将这些有不良居心的人拒之门外。因此,近些年的验证码类型已经逐步发展到了多种字符类型嵌套,甚至引入了极具中国特色的汉字验证码系统。一方面,这确实增加了系统的防护能力,但是另 一方面,却也极大地增大了用户在肉眼识别上的难度。
  一切技术的进步都将会促进相应领域更长足的发展,验证码识别技术看似是一个具有争议的研 究方向,但是正是由于这一技术的日趋强大,才会促进反识别技术的不断进步,进而能够更加保障 用户信息的安全。因此,相信验证码识别技术在网络信息安全方面能够持续发挥出它的贡献。

二、相关概念介绍

2.1 卷积神经网络

2.1.1 概述

  卷积神经网络 (Convolutional Neural Networks, CNN) 是一类包含卷积计算且具有深度结构的前馈神经网络 (Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。
  CNN一般包含如下的层级结构:

  • 数据输入层(Input Layer)
  • 卷积层(Convolution Layer)
  • 池化层(Pooling Layer)
  • 全连接层(Fully Connected Layer, FC)

  一个常见的MINST手写数字CNN结构如下图所示:

  一个卷积神经网络可以有若干卷积池化层和若干全连接层,其中,卷积池化层的作用在于对数据中冗余的信息进行剔除,提取出更加抽象和简洁的数据特征信息,提供给最后的全连接层进行特征分类。因此,一个基本的卷积神经网络可以看作是卷积 + 神经网络组成的。

2.1.2 数据输入层(Input Layer)

  该层主要是对原始数据做预处理,可以包括:

  • 零均值(Zero Mean):把输入数据各个维度都中心化为 0 ,如下图所示,其目的就是把样本的中心拉回到坐标系原点上
  • 归一化(Normalization):幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是 0 到 10 ,而B范围是 0 到 10000 ,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围
  • PCA和白化:用PCA进行数据降维;白化是对数据各个特征轴上的幅度归一化
2.1.3 卷积层(Convolution Layer)

  该层主要完成输入数据的降维和特征提取。
  以输入数据为二维图像为例,图像卷积可以看作是一个个卷积核在图像上滑动,并于图像数据做卷积运算的过程。一个典型的卷积计算过程如下图所示,其中 w w w 为卷积核, b b b 为偏置矩阵。:

  对于神经网络的靠前卷积层,卷积完成的是一个较小范围的数据信息的抽取,而随着卷积层的逐渐增加,靠后的卷积层感受野逐渐增大,因此捕获数据的信息也就更加复杂、更加抽象。

2.1.4 池化层(Pooling Layer)

  经过卷积层的数据降维和特征提取,得到的特征数据可能维数还是很高,因此可以引入池化层。
  池化层是对卷积层计算出的结果进行进一步的降维。以二维数据图像为例,池化的做法是将卷积图像的每一个指定区域面积大小(一个Filter大小)内的数据用一个值代替,常见的方法有最大值池化(Max Pooling)和均值池化(Mean Pooling)。
  一个典型的最大值池化操作过程如下图所示:

2.1.5 全连接层(Fully Connected Layer, FC)

  全连接层在整个卷积神经网络中起到一个分类的作用,它将卷积池化层获取到的隐层特征映射到样本标记空间。
  在实际使用中,全连接层同样可以由卷积操作实现:

  • 对于直接连接在卷积池化层后的全连接层,可以看作是卷积核尺寸为前层卷积结果同宽高的一个大的卷积。在实际编程过程中,我们通常采用的方法是将前层卷积结果从矩阵形式reshape为向量形式,再与同样表示为向量形式的全连接层卷积核进行矩阵
  • 而对于直接连接在另一个全连接层后的全连接层来说,该层可以看作是卷积核尺寸为 1x1 的卷积操作。这将更加方便理解和编程实现。
      一个典型的全连接网络如下图所示:

2.2 Tensorflow

  TensorFlow 是一个采用数据流图(Data flow graphs),用于数值计算的开源软件库。节点(Nodes) 在图中表示数学操作,图中的线(Edges)则表示在节点间相互联系的多维数据数组,即张量(Tensor)。 它灵活的架构使得用户可以在多种平台上展开计算,例如台式计算机中的一个或多个 CPU(或 GPU)、 服务器、移动设备等等。TensorFlow 最初由 Google 大脑小组(隶属于 Google 机器智能研究机构) 的研究员和工程师们开发,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

三、方案设计

3.1 验证码样本生成

3.1.1 Captcha库简介

  Captcha库是Python底下的一个拓展库,通过简单的调用 ImageCaptcha 类下的 generate() 函数,传入待生成的字符串变量,即可生成响应的 BytesIO 类型的验证码图像,内部默认添加横线和噪点两种干扰,字符有不同程度的扭曲变形。 生成示例如下图所示:

3.1.2 验证码生成类设计

  设计 Captcha 生成类, 成员函数包含:

  • 随机文本生成函数 (generate_text)
       随机生成包含"数字"、"大写英文字母"及"小写英文字母"的指定长度的字符串;

  • 文本转向量函数 (text2vec)
       将输入的字符串重新编码成能够满足卷积神经网络输入要求的向量形式;

  • 文本转向量函数 (vec2text)
       将卷积神经网络输出的字符串重新解码成字符串形式;

  • 验证码图像预处理函数 (image_processing)
       将 ImageCaptcha 类生成的 BytesIO 类图像转换成能够进行图像处理的 array 类型, 并对原始图像依次进行灰度化、运用自适应阈值的二值化以及噪点腐蚀降噪处理;
       其中, 降噪过程设计了 6x6 的腐蚀核:

  利用该腐蚀核能够有效的滤除验证码图像中散乱的噪点, 滤除效果如下图所示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值