学术咨询

让论文发表更省时、省事、省心

基于Python和CNN的数字验证码识别

时间:2020年09月23日 分类:科学技术论文 次数:

〔摘要〕 验证码是很多网站为防止用户利用计算机批量注册、频繁登录及进行某些恶意操作 而采取的一种有效防护措施.为了确保验证码的安全可靠性,验证码识别技术相继产生.针对常见 的数字验证码识别问题,提出了基于 CNN 的识别方法,对生成的数字验证码进行

  〔摘要〕 验证码是很多网站为防止用户利用计算机批量注册、频繁登录及进行某些恶意操作 而采取的一种有效防护措施.为了确保验证码的安全可靠性,验证码识别技术相继产生.针对常见 的数字验证码识别问题,提出了基于 CNN 的识别方法,对生成的数字验证码进行预处理后,使用 Keras对 CNN 模型进行训练,在验证码测试集测试取得了98.8%的识别准确率.

  〔关键词〕 深度学习;Python;验证码;卷积神经网络

软件工程

  0 引言

  在当前网络环境中,验证码本身是用来区分人机的一种全自动验证程序,在 一 定 程 度 上 提 高 了 网 络 防御力,又被称为“反向图灵测试”.目前,多数网站在用户注册、登录、下载甚至发表评论等情况下都用验 证码进行验证,从而保证合法有效的用户权益.一般要求人类的识别率达到90%以上,机器的识别率低于 0.01%[1] .

  验证码的分类有滑块验证码、文本验证码、图像验证码、拼图验证码等,本文主要研究由四位数字 组成的图片验证码. 深度学习中应用最为广泛的卷积神经网络 CNN,在原来多层神经网络的基础上,加入了特征学习部分, 用来模仿人脑对信号处理,成为了图像识别方向最热门的技术,在图像特征提取与识别中优势明显.鉴 于 CNN 有很好的特征提取能力,因此本文采用 CNN 对验证码进行识别.

  1 相关研究工作

  随着验证码在人工智能领域的突出作用,国内外学者在验证码的识别方法上有着广泛的探索与研究.文 献[2]和文献[3]分别利用残差设计和调整卷积分组数量对图像验证码进行识别[2,3] .文献[4]提出对验证码 无须预分割的端对端的识别方法[4] .文献[5]提出改进识别空心验证码的方法[5] .

  目前,对于 CNN 的研究及应用更为广泛.Hinton等人在2006年提出深度置信网络(DBN)用于处理特 征降维以加快训练深度网络[6] .2012年继 AlexKrizhevsky提出比较有利于网络优化和训练的 AlexNet[7] 后,更多更深的神经网络被提出,如著名的 VGGNet就是在 AlexNet的基础上加深并用小卷积(3*3)提高 了在ImageNet数据集上的精度.2015年,何恺明等人提出了残差网络(DRN),因有残差连接使得随着网络 深度的显著提升,误差却不断下降[8] .

  如今,CNN 被应用在多个领域.文献[9]提出端到端的单步进行文本验 证码识别的通用算法[9] .文献[10]提出了改进 LeNet-7系统以提高红外图像行人检测率[10] .文献[11]采用 CNN 进行语音模型训练,以处理语音中信号多样性的问题[11] .文献[12]提出SA-CNN 以提升视觉情感分析 的效果[12] .

  2 验证码获取及预处理

  2.1 验证码训练集与测试集

  本文采用在 Python3编程环境下使用深度学习框架 Keras进行网络模型搭建,利用 PIL(PythonIma-gingLibrary)图像处理库批量生成各项参数可调的数字验证码图片,包括图片大小、格式、干扰点等,自动生 成3000张4位数字图片验证码,默认图片大小为60×160,RGB格式,包含少量的干扰点、线条及扭曲.本 文使用其中的2400张图片作为训练集训练网络参数,600张图片作为测试集测试网络识别的效果.训练集 与测试集无交叉重叠.

  2.2 验证码图片预处理

  2.2.1 灰度化处理

  对于自动生成的 RGB格式 图片验证码,可以看出 会有噪点、线条及相互连接等一 定的干 扰 来 模 拟 网 络 环 境 中 的 验证码.由于灰度图像的像素点 变化范围较RGB格式的图像像素点小得多,因而在进行图像处理时,会首先进行灰度化图像.灰度化方法一 般有分量法、平均值法、最大值法、加权平均法.本文采用加权平均法提取灰度图,将原RGB图像三个分量的 像素值以不同的权重进行加权平均后得到的像素值作为灰度值,其常用的计算公式如下: Gray =0.2989R+0.5780G+0.1140B 其中,Gray表示所求坐标(i,j)位置处的像素值,R,G,B 分别为三个分量的坐标(i,j)位置的像素值.

  2.2.2 二值化处理

  图像的二值化处理,是指将灰度图像像素点的灰度值由某个阈值划分为两部分,使图像显示出明显的黑色及白色效果,便于对图像进一步处理,使图像计算更为简单,且有利于凸显出关注目标的轮廓.

  3 网络模型设计

  3.1 卷积神经网络概念

  CNN 以二维矩阵数据形式输入,与传统的深度神经网络(DeepNeuralNetwork,DNN)的不同在于其隐 藏层的神经元仅与局部区域(即局部感受野)输入层的神经元相连.在结构上,它主要由多个卷积层和池化组 合而成. 卷积层采用卷积来代替传统 DNN 的全连接,卷积层的每一个神经元只和前一层的一个局部窗口即感 受野的神经元相连,构成卷积核.卷积核在卷积操作时对应的权值和偏移值共享,使得 CNN 的训练简单化, 提高了迭代效率. 池化,目的是降维,能够简化卷积层的输出参数,提高所提取特征的鲁棒性.

  特征图像经过池化操作后通 道数不会改变.下采样尺度为2*2的池化,应用频率非常高,其效果相当于高度和宽度缩减一半,大大降低 了模型参数. 激活函数的作用是为了增加神经网络模型的非线性,从而提升神经网络模型表达能力,解决线性模型所 不能解决的问题.不同的激活函数带来的效果有一定的差异,从计算量、梯度消失、反向传播求误差等多方面 考虑,sigmoid函数在 BP神经网络中用得较多,目前 ReLu函数及其改进函数在 CNN 中用得较多. 损失函数,是用来衡量模型的预测值与真实值不一 致 的 程 度,从 而 评 估 模 型 的 好 坏.神 经 网 络 优 化 的 过程实质就是最小化损失函数的过程,损失函数越小,说明模型的预测值愈 接 近 真 实 值,模型的健壮性也就越好.

  4 实验过程与分析

  本文选择 Adam 梯度下降算法作为模型优化器,输出1×40的向量表示识别结果,损失函数采用binary _crossentropy. 在该模型训练中发现,batch_size的设置值也极为重要,若设置得太小会增加训练时间且不利于损失函 数的收敛,设置得太大容易陷入局部最小值.通过比较训练效果,最终在本次实验中选取 batch_size为32, epochs为10,在测试集上的验证码识别率达到98.8%.

  软件工程教学论文:软件工程与信息安全实践课程研究与探索

  5 总结

  本文针对网站中常见的数字验证码利用4层卷积神经网络训练模型并进行识别,取得了不错的识别率, 对于验证码识别相关领域的研究及应用具有一定的借鉴意义.当然,也有不足之处,通过在神经网络中每层 进行两次卷积操作时,虽然能够提取出到更多的图像特征和减少很多参数,使得神经网络在较少的训练次数 下得到更好的训练结果,但也在一定程序上增加了过拟合的风险.

  参考文献:

  [1] CHELLAPILLA K,LARSON K,SIMARDP,etal.Designinghumanfriendlyhumaninteractionproofs[C]//Procofthe SIGCHIConferenceonHumanFactorsinComputingSystems,NewYork:ACM,2005:711-720

  [2] 晋大鹏,张天心,刘 涛.基于 Python和 CNN 的验证码识别[J].软件工程,2019,22(6):1-4

  [3] 秦 波,顾乃杰,张孝慈,等.基于卷积神经网络的图像验证码识别[J].计算机系统应用,2018,27(11):142-148 [

  4] 崔 新,白培瑞,张 策,等.一种基于端对端深度卷积神经网络的验证码识别方法[J].山东科技大学学报(自 然 科 学 版), 2020,39(2):111-117

  作者:张国荣,刘炳君,付成丽