摘要:验证码是各大网站用以防范计算机自动程序恶意攻击的手段之一。通过使用数字图像处理中的图片分割、开闭运算等手段,能够识别绝大部分网站的验证码。对验证码识别技术的研究,既能及早发现验证码的漏洞,也能对诸如车牌识别、手写识别等技术起到促进作用。
一、 课题背景
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Hunmans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分当前用户是人类还是计算机的自动程序。在测试中,用户需要根据程序生成的一个问题做出正确的回答,程序据此来判断该用户是人类还是计算机。验证码种类繁多,大体有基于字符的图片验证码、基于问答的验证码、声音验证码等。
目前,应用最广泛的是基于字符的图片验证码,它具有容易产生、不受用户背景知识和文化差异的影响,且暴力破解的难度很大,使用主流的编程语言,很容易可以产生一个包含随机字母或者数字的图片。为了增加识别难度,在生成图片时,往往会加上诸多干扰因素,比如加上前景、背景,字符粘连,字符变形、歪斜等。
验证码为互联网安全作出了很大贡献,但我们不能忽视验证码所存在的漏洞,研究验证码自动识别算法,能够及早发现验证码设计存在的漏洞,并在据此作出调整,以增加验证码的安全性。同时,验证码识别作为一种图灵测试,综合了数字图像处理、模式识别、人工智能等领域的研究成果,也对其他应用如车牌识别、手写文字识别等具有参考作用。
本文所研究的验证码识别算法,主要分为图片预处理、字符分割、模式识别三个步骤。由于各个应用所使用的验证码识别难度不一样,需要根据具体的验证码特点,进行具体分析,这里选取了CSDN的验证码作为主要分析对象。
二、图片预处理
1) 彩色图片灰度化
大部分彩色图像都是采用的RGB颜色模式,但是其并不能反映图像的形态特征,只是从光学的原理上进行了颜色的调配。灰度化的过程就是将有RGB三通道的彩色图像转化为灰度图像的处理,仅保留机器识别时所需要的必要信息,以便于后面的处理操作。在灰度化的过程中,一般是根据一定的系数将三维的RGB色彩降低为一维的灰度值。本人选取的灰度计算公式为:
其中,R、G、B分别是像素点在三个颜色通道的值,Grey为该像素点对应的灰度值。具体计算方法为:依次读取图片每个像素点,获取其RGB值,取三者的平均值作为新图片对应像素点的灰度值。彩色图片灰度化后的结果如表1所示:
2) 灰度图片二值化
经过灰度化的图片,每个像素点的灰度值为0~255之间的任意数。由于验证码图片中背景色与字符颜色具有较大差异,可以通过设定阈值的方法,区分背景和字符。灰度值