浅谈对强干扰下图形验证码的识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈对强干扰下图形验证码的识别
【摘要】随着互联网的飞速发展,一部分不道德的人便利用自动程序在公众BBS上批量注册帐号并散发海量广告,妨碍网站正常用户的浏览并给服务器加重了负担。为了区分开自然人与机器,人类发明了图形验证码。本文主要讨论了对图形验证码进行机器光学字符识别的技术及难点,从而给出图形验证码的发展方向。
【关键词】图形校验码;像素;点阵;中文输入法
1.图形验证码的校验方式
图形验证码(Completely Automated Public Turing test to tell Computers and Humans Apart, CAPTCHA)是区分用户端就是是机器操作还是人工访问的一种有效工具。在有图形验证码的环境下,机器如需模拟人工访问,则需利用光学字符识别(Optical Character Recognition, OCR)技术实现的暴力破解。因为人眼可以看到的图片对于计算机来说是必可见的,所以这种方法并没有绝对禁止的途径,只有利用人脑的模糊识别能力远比计算机强的特点对验证码图片添加一系列干扰要素,从而让人眼能识别的同时机器识别程序厄不能。
2.图形验证码的主要干扰技术
2.1 添加噪声干扰:在图形验证码的图片上随意添加与字符同一颜色或不同颜色的干扰点或干扰线。
2.2 字符位移,图形验证码的字符不处于同一水平线上,或字符之间的空隙不相同。
2.3 字符自身的调整,如拉伸、扭曲、旋转。
2.4 使用不同的字库,如使用汉字作为验证码的字符。
2.5 使用问答的形式,图形验证码中显示的是问题,而需使用者回答的是问题的正确答案。
3.图形验证码的降噪
为图形验证码添加噪点以抗识别已经是通用的做法。网络上几乎所有噪点都符合一个特征:噪点与底色的对比度必然比字符与背景的对比度低。该特征产生的原因是当字符与背景色对比最强烈时才容易被人眼所捕捉。同时还有一类杂色的干扰线。
对于这类干扰要素,我们所使用的方法是根据亮度直接转成黑白二值位图。
这不单止是所有OCR的必经步骤,还能通过设置正确的阀值清楚掉大量的噪点和几乎所有杂色干扰线。经过以上操作,能明显去除图形验证码上的大部分干扰但也很明显并不是所有的噪点都能如此简单的清理掉。这时我们必须对图片上每一个黑点进行扫描,以期去除剩下的噪点。我们对噪点的辨别方式如下:如果一个黑点(左边x,y)附近的8个点(分别为(x-1,y-1),(x-1,y),(x-1,y+1),(x,y-1),(x,y+1),(x+1,y-1),(x+1,y),(x+1,y+1),)里,只有两个或少于两个点是黑点,那么该点(x,y)为噪点。通过这一系列的处理,可基本消除。
4.图形验证码的字符抽取
我们所设计的切割算法是从左边第一列开始向右扫描,遇到有黑点时记录下该列号,接着从下一列开始继续向右扫描,当发现一列全为白点时再次记录该列号。假设去噪步骤的结果是完美的,那么理想的整个列切割程序将如下:
(a)进入左边第一列。
(b)自顶向下扫描本列:如发现有黑点存在则记录列号同时向右移动一列并转入步骤(c),如未发现则向右移动一列重新执行本步骤。
(c)自顶向下扫描本列:如发现全列都没黑点则记录列号同时向右移动一列并转入步骤(d),如发现黑点则向右移动一列重新执行本步骤。
(d)检查是否已记录够10个列号:如已足够则退出循环,如未足够则向右移动一列并重新执行步骤(b)。
当列切割程序执行完毕则进入行切割。行切割则是指定的列号范围内逐行扫描,当遇到黑点时记录行号并进入下行继续扫描,当遇到一行全为白点的行时记录行号并进入下一个列片段重新从第一行开始扫描。假设去噪以及行切割步骤的结果是完美的,那么理想的整个行切割程序将如下:
(a)进入第一个列片段(如列号1、2为一个片段,3、4为下一个片段)。
(b)进入上面第一行。
(c)自左向右扫描本行:如发现黑点则记录行号同时向下移动一行并转入步骤(d),如未发现则向下移动一行并重新执行本步骤。
(d)自左向右扫描本行:如发现全行无黑点则记录行号同时向下移动一行并转入步骤(e),如发现黑点则向下移动一行并重新执行本步骤。
(e)检查是否已记录够10个行号:如已足够则退出循环,如未足够则进入下一个列片段并重新执行步骤(b)。
经过上述步骤可得出10个行号与10个列号,用第1、2行号与第1、2列号则可得出第一个字符的具体位置,而第3、4行号与第3、4列号则可得出第一个字符的具体位置,依次类推,我们可以得出在降噪步骤完美实现的前提下5个字符的具体位置。
5.图形验证码的字符抽取
实际操作中因为降噪有可能造成不同验证码图片中某一字符的轮廓出现特一定的丢失,基本不可能出现与样本完全相同的情况。假设切割出的大小还是相同时,我们只需把两者中所有元进行对比,如果相同超过85%,我们则可认为是同一字符。
还有另外一种情况是当噪点与字符相连并无法通过降噪步骤顺利清除,或者降噪步骤把一些属于字符的信息也消除掉了,势必造成切割出来的图片大小与设想中不同。
6.图形验证码识别上的难点
6.1 降噪上的难点如前文所述,降噪是否顺利是决定能否正确分割的前提。现在已经开始有部分验证码字符使用了渐变色效果。渐变色效果意味着字符颜色有一定的亮度范围。一旦当较大面积的噪点或干扰线颜色的亮度与字符颜色亮度近似的话机器便难以区分。也就是说即使人眼看上去的颜色不同,但当亮度近似时我们所使用的降噪方法无法正确处理。
6.2 分割上的难点在于验证码字符间不留空隙的设计已经逐渐被不少图形验证码程序运用起来了。在字符宽度以及旋转角度毫无规律的情况下难以识别。
6.3 识别上的难点则会更多。我们在对识别进行探讨时发现,对在一个不足20*20像素大小的黑白二值位图里的点阵进行旋转、拉伸或扭曲都是难以实现的。所以一旦验证码每个字符都进行过了不同的形变处理的话,对比的成本便会很高。另一方面,只识别26个英文字母加10个数字时,因样本量小效率很高。当导入中文字符时则识别效率大大下降。对一些需要进行计算、判断的验证码的题目,自动程序无法有效进行识别与判断。
7.图形验证码的发展方向
根据上述研究结果,对字符进行小角度的旋转加上拉伸或扭曲是对抗对照识别的有效办法。因验证码所占图像像素极少,在一个特定的范围内对字符进行任何形变都会造成较大程度的失真。所以即使在识别程序有着明确且具有针对性的形变修正下依然难以获得足以应用的识别率。小角度的旋转不单止不会对肉眼的识别造成障碍,同时会让字符的特征得以大量的改变,加上对字符执行一定的形变操作后字符的长宽比改变,不能用于粗略判断出字符的范围及水平位置。第二种策略是利用汉字做字符的验证码。英文加数字总共就36种字符,而使用汉字则在2个英文字符的空间内至少塞进2000多种可能性(只使用GB2312的情况