研究验证码自动识别技术可以进一步提升人识别验证码的可读性,增强机器识别的难度,从而提高网络安全性。针对目前提出的验证码识别方法基本都是采用光学字符识别(OCR)方法对机器写的标准字符进行识别,本文提出了一种多样变换的手写验证码自动识别算法,对彩色验证码进行识别主要包括彩色验证码的二值化、手写字符的区域分割、同一字符的区域连接、使用卷积神经网络对手写字符进行训练、手写字符识别。本文的实现结果明显优于OCR的识别结果。结果表明通过该网站的测试,基本上能自动识别该网站的验证码。 Research on technique of automatically identifying CAPTCHA can promote people to identify the readability of verifying the code further and strengthen the difficulty that the machine identifies and raises a network safety thus. Currently aiming at the CAPTCHA identification methods are basically used optical character recognition (OCR) method to identify the standard characters written by the machine. The paper puts forward color CAPTCHA identifies to mainly include color verification code binary by threshold, the connect district segmentation of the handwritten character list, the near district of the same character list links, use convolution neural network to train a character and to identify handwritten character. The paper realization obviously surpasses an identifying of OCR result. The result shows CAPTCHA of the website that is basically passed by the website test; the website can automatically identify CAPTCHA of the website.
王春才1,孙媛媛2
1长春理工大学,计算机科学技术学院,吉林 长春
2长春市万易科技有限公司工程研究中心,吉林 长春
收稿日期:2017年11月3日;录用日期:2017年11月16日;发布日期:2017年11月23日
研究验证码自动识别技术可以进一步提升人识别验证码的可读性,增强机器识别的难度,从而提高网络安全性。针对目前提出的验证码识别方法基本都是采用光学字符识别(OCR)方法对机器写的标准字符进行识别,本文提出了一种多样变换的手写验证码自动识别算法,对彩色验证码进行识别主要包括彩色验证码的二值化、手写字符的区域分割、同一字符的区域连接、使用卷积神经网络对手写字符进行训练、手写字符识别。本文的实现结果明显优于OCR的识别结果。结果表明通过该网站的测试,基本上能自动识别该网站的验证码。
关键词 :彩色验证码二值化,区域分割,相近区域连接,单个字符卷积神经网络训练,单个字符的识别
Copyright © 2017 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
随着互联网的极度开放,网络爬虫技术可以肆意获得任意公开的数据,网络的安全问题也日益突出,其中设置人类可读容易机器破解难的验证码在一定程度上可以阻止肆意的网络爬虫技术。验证码CAPTCHA起源于美国卡内基梅隆大学的一个科研项目,原意为全自动区分计算机和人类的图灵测试是一种区分用户是人类还是计算机的公共自动程序。当用户要对网络站点进行用户注册、用户登录或非登录式留言回复时,均需先正确填写网站提供的验证码,并通过网站服务器验证后,才能顺利完成各种操作。验证码技术在增强网络安全方面起到了重要作用。
目前的验证码识别在国内外已成为热门领域,其理论体系日渐完善。Per-Olal对验证码提取特征并用神经网络训练方法对一种简单验证码进行识别。2005年Edward等通过将字符旋转至水平并对单个字符应用小波滤波结果作为特征,以接近100%的识别率破解了验证码。同年Kumar和Patrice的研究表明,在验证码识别中,验证码图形字符分割比识别更难,一旦正确将字符逐个分开,运用机器学习算法就可以轻易解决识别问题。然而至今没有一种通用有效方法解决字符分割难题。2008年Jeff Yan等以高达90%以上的识别率破解了微软2007年使用的验证码 [
本文主要针对一些手写扭曲、抖动变换的验证码进行研究,包括某些字符涂抹的颜色点分布不均和同一字符大小不一、扭曲、抖动不同等特征。验证码图像如图1所示其分辨率统一为160*70像素,验证码特点彩色带干扰线、人眼不好识别,具有任意手写、抖动的特征,每个单个字符的形状特点不同,见图1。
对彩色验证码识别前,需将验证码码图像预处理,包括彩色图像灰度化与灰度图像二值化,如果直接对彩色图像自适应阈值二值化,可能会过滤掉某一个亮度和背景相差不大的字符信息,本文采用了红、绿、蓝三通道分别二值化,并取每个通道的最大值作为二值化的图像,使用此种方法对彩色图像进行二值化没有过滤掉有用的字符,见图2。
彩色验证码二值化处理后,采用CFS区域连通对字符进行分割,以提取图像中每个字符作为卷积神经网络层输入。根据图像的特点本文采用区域连通性算法对验证码进行分割。本文提到的区域连通算法以种子填充算法为基础,通过算法预先设定种子点,从该种子点出发,经过搜索标记验证码的所有像素点,将与预定义的性质相似如像素一致,找到种子点周围的8邻域像素一致的点加入到该种子队列中,来生长这些区域。区域连通算法也可通过沿着水平x轴依次扫描所有的像素点,找到字符像素,标记为1,找到标记为1的像素的上、下、左、右、四个对角线八邻域标记为1,依次标记水平字符像素点。纵向依次扫描水平像素点,找到字符标记像素点依次进行标记,发现周围八邻域按照标记的像素点值进行标记,再对已标记的像素点重新进行扫描进行合并同一区域的字符。对分割后字符进行归一化,通过查找单个字符的上下左右边界来存储单个字符的位置。
如果合并标记的字符区域为4个,直接进行卷积神经网络的输入端进行样本训练测试。
如果合并标记的字符区域大于4个,单个小的字符噪声应进行删掉,删掉后的字符区域为4个再进行卷积神经网络的输入端进行样本训练测试。
比较相邻两个区域的最小距离,如果相邻两个区域的最小两个点之间的距离小于s1,两个区域可以合并,如果相邻两个区域的最小两个点之间的距离大于s1并且小于s2,其中s1 < s2,可能是字符i或者j,如果相邻两个区域的最小两个点之间的距离大于s2,两个区域就可能是两个字符。s1和s2通过选取10,000张图片,40,000相邻两个字符的最近的两个点之间距离比较,挑选出由i和j的字符的点和无点连续的线最近的两个点之间距离比较,发现完整相邻两个字符之间的最短距离会最大为s2,i和j之间的点和无点连续的线最近距离会相对小为s1,相邻字符之间的最短距离小于s1,把分开的字符合并,见图3。
CNN是一个多层的神经网络 [
本文采用CNN进行验证码训练和识别。
图1. 彩色验证码图像
图2. 彩色验证码二值化结果
图3. 彩色验证码连通区域分割
图4. 卷积神经网络的拓扑结构
验证码CNN拓扑结构如图4所示图中自下至上分别为卷积0层、子采样层、卷积四层。各层神经元与连接数如表1所示。
C1层是一个卷积层,由6个特征图Feature Map构成。特征图中每个神经元与输入为3 × 3的邻域相连。特征图的大小为18 × 18,这样能防止输入的连接掉到边界之外(20 − 3 + 1 = 18)。C1有60个可训练参数(每个滤波器3 × 3 = 9个unit参数和一个bias参数,一共6个滤波器,共(3 × 3 + 1) × 6 = 60个参数),共60 × (18 × 18) = 19,440个连接。
S2层是一个下采样层,有6个9 × 9的特征图。特征图中的每个单元与C1中相对应特征图的2 × 2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。每个单元的2 × 2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4 (行和列各1/2)。S2层有12 (6 × (1 + 1) = 12)个可训练参数和2430 (9 × 9 × (2 × 2 + 1) × 6 = 2430)个连接。
C3层也是一个卷积层,它同样通过3 × 3的卷积核去卷积层S2,然后得到的特征图就只有7 × 7个神经元,但是它有16种不同的卷积核,所以就存在16个特征图。C3中每个特征图由S2中所有6个或者几个特征图组合而成。C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图