基于图像识别和神经网络的验证码识别
连晓岩1, 2,邓方1, 2
(1. 北京理工大学 自动化学院,北京,100081;
2. 北京理工大学 北京市自动控制系统重点实验室,北京,100081)
摘要:提出一种基于图像识别和神经网络的验证码识别方法,能快速、高效地识别兼有数字、英文字母等多种字符的验证码图像。首先,对验证码图像进行灰度化、二值化和去噪等预处理操作,滤除干扰信息、突出字符特征,得到含较少噪声的二值图像;其次,采用一种经过改进的、融合投影特性的连通域分割法获得单个字符图像并标准化;再次,对标准字符图像进行特征提取,构建并训练神经网络;最后,测试神经网络训练效果实现字符识别,在Matlab环境下处理不同网站的大量验证码图像。实验结果表明:本文提出的方法对于字符排列不规则、干扰噪声较多的验证码具有很高的识别率和有效性。
关键词:验证码;图像识别;神经网络;预处理;字符;分割;识别
中图分类号:TG146.2+1 文献标志码:A 文章编号:1672-7207(2011)S1-0048-05
CAPTCHA recognition based on image recognition and neural networks
LIAN Xiao-yan1, 2, DENG Fang1, 2
(1. School of Automation, Beijing Institute of Technology, Beijing 100081, China;
2. Beijing Key Laboratory of Automatic Control System, Beijing Institute of Technology,
Beijing Institute of Technology, Beijing 100081, China)
Abstract: Based on image recognition and neural networks (NNs), a rapid and effective CAPTCHA recognition method was proposed which has different characters of numbers and English letters. Firstly, pre-operating was put in practice, including graying, binaryzation and removing noise to get the binary image with higher quality. Secondly, images with single character were acquired through an improved segmentation algorithm combining connected domain and projection together, and then normalized. Thirdly, features of character image samples were extracted; the NNs were built and trained. Finally, the trained NNs were tested to realize character recognition. Based on the software environment of Matlab, the recognition processing and result of many CAPTCHA images from different websites were proposed. The experiments show that the method is effective and feasible for the CAPTCHAs which contain irregular placed characters and much noise.
Key words: CAPTCHA; image recognition; neural networks; pre-operating; character; segmentation; recognition
近年来,网络信息安全伴随着互联网的迅速发展成为备受关注的问题。作为互联网十分重要的信息媒介,蓬勃发展的网络论坛、社区、博客、微博等已悄然融入社会生活的诸多方面,人们对相伴而生的验证码生成和识别技术的研究也随之日渐升温。为了防止恶意破解密码、刷票和论坛灌水等,越来越多的网站开始使用验证码。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图像,图像里加上一些干扰像素,由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用其某项功能。如何有效地实现对网站、论坛等验证码的识别是模式识别方法在复杂互联网应用中的重要课题。从目前国内外的研究情况看,验证码识别方法主要分为3类:基于模板匹配的方法、基于字符结构的方法和基于神经网络的方法。文献[1-3]中提出的识别算法对验证码图像要求较高,如格式固定、背景清晰、样式规则等,能识别的字符种类也较为单一,应用时存在一定的局限性。为此,本文作者提出一种能有效地识别包含数字和英文字母、字符排列不规则、含较多噪声的验证码图像的方法。
1 识别流程
本文设计的验证码识别流程如图1所示。首先,从网站上获得验证码原图,可采用截图或分析图像URL再下载保存的方法进行;获得的验证码原图一般都是彩色图像,需要先对彩色图像进行灰度化处理,得到256色灰度图像;接着将灰度图像二值化,去除干扰背景,保留字符信息,得到只保留黑、白两色的(0,1)二值图像;二值图像若存在很多噪声,则需进行去噪处理。然后,将经过预处理的图像上的单个字符分割出来,建立训练集和测试集:训练集中的字符图像用来对人工神经网络进行训练;当网络训练误差收敛到设定值后,用测试集的字符图像进行测试,若测试结果不能满足识别率要求,则继续进行神经网络的训练和调节。最后,用训练好的神经网络进行验证码图像的字符识别,并输出识别结果。

