基于TensorFlow和CNN模型的验证码识别研究

2024-09-19 00:00:00马凯贺晓松
现代信息科技 2024年13期

摘 要:针对传统机器学习中应用于多位字符验证码的分割识别方法具有整体准确率低、泛化能力不足的问题,提出一种高效通用的识别方法。设计基于CNN模型的端到端字符型验证码识别流程,使用TensorFlow框架实现流程的数据训练和效果验证。该方法可以高效地识别出字符型验证码,其平均准确率为95%以上,输入整张图片,直接输出整体识别结果,具有更强的通用性。使用CNN模型识别多位字符验证码相比于传统机器学习方法具有更高的准确率和通用性。

关键词:验证码识别;TensorFlow;CNN;端到端

中图分类号:TP391;TP18 文献标识码:A 文章编号:2096-4706(2024)13-0065-05

Research on Captcha Recognition Based on TensorFlow and CNN Model

MA Kai, HE Xiaosong

(Chongqing Institute of Engineering, Chongqing 400056, China)

Abstract: Aiming at the problems of low overall accuracy and insufficient generalization ability of segmentation and recognition methods applied to multi character captcha in traditional Machine Learning, an efficient and universal recognition method is proposed. It designs an end-to-end character captcha recognition process based on CNN model, and uses TensorFlow framework to implement data training and effectiveness verification of the process. This method can efficiently recognize character captcha with an average accuracy of over 95%. By inputting the entire image and directly outputting the overall recognition result, it has stronger universality. It uses CNN models to recognize multi character captcha has higher accuracy and versatility compared to traditional Machine Learning methods.

Keywords: captcha recognition; TensorFlow; CNN; end-to-end

0 引 言

验证码是一种用于验证用户身份或确保某些在线操作或交互是由真实人类而不是自动化程序(如机器人或恶意软件)执行的安全措施,在各大网站中已得到广泛应用。除常见的字符型验证码外,还有短信验证码、滑块验证码、算术运算验证码等[1],本文提出的识别算法中用到的是字符型验证码。

传统的字符型验证码识别方法主要分为图像预处理、字符分割和字符识别三个步骤[2]。对于只包含字符的验证码图像,一般采用先逐个分离字符,然后利用机器学习方法对子图像进行正确分类,再组合后作为整体的预测结果,因此字符分割是影响识别效果的关键。汪志华[3]提出基于一种基于广义霍夫变换的识别算法针对验证码图片中出现的字符部分形变、字符粘连、字符旋转进行有效处理和识别,取得较好的效果。简献忠[4]等提出一种基于SOM(self-organizing maps)神经网络聚类与维诺图(Voronoi)骨架形态分析相结合的算法,对各种字符粘连类型及字体倾斜扭曲的验证码均能准确分割。Zhang等[5]提出了改进的垂直投影方法应用于验证码字符分割,针对不同的粘连类型字符提出针对性的分割方法,得到分割后的单字符图像,然后通过程序实验实现了上述提出的分割和识别算法,从而提高了验证码识别的准确率。

近年来,深度学习技术取得了显著进展,不仅在语音和图像识别领域取得了令人瞩目的成就,也开始在验证码识别领域得到广泛应用。在这一领域中,卷积神经网络(CNN)是应用最广泛的深度学习技术之一,因为它能够直接从验证码图像中学习深层次的特征,从而消除了传统方法中字符分割可能引起信息丢失的问题。李建平等[6]提出基于PSO-CNN的验证码识别算法对数字与字母混合验证码识别准确率可达96.26%。刘静等[7]一种通过Gabor小波变换提取图像的细节纹理特征作为CNN模型的第一层输入,实现了Gabor特征与CNN模型相结合的图像验证码识别方法,充分提取验证码图像中的不同特征,实验结果表明,此种改进的CNN模型提高了模型识别率,具有实际意义。

本文研究了一种基于卷积神经网络的端对端验证码识别方法,在模型训练过程中,数据从输入端经过各层的处理后得出一个预测结果,这个预测结果会与实际结果进行比较,产生一个误差,这个误差将用于反向传播中神经网络每一层权重参数的自动调整,这种训练直到模型收敛或达到预期的效果时结束,从而避免传统方法中因过多人工干预造成图像信息被破坏导致的误差累积问题。

1 主要技术实现

1.1 TensorFlow

