计算机毕业设计-基于深度学习的验证码识别方法设计与实现

本文主要是介绍计算机毕业设计-基于深度学习的验证码识别方法设计与实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概要

  验证码是一个系统区分人类与非人类行为的有效方式。验证码识别技术能够使计算机程序输入正确的验证码,伪装成人类用户进入目标系统。另一方面,系统方面需要考虑破解验证码识别技术,修补验证方式的可能漏洞,使之能够更有效地区分人类与计算机的行为。深度学习能够使计算机更好地处理复杂的输入,因此能够识别更为复杂的验证码。深度学习是人工智能的一个重要分支,对于识别验证码图像,相对一些其他的学习算法,深度学习在同样的计算资源的条件下,具有更为优秀的性能,因此在处理同样的问题时深度学习能够节省一定的计算资源。
  本课题主要讨论了基于深度学习的验证码识别方法设计与实现。具体地,第一步采集验证码图像。这些验证码图像来源有两种:一是通过编程仿照常见的验证码图像生成数据集;二是从网站上下载验证码图像保存成数据集。第二步对验证码数据集进行去噪、定位等预处理,再使用垂直投影法进行分割,将分割出来的字符保存为学习样本。第三步构建卷积神经网络,使用采集的部分验证码图片对网络进行训练,调整参数。最后一步使用剩余的验证码图像对训练好的网络测试,整理测试结果,统计正确率,分析不同参数对神经网络性能的影响。
  经过测试,本论文设计的卷积神经网络基本能够成功地识别验证码图像,对仅包含数字的验证码图像识别效果较好,正确率达99.28%。

关键词:深度学习, 卷积神经网络, 验证码识别, 图像处理

一、研究背景与意义

  深度学习的应用领域有很多,其中之一就是验证码识别。
  验证码是一个系统区分人类与非人类的有效方式。验证码识别技术能够使计算机程序输入正确的验证码,伪装成人类用户进入目标系统。另一方面,系统方面需要先了解然后破解验证码识别技术,修补自身验证码的可能漏洞,使之能够更有效地区分人类与计算机的行为。随着互联网技术的发展,人们在使用互联网的同时越来越注重验证码的有效保护,希望网络的能够做到人类能识别而拦截所有机器程序的程度。
  当遇到黑客对网站发起攻击的时候,验证码就是网站安全的第一道防线[21,27],因此针对验证码识别的研究的实践意义不容小觑。我们可以通过研究验证码的识别技术,从根本上了解验证码的识别细节,从而做出针对性措施,加强验证码的保护能力,使验证码能够继续实现本身的价值。
  深度学习的初衷就是为了让计算机在处理某些问题时,能够拥有近似于人类的处理能力,这与验证码存在的意义是相对立的。验证码不希望机器能够像人类一样识别图像中的字符,而深度学习则努力使计算机能够尽可能地接近甚至超越人类。这一点一般的机器学习手段也能够实现,但是深度学习的优势在于能够将目标的特征逐级提取,比如我们学习汉字,先从基本的横、竖、撇、捺开始,最后将这些基本的特征进行组合,形成目标的完整特征,据此能够进行学习将目标分类或者预测。

二、验证码图像处理技术

  要使深度神经网络能够学习识别验证码,有两种可行性方案:一是端到端的识别,不对验证码进行分割预处理,而是直接通过神经网络得到输出[11,26,33]。二是分割识别,对验证码进行预处理和分割之后,按分割顺序将字符通过神经网络,并将得到的输出按顺序排列,得到网络对整张验证码图像的识别结果。
端到端的识别,涉及到的多标签分类问题颇为复杂[33]。限于个人能力与时间问题,本设计采用分割识别的方案。

3.1 图像预处理

在这里插入图片描述

图3-1 图像的灰度化和二值化

  由于待识别的验证码图像是彩色的图像,而验证码的识别,依据的是其字符形状而非字符色彩,所以二值化操作不会使需要的数据信息丢失。对输入的验证码样本,经过灰度化、二值化处理之后,能够降低图像数据的维数,有效降低数据处理的复杂度[31]。图3-1为初始的验证码样本图像及其经过二值化之后的图像。
  二值化之后的验证码图像没有了色彩数据的干扰,但是还有明显的噪点的存在,这些噪点无疑会影响到网络的识别效果,更直接的是影响到之后的分割处理,所以在分割识别之前,还需要对验证码图像进行去噪处理。图3-2为去噪之后的效果。
  经过二值化与去噪处理之后,验证码图像上少了许多干扰性数据,只保留待识别的字符和干净的背景,这能在很大程度上提升神经网络的识别效果。
在这里插入图片描述

图3-2 图像去噪

3.2 字符定位和分割

在这里插入图片描述

图3-3 目标定位

由于验证码图像中,字符的位置都是在图像内部,而边缘都是无用的背景信息,所以在进行字符分  割之前,对字符图像进行目标定位,确定字符的位置,割舍可能会带来干扰的边缘信息,能够对提升最终的识别正确率有很大的帮助[14,28]。定位算法并不复杂,其核心是确定字符区域的边界,在边界处进行背景切割,保留字符目标。算法流程如下:
  第一步:经过前面去噪预处理之后的图像通常只有目标区域和背景区域两部分,很容易检测到目标字符的左边界、右边界、上边界和下边界。
  第二步:这四个边界包围起来的区域就是定位到的字符所在的区域,根据这四个边界就能进行边缘切割,保留目标区域。图3-3是进行目标定位的示意图和结果。
