中共四川省委党校 唐利红
验证码技术的中心思想是:结合先前制定的规则,通过计算机系统生成一个问题,这个问题只有人类才能解决计算机却不能解决。如果问题很容易被解决,那么系统的操作者则为人类用户,进而进行下一步操作;
如果没有解决问题,那么后续就不允许操作。利用验证码技术,就可以使机器人不会遭受到攻击,使网络安全得到保障,同时它还能有效地对人类用户操作和计算机程序操作进行区分,从而有效地抵挡外来程序的攻击和威胁。在特定的情况下,可以使用这种技术去使网站和用户之间进行良好的沟通,特别是用户在进行支付和登录的时候,可以通过验证码对用户的个人信息安全得到保障。另外,利用验证码也可以有效地防止网页不被爬虫等程序侵袭,使密码系统不被侵害,网站服务器的安全也能得到保障。基于此,本篇文章对基于图像处理的验证码识别技术进行研究,以供参考。
当前,验证码的识别技术已经成为热门研究的方向之一。因为对于从事一些需要进入网站搜索、采集敏感信息等活动的人而言,能够成功识别验证码是必要的前提。英文单词CAPTCHA 是全自动区分计算机和人类的图灵测试,采用该技术主要是为了区别人与机器之间进行交互的差别,从而阻止机器人进行恶意操作。尽管国内的验证码识别论文相对较少,但是,应用形状上下文理论可对验证码图像进行有效的识别。通过进行预处理算法和选择适当的分类器,人们也可以实现较好的验证码识别效果。一些研究已经成功地设计出了基于模板匹配算法的形变数字验证码识别系统,其识别率达到100%。基于以上特点,本研究调查和统计了国内网络论坛和博客,分别设计了针对简单和复杂验证码的识别方案,并在各大网络论坛和博客实验中成功设计出验证码识别系统,并具有较高的识别率。此外,基于国内外学者的研究,我们提出了一种基于图像处理和卷积神经网络的文本验证码识别方案,结合设计的图像分割算法和高准确性的特点,能够有效地提取出字符,并具有较高的识别率。
1.1 传统的验证码识别
在对样本后期进行训练时必须具备数量较大的样本集,如果只通过人工进行简单的采集,无论是在时间还是精力上都会消耗很多,因此,就要使用编程中的Captcha 模块,并将符合要求的验证码图片生成了5000 张。
1.2 样本训练和识别
对于样本训练,就是结合有关的验证码样本,去将阿拉伯数字以及26 个英文字母的大小写进行字模的制作。在训练充足的样本以后,使得有效的字模库被建立起来,这样,需要识别的字符就可以根据情况选择对应的字模。因此,样本训练显得至关紧要,它可以对识别效率的高低起决定性的作用。接下来,将选取赶集网上一些训练后制作出的字模库,而且在进行字符识别时要以预处理后的图片为基础,识别出的字符还要以文本的形式呈现出来。
对于验证码,它是可以有效地去区分人为操作还是机器操作,因为这种技术操作便捷,且没有太大的数据传输,尤其是论坛性质的网站,它可以有效地阻止恶意行为的侵害。由于这种自动化程序被得到广泛的认可,所以,我国排名靠前的论坛中有多一半的论坛都在注册和登录等方面使用了验证码技术[1]。另外,其他方面也对此技术进行了应用,比如,电子邮件类网站,它可以有效地防止邮件出现群发或乱发的情况。整体来说,国内与国外在对验证码技术进行应用时都是相同的。另外,随着验证码技术的不断发展,进而产生了计算机业务,比如,电子推销,这时就会用到验证码识别技术,而且,对于残障人员正常上网的问题也进行了解决。目前,有很多验证码识别方法,比如,模板匹配和神经网络等。其中,匹配模板的识别方法最为简单,但它的应用范围不是很广泛,而且不具备较高的准确率,系统性也较为缺乏,所以在验证码识别技术中逐渐被淘汰。形状上下文以及神经网络也是有一定的问题和缺陷存在着,比如,没有较高的匹配度或是不容易控制收敛速度等,所以,这种验证码识别方法也不是最好的。
验证码图片具有独特的特点,因此对它们进行识别的方法与一般图像不同。对于设计识别算法时的注意点,应从两个方面考虑:格式和内容。首先在格式方面,验证码图片通常具备较低的分辨率,且其高度约为20 像素,宽度在50 ~100 像素之间。这个特点会使字符间距较小,很易于切分。同时,由于分辨率较低,需要识别的字符信息量也会受到影响,这对于匹配算法来说是个挑战。其次在内容方面,验证码经常会加入一些干扰因素,如背景干扰、噪音等,同时也加入了不同字体、字符位置和数量等变化。这些干扰可以有效地提高自动识别算法的难度,但需要注意的是,这些干扰不应对用户的网络使用造成不良影响[2]。综合来看,验证码的设计和实现需要在这些限制条件下取得平衡,以提高其识别的准确性和可用性,从而为用户带来更好的使用体验。
4.1 图片预处理
4.1.1 灰度化、二值化
在对图片处理之前,需要进行灰度化处理,因为只有进行灰度化处理以后才能使颜色信息不去影响模型的训练。再将原始色彩图片向灰度化转换时需要使用加权平均法,因为它主要是通过三个不同的分量去对权值进行计算并分配的,而整个图片的灰度像素值则用计算结果来表示,而且还要用到它特定的计算公式,其中用L表示加权平均后的灰度图像的像素,红绿蓝三原色的分量值则分别用R、G、B 表示。在进行灰度化以后,就要进行二值化操作,这项操作很重要。通过对阈值进行调整,如果图片中阈值高,其像素应设置成255,当阈值很低时,像素设置就是0,然后去转换图片,将其生成二值图片,图片只保留0 和255 的像素值。在进行二值化处理以后,像素值为255 的数量不仅少,而且还和字符特征有关,像素值为0 的数量又很多,在对卷积进行计算时,还要和像素点相乘,这样,在提取卷积核的字符特征时就会更加方便,使模型得到快速的训练。
4.1.2 图像去噪
在完成灰度化和二值化操作之后,就会使图片中有一些噪声和干扰线产生,这些噪声和干扰线会影响后续的字符分割以及提取识别,所以,就要提前将处理工作做好。连通区域去噪、霍夫变换去噪以及以空间域滤波等算法是最常用的去噪算法。以空域滤波为基础的算法在图片处理中最为广泛[3]。这种算法主要是对每个像素使用二进制图,而且横向宽度和纵向宽度的像素均为白色。本文针对验证码图片的使用,去将大部分的噪声和干扰线去除。
4.1.3 字符分割
由于那些验证码主要以字母和数字为主,所以它的字符类别也没有太多,进而导致在对卷积神经网络进行训练时没有进行分割就开始训练,虽然如此,但效果还是很理想的。中文汉字的数量对于英文来说是无可比拟的,比如,最常用的汉字有3500 个,通常情况下验证码都是4 个汉字,如果没有对其进行分割,就直接对卷积神经网络进行使用,那么就会加大学习成本。所以,如果是中文验证码,在进行识别时对字符进行分割就显得很是重要。以往主要采用两种字符分割法,分别是投影法和连通域法[4]。这两种方法的验证码图片均是以数字和字母为基础,并具有很高的分割成功率,但是,如果验证码为中文,那么它就会有一定难度,因为中文验证码主要是由汉字组成,而且大多数的汉字是有偏旁部首的,不仅如此,还有一些偏旁部首也是一个汉字,所以,一旦进行分割,就会把偏旁也分割出来。为了能够解决这个问题,就要定位卷积神经网络中验证码图片中的字符,利用预测单个字的坐标,去分割中文字符,而且效果很是明显。
4.2 分割图像的归一化
当把单个字符图像进行分割以后,不仅要进行二值化,还要将尺寸进行归一化处理。通过归一化,首先可以使字符图像的尺寸是统一的,这样就可以在提取特征时更加方便;
其次,可以使图像的尺寸减小,实现数据的降维。将字符图像分割以后,其高度围绕在30 像素左右,宽度围绕在17 ~35 像素。通过测试以后,所保留的有效信息像素尺寸最小是8×10 像素,这个尺寸是将图片分割以后所得的目标尺寸。
4.3 卷积神经网络的设计与实现
结合卷积神经网络的功能结构将其分为特征提取和全连接还有输出三个部分。特征提取又是由卷积、池化和激活函数组成,而且在进行提取时还要和卷积层和池化层以及激活层相对,当验证码图像被灰度化处理以后就会生成矩阵输入卷积神经网络,最后提取特征[5]。在卷积和池化的多次作用下,将特征向量提取出来,通过全连接层,将这些特征组合到一起,最后在连接输出层。这项网络模型一共七层,使字符验证码在实现了由低向高的进行特征表达,这时就会用到输入层、输出层、卷积池化层和全连接层。而且还将标准化层加入到卷积层和池化层之间,在激活函数以前会用到BN 层,使均值在BN 层进行归一化。当把BN 层引入以后,就可以有效地提升模型的训练速度和泛化能力,甚至还能提升模型的精度。为了不让模型出现拟合的情况,就要将降采样层应用到每层中去,在项目中,降采样层的神经元概率为0.25。为了能够缓解模型拟合的问题,可以在激活层中使用ReLU 函数,它不仅计算速度快,而且还很稀疏。而输入层,它是通过灰度化操作去处理验证码,进行产生矩阵验证码图像,在提取局部特征时,可以通过卷积操作来实现,对于卷积层的偏置项和正态分布的随机数相同,为了不影响图片的尺寸,就要利用卷积层将0 值进行使用,使图像矩阵四周得到补充。为了能够进一步将验证码图像的特征提取出来,就要使用最大池化层,在确保特征不发生改变的同时,对特征进行降维[6]。
在这个实验中,分别验证了三种不同的验证码。我们先从一些网站中随机采集了三种验证码图像,然后使用相应的图像处理过程,去对图像进行处理。(1)对于那些拥有规范字体的验证码图片,它不仅字符大小相同,而且很是规范,没有旋转也没有发生变形。(2)虽然拥有规范的字体,但是字符大小却不一,并且字符也是以旋转的形式存在。(3)验证码图片不仅字体不规范,而且字符也是发生改变的。在验证这三种验证码图片时,就需要将它们的特征定向进行提取,然后根据特征进行随机分组,并分为两组,最后再去训练和识别这两组的特征[7]。径向基函数为计算时所采用的公式,提取了这两个参数的y与c的值,进而展开识别率的计算。通过对其进行分析以后得出,在这项实验中,只有y不变,c才能一点点变大,进而加大验证码的识别率,当c达到最大限度时,此时的识别率也不会再提高。如果该验证码的旋转与大小不同时,那么就会降低准确率。如果是c不变,y一点点变大时,这时的识别率也会增高,但是y值达到最大限度值时,这时的识别率却呈现出下降的趋势。因此,只有验证码的字符是标准的,而且字符是规范的,因此验证码的识别率就是最高的,可达到100%,哪怕是验证码过于复杂,通过SVM 进行识别以后识别率也不低于80%。由此可以看出,利用SVM 的方法可以使验证码的识别算法准确度更高。
随着互联网的普及和发展,网络安全问题日益突出。为了解决机器人滥用自然人资源的问题,许多网站引入了验证码技术。验证码是一种全自动公开的图灵测试,旨在区分计算机和人类,并且验证码图片是一种常见的验证码实现方式,其主要特点是具有独特的格式和内容,同时还包含很多干扰因素,如背景干扰、噪音等。因此,设计验证码自动识别算法具有很高难度和挑战性。本文旨在深入探究和研究图片验证码,并设计一种高效的验证码自动识别算法。在研究过程中,我们采用了更新颖、更高效的神经网络模型,通过对识别算法中影响识别率的重要参数进行分析和优化,来提高验证码的识别率和可用性。同时,我们也意识到本文的研究也存在着一些不足之处,首先是部分理论研究可能不够深入,需要进一步研究和完善;
其次是多方面原因可能会对研究造成一定的影响。因此,在未来的研究中需要进一步探索和发现,寻找更好的解决方案,以提高网络安全和用户体验。