为了避免恶意破解密码、刷票、论坛注水、黑客攻击等行为,验证码因此而生,它通过强制人机交互的方法来抵御机器自动化攻击。但准确识别验证码是当前还未完全解决的难题。本文的研究对象为四位数字的验证码,采用分割分析和Hopfield神经网络的方法对验证码识别及其精度进行分析。建立并训练Hopfield网络对验证码图像变换后的矢量进行模式识别,比对的结论表明,Hopfield神经网络算法可以得到比较好的测试结果,具有推广应用的价值。 In order to avoid malicious cracking of passwords, ticket brushing, forum water injection, hacking, etc., verification codes are born. It uses the method of forcing human-computer interaction to resist machine automation attacks. But accurately identifying the verification code is a difficult problem that has not yet been completely resolved. The research object of this article is a four-digit verification code. The method of segmentation analysis and Hopfield neural network is used to analyze the verification code recognition and its accuracy. Establish and train the Hopfield network to perform pattern recognition on the transformed vector of the captcha image. The conclusion of the comparison shows that the Hopfield neural network algorithm can get better test results and has the value of popularization and application.
为了避免恶意破解密码、刷票、论坛注水、黑客攻击等行为,验证码因此而生,它通过强制人机交互的方法来抵御机器自动化攻击。但准确识别验证码是当前还未完全解决的难题。本文的研究对象为四位数字的验证码,采用分割分析和Hopfield神经网络的方法对验证码识别及其精度进行分析。建立并训练Hopfield网络对验证码图像变换后的矢量进行模式识别,比对的结论表明,Hopfield神经网络算法可以得到比较好的测试结果,具有推广应用的价值。
灰度化,二值化,边缘检测分割,Hopfield神经网络,验证码识别
Jingwen Zhang, Pingzhi Lin, Sijia Xiao, Haohua Wang*
School of Sciences, Hainan University, Haikou Hainan
Received: Oct. 23rd, 2021; accepted: Nov. 13th, 2021; published: Nov. 25th, 2021
In order to avoid malicious cracking of passwords, ticket brushing, forum water injection, hacking, etc., verification codes are born. It uses the method of forcing human-computer interaction to resist machine automation attacks. But accurately identifying the verification code is a difficult problem that has not yet been completely resolved. The research object of this article is a four-digit verification code. The method of segmentation analysis and Hopfield neural network is used to analyze the verification code recognition and its accuracy. Establish and train the Hopfield network to perform pattern recognition on the transformed vector of the captcha image. The conclusion of the comparison shows that the Hopfield neural network algorithm can get better test results and has the value of popularization and application.
Keywords:Gray Processing, Binarization, Edge Detection and Segmentation, Hopfield Neural Network, Verification Code Recognition
Copyright © 2021 by author(s) and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).
http://creativecommons.org/licenses/by/4.0/
图像识别问题是人工智能领域上一个复杂的问题,其本质是图像被计算机分析和处理,对于不同种类的图像处理方式也会有所不同,是一种被开发出识别各种模式的目标和对象的技术。图像识别的种类繁多,验证码识别是其中一种,也是互联网上常用的真实人机交互验证的有效方法 [
对于识别数字验证码这个问题,国内外众多学者进行了许多研究,李成建等 [
如图1,验证码为带噪声的数字,计算机无法直接识别和处理带有太多噪声的验证码,因此,就需要预处理验证码,首先将每个图像中的四个数字全部转化为单独分开的数字,再利用归一化把每个数字转为7*5的二值图像,然后根据灰度值把图像转化成维数为35的向量,最后把向量放入Hopfield网络进行识别。
图1. 数字验证码
在对数字验证码图像做识别研究的过程中,如果想要让计算机更快速和有效的识别数字验证码图像,有一个步骤是不可省略的,那就是对彩色图像进行灰度化处理 [
g ( i , j ) = Max ( R ( i , j ) , G ( i , j ) , B ( i , j ) )
验证码图像经过灰度化后的结果如下图2所示:
图2. 保留最大亮度法的灰度化结果图
设背景色用0表示,目标像素用1表示。则灰度图的二值化 [
g ( i , j ) = { 1 f ( i , j ) > T 0 f ( i , j ) ≤ T
其中T指的是确定的阀值。
二值化的核心步骤就在于此阀值,本文采用最大类间方差法确定T的取值 [
最大类间方差法是由Otsu在1978年提出的一种算法 [
λ = σ β 2 σ W 2 , K = σ T 2 σ W 2 , η = σ β 2 σ T 2
为了避免过多的计算,通过简化下面的公式进行简化:
σ 2 ( T ) = W A ( μ a − μ ) 2 + W b ( μ b − μ ) 2
其中, σ 2 为两类间最大方差, W A , W b 分别为A,B类概率, μ a , μ b 为分别为A,B类平均灰度, μ 为平均灰度。
不同阈值会将图像分割成两个不同的部分,若T能使分成两部分的总方差 σ 2 ( T ) 取得最大值,那么该值就是最佳阈值。下图3是对原图利用上述方法后的对比。
图3. 最大类间法二值化
噪声是识别数字验证码图像中的一个阻碍,它会大大降低计算机识别的准确性,因此需要对数字图像进行降噪处理。降噪效果的好坏会影响之后的处理,因此根据噪点的特点,本文使用中值滤波的方法去除噪声,主要利用高频噪声,孤立偏差大的特点进行的 [
图4. 灰度值识别窗口
本文使用了图4中的3*3模板,过滤结果如图5所示。
从图5可以看出,第二组数字验证码的效果较好,消去了大量的噪点。与之相对比,由于另外三组验证码的噪点不是很多,因此滤波效果不明显,但总体来看,经过中值滤波后的图像上的噪点比未经过滤波图像上的噪点要少,且可以保护图像边缘,因此使用中值滤波效果较好。
图5. 中值滤波
神经网络识别的采样要求是单个字符,因此需要分割图像。采用有效的方法能提升识别的准确率。字符串分割的方法有多种,有积分投影法和边缘检测分割法 [
图像处理中的关键问题是边缘检测,目的是识别图像中光度变化明显的点 [
边缘检测算法的主要思想为:对一个连续的图像 f ( x , y ) ,在位置 ( x , y ) 的梯度可以表示成一个矢量,假设用 G x 和 G y 来表示 f ( x , y ) 沿着x方向和y方向的梯度,对 G x 和 G y 分别使用不同模板,然后将两个模板拼在一起,形成梯度算子。对图像使用微分运算,图像灰度变化较小时,计算出的微分值较小。微分值是否边缘点取决于阈值是否小于微分值,如果阈值小于微分值,则将该点定义为边缘点。
本文采用了以Sobel微分算子为基础的边缘检测分割的方法 [
图6是四组验证码图像经过边缘检测后的结果图。
根据图6,我们可以看出,经过边缘检测后的图像与之前的图像相对比少了很多的数据,也能起降噪的作用,并且保留了原图中的重要数据信息。
由于Hopfield网络需要输入相同的格式,但切割后的字符大小存在差异,为了让识别的标准性和准确率更高,就需要把图像标准化,统一尺寸。因此需要将切割后的字符图像尺寸归一化为7*5,然后逐行化为长度为35的一维向量P。
图6. 边缘检测后的图像
Hopfield网络全连接网络 [
图7. 有反馈的全互联型网络
设一个Hopfield网络由n个神经元构成, V i 和 V j 分别表示第i,j个神经元节点的状态,W表示神经元i和j的连接权值, θ 表示神经元i的阈值。那么节点的能量可表示为:
E i = − ( ∑ j ≠ 1 n w i j v i − θ i ) v
因此,网络整体能量的函数表示如下:
E i = − 1 2 ∑ i = 1 n ∑ j ≠ i n w i j v i v j + ∑ i = 1 n θ i v i
设一个Hopfield网络由n个神经元构成的,在t时刻,记第i个神经元接收来自剩下 n − 1 个神经元输入值的总和为 u i ( t ) 。在 t + 1 时刻,如果第i个神经元的输出值 v i ( t + 1 ) 是符号函数作用于 u i ( t ) 中的某个阈值时,则该神经元称为活跃神经元。此迭代步骤为:
步骤1:将i作为随机选择的一个神经元;
步骤2:计算选中神经元 i ( 1 ≤ i ≤ n ) 的总输入
u i ( t ) = ∑ j ≠ i n w i j v i − θ i ;
步骤3:根据 u i ( t ) 值大小,改变神经元的状态
if ( u i ( t ) ) ≥ 0
then v i ( t + 1 ) = 1
else v i ( t + 1 ) = 0 ;
步骤4:除神经元i以外的其他神经元j状态不发生改变;
步骤5:转到(1),循环至网络稳定为止。
Hopfield网络具固定的稳定状态,权矩阵W可以根据网络的学习求得,再利用计算的方法进行联想。对于给出的M个模式,可以使用Hebb规则进行学习。
W i j = { 0 i = j ∑ k = 1 M v i ( k ) v j ( k ) i ≠ j
依照上述的法则求得权矩阵后,就已经把这 个模式存入到网络的连接权中。
对每个数字图像进行数字化处理,并将数字图像转换为神经网络可以处理的输入值和输出值,这样就得到输入样本。
0~9中的每个数可以用带布尔值的7*5矩阵表示。比如“0”可以表示为:
r 0 = [ 0 0 1 0 0 0 1 1 1 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 1 1 1 0 0 0 1 0 0 ] .
每个数字都可以用7*5 = 35个元素组成一个行矩阵,再将10个数字均被定义成输入向量,每个数字的输入向量都有35个元素,全部数字组成一个10*35输入向量矩阵alphabet。把这10个数字输入到变量Number中,变量成为网络的输入样本矩阵:
Number = [ r 1 , r 2 , r 3 , r 4 , r 5 , r 6 , r 7 , r 8 , r 9 , r 10 ] .
输出样本定义为10*10单位矩阵。对于每个数字输入,输出在其行的相应位置为1,在其余位置为0。利用下面的MATLAB命令能简单实现:
图8. 误差平方和及学习速率的变化图
Targets = eye (10)。
每输入一个数字,网络就可以输出一个向量。
根据上文可知,神经网络需要输入35个神经元和输出10个神经元 [
网络接受的输入向量应该为布尔向量,但是实际上,接收到的输入向量并不是布尔向量,这是因为存在一定的误差。为了避免这样的误差给实验带来不便,就需要设计的网络有一定的容错能力。可以设置噪声的均值为0并且标准偏差小于或等于0.2,这样网络就有一定的容错能力辨别输入向量。
把该网络设计成两层的BP网络结果,这样能够识别数字。在隐含层和输入层之间的神经元传递使用logsigmoid函数,这个函数输出的值为布尔值,再将输出的值输入到输入层中。
首先生产10个样本数据,让它们每个能代表0~9中的每个数,再构造双层网络,本文使用了newff函数,再定义第一隐含层权值WI和B1初始值,本文采用初始化的nwlog.m函数,用随机数选取后一层的初始值。这便是对hopfield网络的初始化过程。
上述设计的网络没有抗干扰的能力,为了使其具备这个能力,就需要对网络进行训练,经过训练的网络能正确的处理由于错误输入导致的问题。如果能得到一个可以识别带有噪声的输入值的网络,就能把干扰噪声数字化处理转换成有均值的随机值。
为了训练一个具有低平方误差和理想输入的网络,本文的无噪声训练采用学习速度快捷、附加动量因子的BP算法 [
图8表现了在网络训练过程中,误差平方和、学习速度在各个学习阶段的变化。从图8中可以看到,网络的稳定性会随着学习次数的增加而提高。从图中还可以看出,在学习次数大约为196次时,我们设计的神经网络会达到稳定状态。
在网络测试中,通过GUI界面,来提高交互性。得到的测试结果分别如下图9所示。
图9. 测试结果
验证码的自动识别归根到底是人工智能的问题,这里主要考察数字验证码的识别问题,采用的是Hopfield神经网络与模式识别的研究方法。神经网络模型本身发展并不成熟,一些基础的理论也有待完善,拥有自身固有的优缺点 [
海南省自然科学基金(120RC451),国家自然科学基金(11761025, 11961018, 11901114),广东省教育厅青年创新人才类(2017KQNCX081),广州市科技创新一般项目(201904010010),中山大学广东省计算科学重点实验室开放课题基金资助(2018001),海南省研究生创新科研课题项目(Hys2020-108)。
张靖文,林萍芝,肖思佳,王浩华. 基于Hopfield神经网络模型的验证码识别问题Hopfield Neural Network Based Approach to Recognizing the Verification Code[J]. 应用数学进展, 2021, 10(11): 4006-4016. https://doi.org/10.12677/AAM.2021.1011426