图1 验证码识别流程图
Fig.1 Flow chart of CAPTCHA recognition
2 实现方法
2.1 预处理
验证码图像的预处理是指在对验证码图像进行分割、特征提取和识别前所进行的处理。预处理的主要目的是对一个给定的含有字符的图像突出图像中与字符有关的某些信息,削弱或去除某些不需要的信息,使其结果对后面的识别比原始的字符图像的识别更适合。预处理主要包括灰度化、二值化和去噪3个步骤。
灰度化是将彩色图像变换成灰度图像的处理过程。本文采用加权平均值法,用R,G和B分别表示彩色图像中红色、绿色、蓝色的分量值,Gray表示灰度图像像素值,则有:
(1)
二值化的关键在于阈值的选取。用Bw表示二值图像的像素值,通过设定适当的阈值T将灰度图像处理成(0,1)二值图像的过程为:
(2)
对于字符和背景差别较大、灰度级分布规律较为统一的验证码,二值化时采用Ostu算法确定阈值。Ostu算法是一种全局阈值法,其基本思想是:根据灰度级直方图将灰度图像在某一阈值处分割成2类:一类对应于背景噪声部分,另一类对应于前景字符部分。当被分成的两类的类内方差最小、类间方差最大时,确定该阈值为全局阈值。方差是灰度分布均匀性的一种度量,其值越大说明将图像分成的两部分差别越大,按照类间方差最大原则取定阈值的分割意味着错分概率最小。该算法的流程图如图2所示,其中(i, j)表示各个像素点,T表示全局阈值,G表示按照一定准则计算得到的类间方差,max(G)表示类间方差G取得的最大值。
二值图像中存在较多的噪声干扰时会造成字符分割和识别困难。为降低干扰信息的不利影响,有必要进行去噪处理滤除噪声污染,方法包括邻域法、连通域法和中值滤波法等。邻域法算法简单,时间开销小,但只能去除孤立的噪声点,应用范围有限。连通域法需要检测图像中所有相互连通的区域,当区分字符与噪声的面积临界值选取不当时,去噪后将导致图像失真。中值滤波法则是将二维滤波窗口内所有像素值的中值作为新的像素值赋给当前窗口正中的点,对于图像中的随机噪声尤其是脉冲噪声能起到很好的滤除作用。根据不同的噪声形式和特点,选择恰当的去噪方法,必要时将多种去噪方法组合使用,以尽可能好地滤除干扰噪声,保留字符信息。