TensorFlow是由谷歌大脑团队于2015年11月开发的深度学习框架,已广泛应用于图像识别、图片分类、自然语言处理等领域。其命名来源于本身的运行原理,其运行原理基于计算图的概念,通过构建计算图,执行数据流动,反向传播优化等步骤来进行模型的训练和推断[8]。它的强大之处在于其拥有一个全面而灵活的生态系统,并提供多种抽象层级的API接口,同时通过底层优化和GPU加速提供高性能计算,可以快速迭代和调试模型,使得研究人员和工程师可以用它来解决各种复杂的深度学习问题。TensorFlow2.x版本更加紧密地集成了Keras,相较于1.x版本严重依赖隐式全局命名空间且必须使用静态计算图的方式,它提供了更简洁和用户友好的接口,使构建、训练和评估模型变得更容易[9]。

1.2 CNN模型

卷积神经网络(Convolutional Neural Networks, CNN)是一种在计算机视觉和图像处理任务中广泛应用的深度学习模型[10]。它是一种专门用于处理具有网格结构数据(如图像)的神经网络,基本结构如图1所示,输入层输入图像信息,卷积层提取图像的底层特征,降采样层将数据维度减小并防止过拟合,全连接层汇总图像的底层特征和信息,最后输出则根据全连接层的信息得到概率最大的结果。常见的CNN模型包括LeNet、AlexNet、VGG、GoogLeNet、ResNet和MobileNet等[11]。CNN模型在计算机视觉领域取得了许多重要的突破,如图像分类、目标检测、语义分割、人脸识别等任务。

2 实验和结果分析

2.1 实验流程设计

本实验流程设计如图2所示,通过程序自动生成或其他途径获取验证码样本集,将样本集划分成训练集和测试集,先对验证码图片预处理,如图片灰度化、二值化和图像去噪,然后将训练集中预处理好的图片输入搭建的网络模型中,利用网络的学习能力自动提取验证码字符的特征信息进行训练,产生最优模型参数进行字符识别,最后通过训练好的模型预测测试集并统计模型识别率。与传统方法流程相比,除去了字符分割环节,避免了机器学习过程中的误差累计问题。

2.2 数据获取及预处理

2.2.1 数据获取

本文所用数据集是通过调用Python第三方库Captcha的方式生成字符型验证码样本集。Captcha库提供了一种快捷自动生成验证码图像的方法,可以根据需要对验证码字符进行设定,如字体、字符数量等,生成包括数字、字母和数字字母组合的验证码图片,并在此过程中程序会自动为验证码添加随机的背景干扰条和噪声,字符会存在旋转、变形和粘连的情况,提升了识别难KXrVPlCIcdEvRzAPEsn14g==度[1]。实验选用数字加大小写字母组合的方式生成4位字符的验证码数据集。分别制作61 000张,其中50 000张为训练集、10 000张测试集和1 000张验证集。图片文件命名的方式为:“字符组合.png”,方便后续的模型训练,样例如图3所示。

2.2.2 数据预处理

数据集预处理分为两部分:图片预处理和标签One-Hot编码。在对验证码训练之前,需要对其进行预处理以提高识别准确性。预处理一般包括图片灰度化、图片二值化、图像去噪。其中灰度化是将彩色图片的R、G、B三通道转换为单通道的灰度图像,因为色彩对识别验证码用处不大,同时可降低了图片维度,简化了后续处理步骤;二值化是将图像转换为二值图像,提高字符边缘的清晰度;图像降噪是通过滤波等方法去除可能干扰识别的图像噪声点,因为每一步的预处理过程可能会导致一些信息的丢失,因此实际操作中可选择其中一项或多项步骤进行预处理。此次实验中预处理只选择将图片灰度化、二值化、降噪处理,效果如图4所示。标签One-Hot编码是指将验证码的几个字符,每个字符均变换成独热编码。例如本文所示的验证码字符种类为62个(10个数字以及26个大小写英文字母),验证码包含了4个字符,处理流程先把每一个字符变成One-Hot编码向量,即每62个0-1编码里会有一个对应位置的正例为1其余61个为0的向量,最后把4个字符的One-Hot编码向量拼接成一行。因此每个字符的标签长度为62×4 = 248个。

2.3 模型网络结构设计

实验中识别模型使用卷积神经网络,并采用迁移学习和多任务学习的思想,由深度学习框架TensorFlow实现。首先加载预训练的ResNet50模型作为特征提取器。该模型在ImageNet数据集上训练,能提取通用的图像特征,然后将验证码图片作为输入,经过ResNet50得到特征映射。添加全局平均池化层进行降维。接下来采用多任务学习框架,因为验证码是4个字符,设计4个不同的分类器,每个专门识别1个字符。具体是在特征输出上连接4个全连接层,对应4个字符类别的预测。最后使用Keras的函数式API将上述组件连接起来,定义模型的输入和4个输出,构建起端到端的训练网络。编译模型时,定义4个不同的Loss函数针对4个字符进行优化。这样可以充分利用数据集,提升识别效果。网络结构及参数配置如图5所示。

2.4 训练与评估

2.4.1 实验软硬件环境

实验运行环境为Windows 10专业版,64位操作系统,选用TensorFlow 2.6.2版本的深度学习开源框架,Python 3.6.3作为编程语言。硬件环境中CPU采用Intel(R) Core(TM) i7-10700,主频2.90 GHz,内存32.0 GB。

2.4.2 参数设置及模型训练

在构建验证码预测模型的过程中,实验参数设置如表1所示。

实验为验证码的4个字符分别设计了4个不同的分类器,分别对应4个字符类别的预测,使用交叉熵损失函数计算训练损失,并使用SGD优化算法进行优化,使用EarlyStopping来控制模型训练的停止,连续6个周期val_loss都没降下来就结束训练,ModelCheckpoint保存所有训练周期中val_loss最低的模型,ReduceLROnPlateau学习率调整策略,连续3个周期val_loss没有下降时当前学习率乘以0.1,30个epoch在batch_size为128的情况下需要40 mins左右。训练集和测试集在4个字符类别上的准确率和损失值随着迭代次数的变化如图6所示。我们可以看到训练集的4个任务准确率都已经是1了,测试集的4个任务准确率大约为0.99左右,所以真正的识别正确率大约是4个任务的正确率相乘约等于0.96。

2.4.3 实验评估测试

模型训练完成后,利用验证集对模型性能进行评估。模型采用准确率指标来评估验证码的识别效果,准确率的计算公式为:

需要注意的是正确识别是指统计结果中4个字符均识别正确才能认为该验证码被正确识别。加载上一步训练过程中保存的模型结果,对验证码集中1 000张验证码与流程预处理后进行预测,模型准确率为95.6%。通过模型在验证集上的评估和预测,可以全面的判断模型性能,是否达到实用场景落地要求,还可以进行错误分析,指导进一步优化。

3 结 论

本文通过卷积神经网络对验证码识别项目的实现,包括:1)数据集准备。生成大量验证码图片数据。2)数据预处理。将图片灰度化、二值化、降噪等处理。3)模型设计。构建卷积神经网络。4)模型训练。设定超参数、回调函数等。5)模型评估。计算准确率。在此实践的基础上,仍然有可扩展和优化的展望空间,如用更大规模的数据集提升性能;尝试不同的模型结构(如VGG16、Xception等);使用GPU提高模型训练速度;与集成学习相结合提高模型鲁棒性。

参考文献:

[1] 张淳一.基于卷积神经网络的字符型验证码识别算法研究 [D].徐州:中国矿业大学,2022.

[2] 崔新,白培瑞,张策,等.一种基于端对端深度卷积神经网络的验证码识别方法 [J].山东科技大学学报:自然科学版,2020,39(2):111-117.

[3] 汪志华.基于广义霍夫变换的粘连字符验证码的识别 [J].集美大学学报:自然科学版,2018,23(1):75-80.

[4] 简献忠,曹树建,郭强.SOM聚类与Voronoi图在验证码字符分割中的应用 [J].计算机应用研究,2015,32(9):2857-2861.

[5] ZHANG L L,XIE Y X,LUAN X D,et al. Captcha Automatic Segmentation and Recognition Based on Improved Vertical Projection [C]//2017 IEEE 9th International Conference on Communication Software and Networks (ICCSN).Guangzhou:IEEE,2017:1167-1172.

[6] 李建平,王钊.基于PSO-CNN的验证码识别算法研究 [J].计算机技术与发展,2022,32(9):51-55.

[7] 刘静,张学谦,刘全明.混合Gabor的轻量级卷积神经网络的验证码识别研究 [J].信息网络安全,2020,20(7):77-84.

[8] MATTMANN C. Machine Learning with TensorFlow, Second Edition [M].[S.I.]:Manning,2021.

[9] MARTÍNEZ J. TensorFlow 2.0 Computer Vision Cookbook: Implement machine learning solutions to overcome various computer vision challenges [M].[S.I.]:Packt,2021.

[10] 张松兰.基于卷积神经网络的图像识别综述 [J].西安航空学院学报,2023,41(1):74-81.

[11] 包俊,董亚超,刘宏哲.卷积神经网络的发展综述 [C]//中国计算机用户协会网络应用分会2020年第二十四届网络新技术与应用年会论文集.北京:北京联合大学北京市信息服务工程重点实验室,2020:16:21.

作者简介:马凯(1985—),男,汉族,湖北襄阳人,讲师,本科,研究方向:数据采集、舆情监控;贺晓松(1989—),男,汉族,湖北荆州人,讲师,硕士,研究方向:大数据、机器学习、深度学习。