图像预处理的最后一步是字符分割。
  字符分割的算法有很多种,复杂程度不一,针对待识别的验证码图像,酌情选择合适的分割算法。就本课题处理的验证码图像而言,字符之间无粘连,采用垂直投影法是最简单有效的分割算法,对验证码图像进行垂直方向上的投影,将投影值最少的位置作为分割点对图像进行分割。
在这里插入图片描述

图3-4 垂直投影分割
在这里插入图片描述

图3-5 图像分割结果

  图3-4所示为垂直投影算法分割的细节。算法流程如下:
  首先将待分割图像进行垂直投影,统计投影的值。没有字符存在的地方,甚至有字符存在并且粘连,但是粘连比较少的区域,其投影值会明显比字符所在区域的投影小得多。
第二步寻找这些投影值小的位置,初步确定为选取分割的点。
第三步结合具体的验证码图像特征,去除部分不可能的分割点,在剩下的分割点中选取合适点,即可进行分割。
  图3-5是图像分割前后的对比。为了与后面的卷积操作匹配,对分割之后的字符图像进行了边缘补零操作,避免在进行卷积时丢失字符的边缘特征。经统计,对采用的验证码样本进行使用垂直投影法分割的成功率是96.

三、网络性能分析

  

3.1 参数的选择

根据第四章的内容,网络各参数的选择都有一定限制,最初设置的参数如表5-1所示:
在这里插入图片描述

在实际的使用中,卷积核的大小、池化核大小以及网络层数,都由经验公式大概确定,并根据最终网络的性能进行参数调整以确定合适的参数值。

5.2 识别结果

在5.1节选取的初始值条件下,使用学习样本对网络进行训练,第一次训练的样本是通过编程生成的验证码图像,训练之后,网络对这类验证码的识别正确率较高,为99.28%。图5-1所示是网络对这类验证码的分割结果和识别结果。
此时用另一个测试集去测试网络,正确率并不理想,仅仅为47.246%。这是由两个数据集的差异造成的,虽然都是数字字符,但是第一类数据集本身有倾斜,而第二类没有,此外两种验证码还有其他特征差异,因此网络即使对相同数字提取的特征,也不完全相同。
在初次学习之后由于网络正确率偏低,需要使用第二类数据集在第一次训练的基础上对网络使用相同的参数再重复训练一次,因为样本集发生了变化,需要使网络“熟悉”第二类验证码的字符特征。在第二次学习之后,网络对第二次验证码的识别率有很大的提升,达到96.8116%。
在这里插入图片描述

图5-1 对自生成验证码的识别样例

图5-2是网络对第二类验证码的分割结果和识别结果。
在这里插入图片描述

图5-2 对采集的验证码识别样例

四、总结

  自人工智能兴盛以来,关于深度学习的研究成果如浪花涌现,深度学习在人工智能中的地位也越来越重要。深度学习在对数据进行分类上的优越性能是普通网络无法比拟的,卷积神经网络也因众多研究成果而广受重视,自身也在图像处理领域有着得天独厚的优势。验证码字符的识别分类就是深度学习的一个经典应用。
  本文在参考众多文献的基础上,深入理解深度学习和卷积网络基本理论,运用这些理论来构建卷积神经网络,解决验证码识别的问题。
  验证码数据集来源有二:一为通过编写程序生成与常见验证码类似的验证码图像;二是到网站上进行人工采集。在使用卷积网络进行学习和测试之前,先对验证码数据集做预处理,预处理操作有四:一是二值化,降低数据的维度,很大程度上也减少了数据的复杂度;二是去噪,消除验证码图像中的噪点,能够使网络不受太多无用信息的干扰,提高识别正确率;三是字符定位,一定程度上较少原始图像边缘的无用背景信息对网络的干扰,提高识别正确率;四是字符分割,每次学习一个字符,一方面能够降低识别难度,另一方面也降低了对样本数量的要求。
  本文最后对网络进行学习和测试,并分析了对网络性能影响较大的两个参数:全连接层隐层的神经元个数和学习率,通过分析这两个参数对网络收敛曲线和识别正确率的影响,能够为选取这两个参数的合适值提供方向,从而能够进一步地对网络进行优化。

六、 目录

目录
中文摘要 1
Abstract 2
第一章 绪论 4
1.1 课题研究背景及意义 4
1.2 国内外研究现状 5
1.3 研究内容 6
1.4 论文结构 6
第二章 深度学习的基本理论 8
2.1 神经元的数学模型 8
2.2 多层前向神经网络 9
2.3深度神经网络 10
2.4 神经网络的学习方式 11
第三章 验证码图像处理技术 12
3.1 图像预处理 12
3.2 字符定位和分割 13
第四章 卷积神经网络的设计与实现 16
4.1 网络结构 16
4.2 网络初始化 19
4.3 误差反向传播 21
4.3.1 全连接层的反向传播 22
4.3.2 池化层的反向传播 23
4.3.3卷积层的反向传播 24
第五章 网络性能分析 25
5.1 参数的选择 25
5.2 识别结果 25
5.3 隐层神经元数量对网络性能的影响 26
5.4 学习率对网络性能的影响 28
第六章 总结 30
6.1 工作总结 30
6.2 不足与展望 30
参考文献 32
致谢 35

这篇关于计算机毕业设计-基于深度学习的验证码识别方法设计与实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828759

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主