图2 Ostu算法二值化流程图
Fig.2 Flow chart of Ostu arithmetic of binaryzation
2.2 字符分割
字符分割效果直接影响着字符识别的准确性,提取出的单个字符所携带的信息要完整而不冗余,否则会使后续的字符识别产生不应有的错误结果。
本文设计了一种改进的连通域分割法,能够有效地处理存在字符粘连的验证码。经过预处理的二值图像中,像素值为1的点分别构成多个连通的点群,即连通域。由于1个连通域中可能包含1个或多个字符,因此,必须对连通域法分割得到的图像进行进一步处理,通过分析区域面积和投影特性,在二次分割时很好地实现了单个字符的提取。步骤如下。
第1步:分割连通域。对图像进行连通域标记,按标号顺序依次处理标记矩阵,给当前连通域定界,以此为边框分割出标记矩阵的子矩阵,将像素值为标号的点还原为1,该子矩阵重新成为(0,1)二值矩阵,对应为一个连通域的二值图像。对标记矩阵的每个标号区域都进行同样的处理,实现初步分割。
第2步:判断字符个数。逐一分析初步分割图像,计算图像面积并统计图像中字符像素点总和,判断该区域中是否包含多个字符。若是,转下一步;若否,则当前图像为单个字符图像,分割完成。
第3步:二次分割。对包含多个字符的图像进行垂直投影,波峰对应于字符,波谷则对应于字符之间的空隙,根据波谷所在位置确定图像的水平分割点,得到若干子图。再对每一幅子图进行水平投影,确定字符在子图中垂直方向上的位置,在投影的上下边界处切割子图,最终完成各个字符的分割。
字符分割步骤中得到的单个字图像大小不同,为便于处理,采用双线性插值法进行标准化处理,得到大小统一的字符图像。
2.3 神经网络字符识别
神经网络是由大量人工神经元(处理单元)广泛互联而成的网络,它是在现代神经生物学和认识科学对人类信息处理研究的基础上提出来的,具有很强的自适应性和学习能力、非线性映射能力、鲁棒性和容错能力,广泛应用于模式识别、鉴定、分类、语音和控制系统等研究领域[4]。神经网络字符识别是一种较先进的识别方法,算法物理概念清晰,推导过程严谨,通用性强,用于验证码字符识别的正确率很高。
2.3.1 特征提取
进行神经网络训练时,输入网络的信息应尽可能地简洁而完备,从而在描述字符特征的同时降低网络复杂度和训练用时。假设标准化时所设定的字符图像尺寸为35×20,则共有700个像素点,作为网络的输入向量显然维数过大,因此,首先对字符图像进行特征提取[5-6]。字符特征包括投影特性、轮廓特征、分块特性和分段线性等。本文根据投影特性提取字符特征,具体步骤如下所述:
(1) 字符二值图像用raw表示,各个像素点为(i,j)。其中:i=1, 2, …, 20;j=1, 2, …, 35。
(2) 按式(3)和式(4)分别计算该字符图像的垂直投影和水平投影,得到raw_X和raw_Y如式(5)和(6)所示。
(3) 根据式(7)求得字符图像的特征向量raw_XY,此为55×1的列向量。
(3)
(4)
(5)
(6)
(7)
2.3.2 网络训练
网络训练前首先要确定神经网络的层数及每层神经元的个数。例如,百度联盟验证码图像包含32个字符,其中8个数字、24个小写英文字母。本文据此设计神经网络分类器的结构,构建了三层神经网络:1个输入层、1个隐含层和1个输出层。利用待识别字符的投影特性进行特征提取得到了55维特征向量,因此,输入层包含55个神经元;隐含层神经元个数的选择没有统一的规则,这里取16个;对字符进行二进制编码,32种字符需要5位二进制数表示,因此,输出层包含5个神经元。

图3 字符识别神经网络结构图
Fig.3 Structure of NNs for character recognition
如上所述,针对百度联盟验证码图像,以待识别字符特征量为输入、以字符相应二进制代码为输出构建的神经网络结构如图3所示。接下来设置网络参数,选取适当数量的字符样本训练网络。当网络误差收敛到所设定的目标值时结束训练,保存相关数据留待后用。
2.3.3 字符识别
神经网络训练完成后即可用于字符识别。对待识别字符按照特征提取的规则进行处理,获得相应的特征向量输入网络;网络将识别得到的二进制代码输出,再根据预先设定的字符-代码对照表确定字符类型并输出识别结果。
3 实验
为验证上述方法的可行性和有效性,本文以北理FTP联盟(1)、极速之星PT下载站(2)、百度联盟(3)、CSDN(4)和搜狐社区(5)共5个网站的验证码为研究对象,在Matlab环境下编程实现了算法的全过程,包括验证码图像的灰度化、二值化、去噪和字符分割,神经网络的构建、离线训练和在线测试,以及利用训练好的神经网络识别字符等。
以百度联盟验证码为例,对实验中的处理过程加以说明。针对验证码图像特点,在预处理时使用Matlab图像处理工具箱中相应的函数完成灰度化和全局阈值法二值化。去噪阶段采用中值滤波法,经实验发现不同窗口的滤波效果不同,选取效果最佳的3×3窗口。字符分割时采用本文改进的连通域分割法。这两步的处理效果如图4所示。神经网络法字符识别阶段,根据如图3所示的设计思路,在Matlab环境下构建了三层神经网络,设置网络参数并用包含适量字符图像的样本集训练该网络。经过23 107次训练,网络误差为0.001 999 95,收敛到了所设定的目标误差0.002,表明训练成功,可用于测试集中验证码的识别,平方误差随神经网络训练次数的变化曲线如图5所示。

图4 百度联盟验证码的预处理和字符分割
Fig.4 Pre-operating and character segmentation of Union Baidu CAPTCHA

图5 百度联盟验证码识别神经网络训练结果
Fig.5 Training result of NNs for character recognition of Union Baidu CAPTCHA
实验中用大量样本图像对程序进行了测试,不同验证码识别过程的处理效果如表1所示,结果统计如表2所示。网站1和2的验证码字符规整,噪声较少,识别率达到100%;网站3和4的验证码干扰噪声较多、字符略微倾斜,识别率也都达到了90%以上。
表1 不同验证码识别实验的处理效果
Table 1 Treatment effects of different CAPTCHAs’ recognition experiments

表2 实验测试结果统计
Table 2 Statistical data of test experiments

4 结论
用以上基于图像识别和神经网络的验证码识别方法能够有效地识别字符排列不规则、干扰噪声较多的验证码图像。不足之处是神经网络的训练过程或多或少地需要人工参与;对字符变形、大角度旋转的验证码识别效果仍有待改善,如对网站5的验证码识别率不够理想。本文对于验证码自动识别和相关领域的研究及应用具有一定的借鉴意义,在维护网络安全、防止恶意程序攻击以及开发智能网络机器人等方面具有广阔的应用前景。
参考文献:
[1] 潘大夫, 汪渤. 一种基于外部轮廓的数字验证码识别方法[J]. 微计算机信息, 2007, 23(25): 256-258.
PAN Da-fu, WANG Bo. A digit validation image recognition algorithm based on exterior contour[J]. Microcomputer Information, 2007, 23(25): 256-258.
[2] 王虎, 冯林, 孙宇哲. 数字验证码识别算法的研究和设计[J]. 计算机工程与应用, 2007, 43(32): 86-87.
WANG Hu, FENG Lin, SUN Yu-zhe. Research and design of digital character-based CAPTCHA decoder[J]. Computer Engineering and Applications, 2007, 43(32): 86-87.
[3] 原玉磊, 蒋理兴, 钦桂勤. 基于字符特征的数字字符识别算法[J]. 海洋测绘, 2009, 29(1): 56-58.
YUAN Yu-lei, JIANG Li-xing, QIN Gui-qin. Digital character recognition algorithm based on character feature[J]. Hydrographic Surveying and Charting, 2009, 29(1): 56-58.
[4] 葛哲学, 孙志强. 神经网络理论与MATLAB R 2007实现[M]. 北京: 电子工业出版社, 2008: 1-8.
GE Zhe-xue, SUN Zhi-qiang. Neural network theory and MATLAB R2007 realization[M]. Beijing: Publishing House of Electronics Industry, 2008: 1-8.
[5] 马晓娟, 周钢, 潘仁龙. 一种基于特征的BP 神经网络车牌字符识别[J]. 佳木斯大学学报: 自然科学版, 2009, 27(6): 831-833.
MA Xiao-juan, ZHOU Gang, PAN Ren-long. License plate character recognition based on BP neural network[J]. Journal of Jiamusi University: Natural Science Edition, 2009, 27(6): 831-833.
[6] Guyon I, Elisseeff A. An introduction to variable and feature selection[J]. J Mach Learning Res, 2003(3): 1157–1182.
(编辑 陈灿华)
收稿日期:2011-04-15;修回日期:2011-06-15
基金项目:北京市教育委员会共建项目专项资助(XK100070532)
通信作者:邓方(1981-),男,四川南充人,博士,讲师,从事智能信息处理研究;电话:010-68948971;E-mail: dengfang@bit.edu.cn