基于Tensorflow的验证码生成与识别算法研究及实现毕业论文
2020-02-17 21:59:22
摘 要
在互联网高度普及的同时,网络安全问题也日益突出。目前,绝大多数的网站都在用户登录或者验证等环节引入了验证码机制,然而,在一些重要或者机密的金融行业,如银行、证券交易账户,网络验证码仍然存在着安全隐患,因此,验证码的识别作为趋向计算机识别技术极限的研究必不可少。
本课题基于验证码生成与识别算法的研究现状,在TensorFlow平台下先用Python进行纯数字四位验证码的生成,接着构建CNN卷积神经网络模型,构建卷积层、池化层,选择ReLU作为激活函数,并构建全连接层,在具备足够的训练数据集的情况下,使用深度学习 训练数据 大量计算力,训练破解验证码的模型。
测试结果显示,该模型能够进行验证的识别,能够实现99%的识别率。此外,训练次数的增加以及学习率的优化有助于提高卷积神经网络的准确率。
关键词:TensorFlow;验证码;卷积神经网络;训练
Abstract
With the high popularity of the Internet, the problem of network security has become increasingly prominent. At present, most websites introduce authentication code mechanism in user login or authentication. However, in some important or confidential financial industries, such as banks, securities trading accounts, network authentication code still has security risks. Therefore, the identification of authentication code tends to the limit of computer identification technology. Research is indispensable.
Based on the research status of verification code generation and recognition algorithm, this paper first uses Python to generate pure digital four-bit verification code on TensorFlow platform, then constructs CNN convolution neural network model, constructs convolution layer and pooling layer, chooses ReLU as activation function, and constructs full connection layer, which has enough training data set. In the case of deep learning training data a large amount of computational effort, the model of decoding verification code is trained.
The test results show that the model can validate the recognition and achieve 99% recognition rate. In addition, the increase of training times and the optimization of learning rate are helpful to improve the accuracy of convolutional neural networks.
Key words: TensorFlow; Verification Code; Convolutional Neural Network; Training
目 录
摘 要 I
Abstract II
1 绪论 1
1.1 课题研究背景 1
1.2 国内外研究现状和意义 2
2 验证码的生成与识别算法原理 4
2.1 Python介绍 4
2.1.1 Python的诞生以及发展历程 4
2.1.2 Python基本语法 5
2.1.3 Python的Captcha库 5
2.1.4 Python执行 5
2.2 TensorFlow介绍、组件及工作原理 6
2.3 卷积神经网络 7
2.3.1 卷积神经网络层级结构 7
2.3.2 卷积神经网络架构 10
3 系统的程序设计与实现 12
3.1 Python基础库准备工作 12
3.2 Python验证码生成 13
3.3 基于TensorFlow建立卷积神经网络模型识别、破解验证码 13
3.3.1 图像识别与处理方案 13
3.3.2 CNN卷积深度学习网络的结构 14
3.3.3 基本模块的初始化以及网络模型的建立 14
3.3.4 训练CNN卷积深度学习网络 15
3.3.5 测试训练得到的分类器 15
3.4 结果分析 15
3.4.1 验证码生成结果 15
3.4.2 CNN模型训练结果 17
3.4.3 CNN模型测试结果 18
4 总结与展望 22
4.1 总结 22
4.2 进一步工作 22
参考文献 24
附 录 25
致 谢 35
1 绪论
在互联网时代,信息安全已经与网络认证码密不可分。网络验证码(以下简称“验证码”),CAPTCHA,英文全称 “Completedly Automated Public Turing Test to tell Computers and Humans Apart”,图灵测试,自动区分当前用户是计算机还是人,用来防止网络黑客使用计算机自动化程序进行不断的恶意登录、灌水,危害网络安全环境。
验证码的设计目的旨在验证用户是一个真正的人,而不是计算机程序,验证的原理是,计算机向用户提出一个问题,由用户给出答案,这个问题的内容就是通常意义上的验证码,验证码通常只有人类可以辨别,而计算机不具有判断这个问题的能力,因此,如果用户正确地给出了这个问题的答案,那么该用户就会被判定为是人类,则验证通过[1]。验证码的引入可以在一定程度上维护网站的信息安全,阻挡一部分网络黑客的恶意攻击。
1.1 课题研究背景
生成验证码的手段不同,验证码的种类就会发生变化,常见的有基于字母、数字和其他字符的字符验证码,3D验证码,基于数学计算的验证码,基于语音识别的语音验证码等。验证码设计的目的是只有人类可以回答并且机器难以破解。
破解验证码的方式可以通过现有的成熟的字符识别技术学习,例如光学字符识别(Optical Character Recognition,OCR)系统、车牌识别等[1]。不过,由于在验证码当中的字符进行了旋转、尺度变换、改变颜色以及加入噪声干扰,使得通过简单的光学字符识别难以准确识别验证码字符。目前已在无扭曲旋转、含有少量噪声和字符间无粘连的验证码识别的研究中取得了显著的成果,但是,由于验证码的样式和类型不同,以前的验证码识别方法对特定类型的验证码只有明显的影响,验证码的类型一变,算法的识别效果便大打折扣,即以往的验证码识别的方法都具有一定的针对性,目前,仍然难以以很明显的效果识别具有彩色线噪声,字符旋转、粘连、重叠、扭曲以及缩放等干扰的验证码,各方的奇思妙想都没有取得很好的成绩。
CAPTCHA深度竞赛是一项旨在促进验证码识别的竞赛,主要基于CAPTCHA的设计和识别。验证码的设计方给出一些验证码的图片,尽量复杂,由识别方来破解这些验证码,识别方需要通过计算机,设计算法,编写程序来破解这些“谜团”,若破译方提供的计算机程序能够实现不低于10%的破译率,那么破译方获胜[1]。
1.2 国内外研究现状和意义
验证码在网络上的广泛使用已经成为非常普遍的现象,国内外针对验证码的安全性研究争相开展。与国外对验证码生成和识别算法的研究相比,国内相应的研究起步较晚,研究的人员比较少,理论体系接近空白,验证的可靠性也存在着安全隐患。在中国,一种支持向量机(SVM,即“Support Vector Machine”)的验证码算法由殷光等科研工作者[2]提出;王璐[1]针对多个网站比较有代表性、特点鲜明的验证码提出了具有针对性的破解方法,尤其是针对字符间有粘连的验证码进行了识别研究,建设性地提出了针对不同类型的验证码的识别算法。吕霁[3]基于计算机视觉等理论,重点研究了用于字符验证码识别的神经网络方法。
在国外,2008 年,Jeff Yan[4]等人采用了设计虚拟问答的方式,基于情感,识别验证码,在分析并研究了Microsoft现有验证码缺陷的基础上,破解了微软先前的验证码,识别率超过90%;J.Zhang等人[5]和P.LU等人[6]分别提出了不同的字符分割算法,创新地将SVM分类算法和BP(Back Propagation)神经网络结合起来用于验证码的识别,这将验证码的识别探索出了一个新的方向——将深度学习神经网络用于验证码识别。
在先前的验证码识别算法中,研究人员通常首先对字符进行分割,然后识别,然而这种方法在应对字符严重粘连或扭曲重叠、无法分割的验证码如Google、MSN等网站的验证码时,效果很不理想,目前尚无明确的这类验证码被破解的报道。2004年Hocevar.S发布了他的验证码识别程序 PWNtcha,告知用户验证码不是完全安全的验证方式。
现如今,基于计算机视觉的深度学习神经网络越来越被人们所关注。深度置信网络(Deep Belief Nets,DBN)由Hinton所提出,这种模型帮助人们可以更加快地训练深度网络。在卷积神经网络(Convolutional Neural Network, CNN)的理论研究方面,J.Bouvrie以严谨认真的科学态度对卷积神经网络模型的原理及架构进行了细致的理论分析与公式推导,在促进卷积神经网络的发展潜能上做出了突出的贡献;在图像的应用方面,多方研究表明,随机梯度下降[7](Stochastic Gradient Desent,GSD)和图形处理器(Graphics Processing Unit,GPU)的方式都可以帮助卷积神经网络模型加快训练进程,大大缩短训练大量的图像数据所需要耗费的时间。
一段时间以来,深度学习卷积神经网络遍地开花,在各个研究领域中都获得了令人瞩目的成果。例如,基于ImageNet[8]数据集所构建的卷积神经网络分类模型在经过127万多张图像的训练之后,最终达到的分类结果以几个百分点的优势优于之前的识别方法。随着在卷积神经网络应用方面的研究不断地开展,它出色表现引起了越来越多科研工作者们的注意,Google实验研究室也构建了深度卷积神经网络模型,研究表明,卷积模型不仅具有十分优异的图像处理能力,如果将这一特点运用在验证码的识别上,运算的效果更是十分显著,卷进神经网络就这样逐渐地占据了研究者们的视线。探索卷积神经网络的应用的研究在各个领域竞相展开。Razavian A S和其他学者[9]经过实验证明,使用卷积神经网络进行特征提取的效果更加显著,更令人惊讶的看到的是,它的迁移能力也很突出。O.M.Parkhi和其科研伙伴[10]将卷积神经网络运用在人脸识别上,G.E.Dahl等人[11在语音识别的方式上富有创新性地运用了深度学习卷积神经网络,成功地取得了显著的成效。同时,神经网络算法在文本应用等领域也大放异彩。鉴于传统的验证码识别方法需要进行字符分割、数据预处理甚至是人工识别,准确率不够理想,而且效率不高,本课题将要重点研究基于深度学习神经网络——卷积神经网络在验证码识别方面的用途[12],使用基于TensorFlow的Python语言构建分类模型,用于识别纯数字的验证码。
2 验证码的生成与识别算法原理
本课题拟设计一个Tensorflow平台下先用python进行验证码生成,生成的验证码由四位数字构成,无需包含大写字母或小写字母,再用Tensorflow来实现一个基于CNN卷积神经网络模型以进行数字验证码的识别。
2.1 Python介绍
Python是一种计算机程序设计语言,是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的不断添加,越来越多的被用于大型的、独立项目的开发,它可以被应用于以下的领域:Web和Internet开发、教育、桌面界面开发、软件开发和后端开发。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且相比JAVA相比更先进的一点是,Python不仅支持继承、重载,支持重载运算符和动态类型,更支持派生、多继承,基于这样的特点,Python的源代码的复用性被大大的增强了。此外,Python中有两个标准库(functools, itertools),这两个库的功能非常强大,提供了非常广泛并且万能的函数式程序设计工具。
2.1.1 Python的诞生以及发展历程
自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。
Python的创始人为荷兰人吉多·范罗苏姆[13] (Guido van Rossum)。Guido参加设计了一种教学语言——ABC语言,这种语言专门为非专业的程序员设计,功能同样非常的完美和强大,然而,ABC语言并没有得到广泛的认可和推广,Guido认为,ABC语言的非开放性局限了它的发展,因此,他希望在新诞生的Python语言中避免这一点缺陷,同时,他还想在Python之中实现之前在ABC语言中闪现却未能实现的东西。就这样,Python从ABC中孕育而生,它主要受到了Modula-3的影响,同时结合了Unix Shell和C语言的使用习惯。至今,Python已经成为最受欢迎的程序设计语言之一。2000年10月16日,Python 2公布于世,自2004年至今,python的使用率呈线性增长。Python 2如今的稳定版本是Python 2.7。Python 3于2008年12月3日发布,不完全兼容Python 2。[13] 2011年1月,Python被TIOBE编程语言排行榜评为2010年度语言。
由于Python语言的简洁性、易读性以及可扩展性,并且设计风格清晰划一,程序代码易于维护,Python日前已经成为了一门被大量用户所认可、欢迎且广泛使用的语言,在国外越来越多的研究机构开始采用Python语言进行科学运算,一些知名大学已经采用Python来教授程序设计课程。
2.1.2 Python基本语法
Python的设计宗旨之一就是让代码具备高度的可阅读性。因此,它在程序设计规范上的鲜明的特点就是,一个模块的界限,完全由每行的首字符在这一行的位置来决定,包括if,for和函数定义等所有需要使用模块的地方,并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出,缩进成为了语法的一部分,而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系。通过强制设定程序编写时的缩进规则,违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。
Python目前可以使用的稳定版本有Python 2.7和Python 3,Python 3于2008年12月3日发布,与Python 2不完全兼容,本课题基于TensorFlow平台,使用Python 3,Python 3中除了与JAVA相同的基本数据类型、运算符、控制语句和表达式,还有列表、元组、字典和集合等独特的数据类型。
序列是Python中最基本的数据结构。在序列中,每个元素都会被分配一个序号 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表和元组。
字典是另一种可变容器模型,且可存储任意类型对象。
集合(set)是一个无序的不重复元素序列。
2.1.3 Python的Captcha库
Python中自带可以生成验证码的函数库——Captcha,该函数库可以生成任意形式的数字字符类验证码,只要在创建对象时:
Captcha=ImageCaptcha(fonts=[‘/path/to/A.ttf’,‘/path/to/B.ttf’)
即可修改字体,同时,利用该类中的write函数,可以将任意长度数量的字符改为验证码。本课题中要求实现的只是四位纯数字的字符验证码,此外,captcha函数库也可以生成字母数字同时存在的字符验证码甚至语音验证码,只要调用相应的函数,本文对此不再多加赘述。
2.1.4 Python执行
Python在执行时,首先会将格式为.py的文件中的源代码编译成Python的字节码,然后再由Python虚拟机执行这些编译好的字节码。这种机制的基本思想跟Java,.NET的执行的原理是很相似的的,然而,Python的虚拟机是一种更高级的虚拟机。更高级的意思可以理解为,相比Java 或.NET,Python的虚拟机距离底层真正运行的硬件机器距离更远。或者说,Python的虚拟机是一种抽象层次更高的虚拟机。除此之外,Python能以交互模式在主流操作系统下直接运行,如Unix/Linux、Mac、Windows等等,直接在命令模式下运行操作指令即可实现交互操作。
2.2 TensorFlow介绍、组件及工作原理
TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,它拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。
分布式TensorFlow的核心组件包括:分发中心、执行器、内核应用和最底端的设备层/网络层。分发中心从输入的数据流图中剪取子图(subgraph),将其划分为操作片段然后启动执行器。分发中心处理数据流图时会进行预设定的操作优化,包括公共表达式消去、常量折叠等等。执行器负责图操作在进程和设备中运行、收发其他执行器的结果。分布式TensorFlow拥有参数器以汇总和更新其他执行器返回的模型参数。执行器在调度本地设备时会选择进行并行运算和GPU加速。内核应用负责单一的图操作,包括数学计算、数组操作、控制流和状态管理。
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: