欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载
     

    数字验证码识别的设计与实现 计算机科学和技术专业.docx

    • 资源ID:5672150       资源大小:221.05KB        全文页数:27页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数字验证码识别的设计与实现 计算机科学和技术专业.docx

    数字验证码识别的设计与实现摘要数字验证码在安全方面起着十分大的用处,因此在很多网站都可以看到数字验证码的使用。如今互联网的发展相当快速,紧随着我们也就需要思考安全问题,隐私的泄露会或重或轻的影响用户,而数字验证码作为互联网安全的常用的屏障,可以让互联网生态环境更加健康便利且很好的保护用户隐私。目前,在网站上中相对常用的是由数字、字母组成的数字验证码。本文针对粘连且存在干扰噪声的数字验证码图像识别性能欠佳的情况,通过比较各种识别数字验证码的方法,最终选择使用KNN算法作为数字验证码字符识别方法,本课题对有粘连扭曲情况的数字验证码的识别进行设计和分析,过程主要是以下三步:预处理、匹配识别、分析识别率。图片预处理过程采用了灰度化、二值化、降噪和分割,在分割图片阶段,可能出现检测出四、三、二和一个字符的情况,分别采用不同的方法进行处理,再采用Python工具进行单字符匹配,最后通过KNN算法来识别匹配数字验证码,得到了高达94.4%的识别率,这说明采用该算法能很好的识别粘连扭曲的数字验证码图片。关键词验证码识别;KNN算法;验证码匹配;PythonDesignandImplementationofDigitalAuthenticationCodeRecognitionAbstractDigitalAuthenticationCode(DAC)playsaveryimportantroleinsecurity,soitcanbeusedinmanywebsites.WiththerapiddevelopmentoftheInternet,wealsoneedtothinkaboutsecurityissues.Theleakofprivacywillaffectusersmoreorless.DigitalAuthenticationCode,asacommonbarriertoInternetsecurity,canmaketheInternetecologicalenvironmenthealthier,moreconvenientandbetterprotectuserprivacy.Atpresent,therelativelycommondigitalverificationcodeonwebsitesiscomposedofnumbersandletters.Inviewofthepoorperformanceofimagerecognitionofdigitalverificationcodeswithglueandinterferencenoise,thispaperchoosesKNNalgorithmasthecharacterrecognitionmethodofdigitalverificationcodesbycomparingvariousmethodsofidentifyingdigitalverificationcodes.Thistopicdesignsandanalyzestherecognitionofdigitalverificationcodeswithgluedistortion.Theprocessmainlyconsistsofthreestepsipreprocessing,Matchrecognition,analyzerecognitionrate.Picturepreprocessingprocessusesgrayscale,binarization,noisereductionandsegmentation.Inthephaseofimagesegmentation,four,three,twoandonecharactersmaybedetected.Differentmethodsareusedtoprocessthem,thensinglecharactermatchingisperformedwithPythontools.Finally,matchingnumberverificationcodesarerecognizedbyKNNalgorithm,andtherecognitionrateisupto94.4%.Thisdemonstratesthatthealgorithmcanrecognizethedistorteddigitalauthenticationcodepictureverywell.KeywordsVerificationcodeidentification;KNNrecognition;VerificationCodeMatching;Python第一章绪论1.1 研究目的及意义当前,随着互联网技术的不断创新研发,我国科技技术飞速发展,各类新兴产品应运而生,在不断丰富人们生活的同时,提高了人们生活质量与生活水平。当前,随着网络技术不断的应用与普及,各类识别技术运用其中,极大的提高了网络使用的安全性与便捷性,当前识别技术应用较为广泛,如语音识别,图像识别,射频识别,数字验证码识别等,对我国军事,刑侦,医学等各领域产生了积极的贡献与作用。在本文中,主要对数字验证码识别技术进行研究,其作为识别技术中的一种,在当前电子设备广泛应用的背景下,能够有效完成多类复杂运算,具有较高的准确性与高效性。在当前互联网时代背景下,大数据发展日益加快,需求增多,因此,为有效提高数据的准确性与安全性,保障用户权益,识别数字验证码技术在其中扮演着重要角色。同时,与语言文字等相比,我们在现实生活中对数字的精准度有着更高要求,究其原因,主要在于一旦其中任意数字出现错误,便很可能造成重大失误,如金融,快递,财务等对数据的准确性有着较高要求。总而言之,为有效提高数据的精准性与安全性,数字验证码识别技术研究意义重大。而随着互联网的不断发展,自动化程序日益增多,对互联网的安全性所造成威胁逐渐增加,一旦网站被自动化程序所破解,很容易造成网站用户信息泄露,资源非法使用等各类问题,严重时甚至造成系统崩溃,对网站的推广与应用带来一系列不利影响。为有效避免或减少该类问题的发生,通过数字验证码技术,实现对系统网站使用用户合法性的验证,进而提高系统网站的安全性。一般而言,数字验证码技术较多应用于系统网站的注册,登录,以及发帖页面,避免出现自动化程序非法注册,登录以及使用该系统资源,对网站进行攻击,有效提高了系统的安全性以及抗攻击力。验证码,即CAPTCHA,其相关概念于2000年被首次公示,其本质上作为一种全自动图灵测试的程序,主要用于对人类使用系统以及计算机自动化程序使用系统的识别。验证码在系统使用中,主要由计算机程序自动产生,进而由人类用户对验证码进行手动输入或语音输入,根据验证码输入的准确性,进而对系统用户进行合法性判断,究其原因,主要在于验证码的输入大多数人类能够准确进行,而自动化程序大多数不具有输入验证码的功能,因此,能够有效实现对系统用户合法性的判定。同时,通过对验证码识别技术的运用,能够有效避免网站系统被暴力性攻击,提高系统安全性,避免系统用户相关信息泄漏,对用户的安全性造成一定威胁。另外,验证码识别技术还可以防止网站出现恶意刷票,论坛灌水等问题,在现实生活中被广泛运用。1.2 研究历史及发展现状在国外,数字验证码的识别研究较早,是一个热门的研究领域。1990年YannLecun等人使用反向传播神经网络(BP_NN)设计了一种识别手写数字的方法,其误识率1%,拒识率为9%,识别率达90%。20世纪90年代末期,以MAHearst为代表的学者研究出支持向量机算法,这是种基于统计学的回归算法以及分类算法,该类识别技术在运用中具有较好的识别效果,为识别技术的推广与应用打下良好的基础。21世纪初期,以A.BeIlili为代表的学者研究出MLP-SVM算法,该类算法能够有效达到对数字的无约束识别效果,识别效果显著,可高达98%左右,应用较为广泛。同一年,Cheng-LinLiU等人通过研究,实现了对图像数据的采集与识别,主要借助图像的特征以及特征分类等技术,分类器则采用了K最近邻算法(K-NearestNeighbor,KNN)以及支持向量机等算法,有效提高了图像数据识别的准确性有高效性。以CireSanDC为代表的学者提出借助反向传播,能够有效实现对普通多层感知器识别效果的提高,识别效果十分显著,可达到99%的识别效果,有效促进了识别技术的发展与推广。以MORI为代表的学者主要借助形状上下文的研究办法,实现了对两种验证码的研究,一种是GlMPY验证码,另外一种是EZ-GIMPY验证码。相比于国外对数字验证码识别技术的研究,我国研究起步较晚,相关理论与技术不够成熟与完善,但随着我国科技技术的发展,以及对数字识别技术的逐渐重视,研究逐渐加快。以胡君萍为代表的学者研究出KNN数字识别器,借助主成分分析法实现了对数字维度的有效减少,进一步提高了数字识别的效率。张海生基于神经网络对数字验证码进行识别研究。借助深度置信网络,我国以宋晓茹为代表的学者,实现了对数字识别算法的研究。我国以闵锋为代表的学者,对数字验证码识别技术的研究,主要分为以下三步:第一,借助主成分分析法实现对数字维度的降低;第二,实施投影;第三借助svm算法实现对数据的分类,通过研究发现该类数字验证码识别技术有较好的识别效果以及识别效率,得到广泛的应用与推广。以曾文献为代表的学者以MNIST数据为被识别对象,借助卷积神经网络以及自编码器实现对数据的识别,识别效果显著,高达99%,为我国数字验证码识别技术的发展与应用打下坚实基础。】徐文进等人基于KNN算法的改进K-means算法进行数字识别。明1.3 课题研究内容本课题分析比较了以上几种识别方法,最终选取KNN算法作为数字验证码识别研究的方法。KNN算法本质上作为一种人工智能算法,主要通过对数字特征的统计,并在此基础上,进行数字分类的一种算法,该算法操作简单,便捷,适用性强,应用较为广泛。在本文中借助KNN算法实现对数字验证码技术的研究,其中对于编程语言的选择主要是Python,对于PythOn而言,其在运行过程中主要借助编译器实现,能够高速完成人工智能算法以及机器学习,满足本文中对自动化程序以及人工操作系统的识别。在本文中,对数字验证码图像的研究,主要用于解决图像中字符粘连扭曲以及噪声较多的问题,有效提高对图像数字验证码识别效果。通过PythOn进行图片预处理和分割粘连字符后,基于KNN算法识别验证码图像中包含有多个字母,字符以及数字之间相互粘连的验证码,并对其开展测试识别以及网络训练,进而分析出识别率并用Python界面展示出识别结果。本文的主要框架结果梳理如下:第一章作为本课题的前言介绍了数字验证码识别的研究目的和意义、数字验证码的研究历史及发展现状。第二章介绍了本课题涉及的相关图像处理技术,分析比较了几种识别方法并进行方案选择,并阐明所采用的方案的特点。第三章介绍了数字验证码识别的设计实现过程,包括各功能模块的详细设计原理及相关程序的详细说明。第四章是对数字验证码识别的设计过程的结果分析。第五章是对数字验证码识别的研究工作进行归纳和总结。第二章数字验证码识别的相关技术对于数字验证码而言,其对图像的识别主要包括三大步骤:第一是对图像的预处理操作,实现对图像的灰度化、降噪、二值化等;第二是对数字验证码的分割,该环节在整个数字验证码识别过程中扮演着重要角色,决定着识别效果的高低,究其原因主要在于数字验证码的不同性特征,即不同的数字验证码,其粘连性,扭曲性程度有所不同,因此需对其进行不同分割,在一定程度上造成对数字验证码分割效果的不同;第三,是对数字验证码的识别。目前对验证码图像的识别方法主要有三种:模板匹配分类算法、形状上下文分类算法、人工智能领域的分类算法(KNN算法、神经网络算法)。2.1 图片预处理图片预处理作为数字验证码识别的首要步骤,首先对图像格式进行检测,通过对图像格式的判定,进而将其转换成可识别格式,并进一步对图像进行灰度化,降噪,以及二值化等处理。当前,在许多系统网站中,对于数字验证码的运用较多为彩色,因此为有效提高对数字验证码的识别效果,提高识别效率,一般将彩色的数字验证码转变为黑白色的数字验证码,大大减少了复杂程度,便于后续操作。因此,在该图片预处理阶段的目标是除去不必要信息,包括图像的背景,像素,噪声等信息,减少数字验证码识别的程序与复杂性,实现对图像的二进制点阵转换,便于下一步操作。2.1.1 灰度化彩色图像,顾名思义,又可称其为三通道图像,主要由R、G、B共同组成图像的像素。因此在对彩色图像进行灰度化处理时,需分别处理R.G,B三通道,在该处理模式下,会耗费很多时间消耗多余的资源。鉴于此,为有效提高对彩色图像的灰度化处理效果,提高对数字验证码识别的效率,减少处理数据,对彩色图像的灰度化处理需将三通道的彩色图像进行转换,将其转换为单通道的灰度图像。对于RGB模型而言,如果R、G、B三通道具有相同的值,即呈现为灰度,灰度值即代表着三通道的值。对于灰度图像而言,每个像素处于。或255的灰度范围内,当三个通道值不相同时,主要采用以下彩色图像灰度处理法。1 .单分量法在不同的图像中,三个通道的值分别代表着相应的灰度值。因此,在对彩色图像进行灰度化处理时,以三个通道中任一通道值作为处理对象,具体公式如下所示:f(x,y)=R(X,y)f(x,y)=G(x,y)(1)f(x,y)=B(x,y)其中f(,y)为灰度化后的灰度图像在位置(,y)的像素值,R(,y),G(,y),B(x,y)代表着R、G、B三通道的各个值。2 .最大化处理法:首先对R,G,B三通道的最大值进行计算,即代表着图像灰度化后的最大值,具体公式如下所示:f(x,y)=max(R(x,y),G(x,y),B(x,y)(2)3 .求取平均值法:对R、G、B三通道的值分别进行计算,在计算结果得出后,求取平均值,即代表着彩色图像的灰度值,具体公式如下所示:f(x,y)=(R(X,y)+G(x,y)÷B(x,y)3(3)4 .加权平均法在对彩色图像灰度化处理中,单分量法,最大化法以及平均值法的具体运用较为简单,对三通道的处理具有统一性,操作较为简单,便捷。但不同的图像,其特征也有所不同,分量比重也有所区别,因此根据三通道分量比重,需对其进行相应的权值分配,并对其进行加权计算,并进一步获取均值,即灰度值。即按照下列公式对要处理的图像进行灰度化:f(x,y)=0.30R(x,y)+0.59G(x,y)+0.11B(x,y)(4)在对彩色图像灰度化处理法中,加权平均法在四类彩色图像灰度处理法中应用最为广泛,所得结果更准确。所以进行图像灰度化时本课题采用了OPenCV中的BGR2GRAY方法,因为它的转换原理与加权平均法的公式相似,即GRAY=B*0.114+G*0.587+R*0.299(5)2.1.2 二值化在图像的预处理中,二值化代表着对图像灰度值数据的处理,将其转换为灰度值0255的范围内,图片由彩色转换为黑白,便于图像的下一步处理与识别。通过图像二值化处理,实现对图像局部特征以及整体特征的有效显现。在对图像进行预处理的整个流程中,二值化在其中扮演着重要角色,实现对图像的有效处理,将获取相应的二值化图像,为下一步图像处理打下坚实基础。通过图像的二值化处理,实现图像像素灰度值的转换,即图像的灰度值始终处于0或255的范围内,与像素的其他等级的值无关,这样会使过程更加容易,且减小了信息的处理流程与复杂性。同时对于图像二值化处理,为保证其二值化处理效果,需保证图像的边缘处于封闭以及连通状态。当图像灰度值大于阀值时,以255进行代表,且该类像素归为特定物体,当图像灰度值未在物体区域内时,其灰度值以零进行代表。阈值主要分为以下两类:1 .对于全局阀值而言,其主要代表在被预处理图像中,该图像包含有多类信息,包括背景,噪声以及目标物体等,在图像中需对目标物体进行提取,在现实生活中,使用较多的方法为阀值的确定,将该阀值设为T,进而利用该阀值实现对图像数据的分类,产生两大像素群:一类另一类T。该方法在对图像灰度处理中,应用较为广泛,即为图像二值化处理。2 .对于局部阀值而言,其主要代表着在被预处理图像中,各个区域的亮度有所不同。因此对于图像的预处理,需根据各个区域进行不同阀值的设定,进而提高图像预处理的效果。在本文中,主要运用全局阈值,即二值化处理,因其用于数字验证码图片二值化时会更加有鲜明的对比且直观。Python-OpenCV中提供阈值(threshold)函数:threshold(src,thresh,maxval,type,dst=None)(6)Method阈值类型一般分为五种:cv2.THRESH.BINARY大于阈值的部分像素值变为最大值,其他变为0cv2.THRESH_BINARY_INV大于阈值的部分变为0,其他部分变为最大值cv2.THRESH.TRUNC大于阈值的部分变为阈值,其余部分不变cv2.THRESH_T0ZER0大于阈值的部分不变,其余部分变为0cv2.THRESH_T0ZER0_INV大于阈值的部分变为0,其余部分不变这里本课题采用OPenCV中的cv2.THRESH_BINARYJNV方法,即自定义阈值为N,像素值大于N的部分是黑色,小于N的部分是白色。使二值化后的数字验证码图片中的字符更加直观。2.1.3 降噪在对图像进行二值化处理后,会使图像产生一定的噪声以及图像像素中含有相应的分割字符,在一定程度上会造成后期对数字验证码的识别效果。因此为有效提高后期对数字验证码的分割效果,需对图像进行相应的降噪处理,减少因图像传输或量化等处理过程中所产生的噪音。一般而言,噪声主要包括4类:第一类是乘性噪声,第二类是高斯噪声,第三类是泊松噪声,第四类是椒盐噪声。因为二值化后的图像为二维元组,所以可应用OPenCV中的cv2.filter2D进行滤波处理,即利用内核实现对图像的卷积运算。而高斯模糊本质上是低通滤波器,实现对低频的有效通行,限制或减弱高频,对于输出图像而言,其像素点代表着其对应像素点以及周围像素点的加权和,原理并不复杂,就是用高斯分布权值矩阵与原始图像矩阵做卷积运算。所以本课题采用高斯模糊对图片进行降噪。高斯模糊的本质是用高斯核和图像做卷积,就是去除一些斑斑点点的。因为二值化难免不够完美,去噪能使得二值化结果更好。2.1.4 图片分割图像分割是数字验证码识别过程中很重要的一步,因为本课题是在Python软件上设计实现的,所以这里用到的技术是opencv,opencv中可以基于阈值进行图像分割也可以基于边缘进行图像分割。基于阈值的图像分割基于阈值实现对图像分割的预处理,该方法的运用主要借助图像像素特征,实现对分割阀值的确定,并通过阀值以及特征值两者之间的对比,实现对图像像素的分类。一般而言,对于阀值的确定,主要以像素灰度值作为判断依据。根据灰度级实现对像素集合的划分,进而获取相应的子集合,并在该子集合中,与图像各个区域相对应,在同一子集合中,各区域具有一定的一致性,进而实现图像的分割。该种图像分割法,运用较为广泛,其分割效率高,效果好,具有较稳性能,在图像预处理中扮演着重要角色。同时,该种图像分割法能够有效应用于不同灰度级别的图像,即图像中目标与背景处于不同区域,能够有效实现对目标物的提取,操作简单便捷,流程简化,是图像预处理中分析图像,获取特征以及识别的重要环节。基于边缘的图像分割边缘,主要是指结构或灰度级出现明显突变的区域,实现了不同区域的有效划分。对于图像而言,其具有不同的灰度,边缘特征较为明显,进而能够有效实现对图像的分割。边缘检测的结果是一个个的点,并不能作为图像分割的结果,必须采用进一步的处理。C)PenCV中,可在图像的边缘检测之后,使用findContours寻找到轮廓。即基于轮廓进行图像分割。本课题研究的对象是数字验证码,该验证码由简单的字母和数字组成,字母和数字的轮廓差别较大,所以本课题选择采用更直观的方法,即用OPenCV基于边缘实现图像分割。2.2 字符识别方法2.2.1 模板匹配分类算法对于模板匹配而言,顾名思义主要是指在图像模板与图像中,寻找相似区域的一种方法。对于模板匹配算法而言,其具体运用主要通过对模板库的建立,实现对被匹配图像和模板库图像两者之间的对比,进而根据模板库图像寻找最匹配图像的一种方法。对于文本验证码而言,当其组成成分数字以及字母形状和大小不变时,便可借助模型匹配分类算法,实现对验证码的识别。对于验证码模板库的建立,首先需对验证码相关字符进行统计,对数字与字母的形状和大小进行搜集确定,进而确定相应的图像模板,组成相应的模板库。对数字验证码进行识别前,数字验证码通过预处理,形成单一字符,模板匹配分类算法通过对图像特征的提取,并与模板库进行相应对比,寻找匹配图像,进而得出验证码的识别结果。对于模板匹配分类算法而言,其运用范围较窄,具有一定的局限性,对于存在粘连,扭曲以及噪声等问题的数字验证码,识别效果较差,仅能对固定形状和大小的数字以及字母所组合而成的数字验证码进行相应识别,未能得到广泛应用与推广。2.2.2 形状上下文分类算法对于形状上下文分类算法而言,其于2002年被首次提出与运用,其在具体运用中主要借助对图像轮廓样本点的识别与采集,实现对数字验证码的识别,因此,在借助形状上下文分类算法实现对图像的识别时,对图像的预处理主要包括图像边缘采样以及提取等工作,进而获得所提取图像形状的点集合。一般主要借助向量集合进行呈现。形状上下文算法充分抓住了识别对象的空间信息,对于非刚性物体而言,其在匹配中,鲁棒性特征较为明显。该算法与模板匹配分类算法具有一定的相似性,均需要对模板库进行建立,进而通过被匹配对象与模板代价矩阵之间的对比实现对数字字符的识别,两者之间代价越小,代表着被匹配对象与模板对象之间具有较高的相似度。该方法在具体运用中能够较强的稳定性,应用较为广泛。但是对于有背景、噪声点过多的情况,匹配效果很不好。人工智能领域的分类算法1.KNN分类算法对于KNN法而言,又可称其为k最近邻法,其相关理论与技术已较为成熟。KNN算法对数字验证码进行匹配识别,也就是根据测试数据与每个训练集数据距离的大小来判断该测试数据分属哪个类别一一前提是有一堆已经注明好它是哪个数字的图片(这一堆图片组成训练集,也叫比较集、样本空间)。对于KNN算法而言,主要包括三项指标数据:第一,距离,通过被测试对象与模板,对象之间距离的计算,获取距离数据;第二,训练集的确定,训练集主要作为被测试对象的模板集;第三k的大小的确定,根据距离的远近,对K个训练对象进行确定,并进行分类,最后进行相应测试。计算测试数据与训练数据的距离把距离从小到大排列飞取前K个距商最近的数据U统计前K个数据对应的类别及次数O次数最多的类别为测试数据的类别图1KNN算法识别流程对于KNN分类算法而言,其主要通过被测试对象与训练集数据的对比,并根据两者之间距离的大小对被测试对象进行分类的一种算法。该算法在一定程度上能够有效解决实验样本不均的问题,根据被测试对象类别进行判断识别。该方法操作简单便捷,具有简单流程。2.神经网络人工神经网络人工神经网络本质上作为一种数字运算模型,主要通过对人类大脑的模仿,借助神经突出,实现对信息的处理与传递,人工神经网络于1943被首次提出,一经问世,引起广大学者的关注与重视。随着不断的研究和发展,人工神经网络被广泛应用于各个领域,有效解决了多种问题,如生物,医学,经济,金融,模式识别等各个领域。对于人工神经网络而言,其核心组成主要包括激励函数,网络模型结构等。其中,激励函数,主要是指神经网络中大量节点以及节点之间的连接构成的输出函数。卷积神经网络CNN相比于人工神经网络,卷积神经网络拥有更强的网络稀疏性和参数共享性。CNN通常由输入层,隐藏层,输出层构成,其中隐藏层中常见的有卷积层,池化层和全连接层。其常见的架构模式为一个或几个卷积操作后跟着一个池化操作,以此为一个单元,重复数次。随后是若干全连接层,最后常使用SOftmax函数来处理输出。相较于单纯使用全连接层建构的神经网络相比,在提升性能的同时,大量减少了参数量,降低了计算成本。CNN识别验证码不同于将图片进行分割等处理的识别方法,而是直接对整个图片进行学习。因此只要验证码的风格与原样本不同时.,识别准确率就比较低。对于卷积神经网络全连接层而言,其输入的大小是固定不变的的,在该种情况下,若输入的向量维数发生变化,便代表着其权值参数发生变化,使得网络出现动态变化问题,进而无法达到预期效果器。所以,即使是同样的验证码如果改变了图片的大小,程序就会报错。卷积神经网络由多层网络结构组成,特别适合图像识别等任务,但缺点是需要极大量的训练数据集。本课题研究的对象是由字母和数字组成的验证码,相邻字符之间的重叠部分可以忽略不计,训练集数量大概是800个。人工智能领域的分类算法是如今最常用的算法,神经网络算法需要极大量的训练集,且要通过一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成来对图像识别,相对来说程序更多更复杂,这里本课题选用了程序更简单且识别率也不错的KNN算法,KNN算法简单、有效,重新训练的代价较低,对于本课题研究的数字验证码来说,KNN可以说是一种最直接的用来分类未知数据的方法,较其他方法更为适合,且800张训练集图片也能满足该算法的需要。研究过程是:把PythOn作为实现软件,用cv2库实现数字验证码图片的预处理,再用opencv基于边缘检测后通过轮廓进行图片分割获得单字符,将单字符进行对应信息的标注,最后用KNN算法进行数字验证码的识别。第三章数字验证码识别的设计实现3.1 数字验证码识别的界面对于PIL而言,其主要作为PythOn的第三方图像处理库运用,因图像处理效果好,效率高,功能丰富,应用较为广泛,得到大多数用户的认可。Python创立于20世纪90年代初,相关理论与技术已较为成熟,因其操作简单,易学,效率高以及可移植性等特征,得到广泛运用。随着科技技术的不断创新和发展,PIL版本逐渐升级,功能十分强大。PIL主要用于对图像的处理,具体功能主要可分为以下三类:第一,图像展示功能。通过PlL能够有效实现对图像的展示,包括多个接口,如BitmaPlmage,GUl接口等;第二,图像处理功能。通过PlL能够有效实现对图像点的处理,图像旋转以及转换图像颜色空间等,功能十分强大,在我国图像处理领域中扮演着重要角色第三,图像归档功能,通过PILt能够有效实现对图像的归档处理,以及图像打印,格式修改,图像标注等。另外,通过PIL能够有效实现对图像的统计分析以及对比度调整等。这里本课题要搭建一个简单的显示数字验证码识别结果的系统界面,所以这里采用了Pythonimagelibrary中的imagedraw模块功能,通过该模块,有效实现了对2D图像的制作。同时,通过该模块,可建立新图像或对已有图像进行编辑,形成所需图像,满足数字验证码识别所需。3.2 数字验证码识别的实现验证码自动识别算法整体过程可分为3大模块:1)图片预处理;2)图片字符分割;3)字符匹配识别。其中,识别过程中又包含建立模板库和字符识别2个过程。图2描述了整个数字验证码识别设计的过程。图2识别的设计过程3.2.1 数字验证码的图片预处理图3为要识别的数字验证码原始图片:7dm图3数字跄证码原始图片从图3中可以很明显的看到,图中的字符有扭曲变换的现象。再仔细观察,还可以发现图片中间的部分出现了一些颗粒化的形状,也就是噪声。为了让数字验证码识别过程更加简单要进行图片预处理,通过图片灰度化、二值化、降噪再二值化,得到易于系统分割的图片。用PythOn读取数字验证码图片,并将图片转成灰度图,经过cv2库的处理,彩色图片变成了图4所示的灰度图:7tfm图4灰度化后的图片将图片做二值化处理可得到像素点值只有0或255的二维元组图片,减少数据量便于后续分割和识别,这里本课题采用了自定义阈值的方法,将阀值设定为127,判断图像的像素值是否大于127,若127,则被二值化处理后的图像像素点值为0,通过黑色呈现,若127时,则被二值化处理后的像素点值为255,通过白色呈现,具体如图5所示:7cfm图5二值化后的图片从二值化后的图片上可以看出来有很明显的斑点,说明图片预处理到这里还没有完成,还需要处理图片中的噪声,本课题用高斯模糊来对图片进行降噪。经过降噪处理后的图片如图6:7dm图6降噪后的图片观察经过降噪处理后的图片,可以看出来有一些颗粒化的噪声被平滑掉了,之前图片上的斑点也变得模糊了。但是降噪后的图片相比之前也变得更模糊了,为了便于之后对图片的分割,对图片再做一轮二值化处理,得到仅有像素值为0和255的黑白清晰图片。即经过第二次二值化处理后得到了图7:7cfm图7第二次二值化后的图片上述用cv2库进行的图像预处理的相关功能程序如下:#用来处理图片数据集。灰度化、二值化和降噪defprocess_im(im):rows,cols,ch=im.shape# 转为灰度图im_gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)# 二值化,就是黑白图。字符变成白色而,背景为黑色ret,im_inv=cv2.threshold(im_gray,127,255,cv2.THRESH_BINARY_INV)# 应用高斯模糊对图片进行降噪。高斯模糊的本质是用高斯核和图像做卷积。就是去除一些斑斑点点的。因为二值化难免不够完美,去噪使得二值化结果更好kernel=l16*np.array(H1,2,1,2,4,2,1,2,1)im_blur=cv2.filter2D(im_inv,-l,kernel)# 容进行一次二值化。ret,im_res=cv2.threshold(im-blur,127,255,cv2.THRESH_BINARY)returnim_res图片分割是为了分割出数字验证码图片中的单字符,本课题在这一模块的目标是得到经过图片预处理后的单字符图片。本课题采用基于边缘进行分割的方法,opencv中正好有很简便的方法可以检测图片中字符的轮廓,OPenCV的findContours方法可以将图片中的字符轮廓用矩形框框起来,这与本课题要达到的效果正好符合,因为本课题处理的对象是包含字母和数字的复杂数字验证码,而正常的字母和数字符号都是独立的,用矩形框也能很好的框住。用该方法处理字符不粘连扭曲的数字验证码图片的效果如图8:Mm图8正常分割的图片从图中可以观察到,每个字符都可以被检测出来,所以这种情况可以正常分割4个字符。这一步的功能模块代码为:#定义函数get_rect_box,目的在于获得切割图片字符位置和宽度defget_rect_box(contours):#定义WS和valid.contours数组,用来存放图片宽度和训练数据集中的图片。如果分割错误的话需要重新分割WS=valid_contours=forcontourincontours:#画矩形用来框住单个字符,x,y,w,h四个参数分别是该框子的x,y坐标和长宽。因X,y,w,h=cv2.boundingRect(contour)#计算图像一系列点的外部矩形边界ifw<7:continuevalid_contours.append(contour)ws.append(w)#w_min是二值化白色区域最小宽度,目的用来分割。w_min=min(ws)#w_max是最大宽度w_max=max(ws)result=#如果切割出有4个字符。说明没啥问题iflen(valid_contours)=4:forcontourinvalid_contours:x,y,w,h=cv2.boundingRect(contour)box=np.int(x,y,x+w,y,x+w,y+h,x,y+h)#将矩形的四个角的坐标点取整result.append(box)但这只是理想情况,其实很多数字验证码图片中的字符有扭曲粘连的现象,因此可能会有扭曲粘连的相邻字符被识别成同一个字符,要处理这种情况就要对数字验证码图片做进一步的分割。在数字验证码的分割过程中,字符粘连会有下面几种情况,每种情况都有它的处理方法:4个字符被检测为3个字符图9轮廓拈连的图片如图9只能检测出3个矩形框,中间2个字符因为粘连被检测成了1个字符。对于这种情况,可以从中间分割2个粘连的字符,这样就可以得到正常的能分割出4个字符的结果,该模块的功能代码如下:#如果切割出有3个字符。参照文章,中间分割eliflen(valid_contours)=3:forcontourinvalid_contours:x,y,w,h=cv2.boundingRect(contour)ifw=w_max:boxjeft=np.int(x,y,x÷w2,y,x+w2,y+h,x,y+h)box_right=np.int(x+w2,y,x+w,y,x+w,y+h,x+w2,y+h)result.append(box_left)result.append(box_right)else:box=np.int(x,y,x+w,y,x÷w,y+h,x,y+h)result.append(box)代码实现后,得到了图10的效果:图10改进后分割字符数正常的图片4个字符被检测为2个字符4个字符被检测成2个字符有下面两种情况:(1)第一种情况,图片被检测为左右各一个矩形框,每个矩形框框住粘连的两个字符。图11轮廓枯连的图片对于左右这两个轮廓,可以分别从中间分割。同上述将粘连的两个字符分割的功能代码,代码实现后,分割图片如图12:图12改进后分割字符数正常的图片(2)对第二种情况,图片被检测出2个矩形框,一个矩形框包含1个字符,另一个矩形框包含了3个字符。“Jim图13轮廓枯连的图片可以通过将包含3个字符的轮廓在水平方向上三等分来解决该情况,该功能代码如下:#如果切割出有3个字符。参照文章,将包含了3个字符的轮廓在水平方向上三等分eliflen(valid_contours)=2:forcontourinvalid_contours:x,y,w,h=cv2.boundingRect(contour)ifW=w_maxandw_max>=w_min*2:boxjeft=np.int(x,y,x+w3,y,x+w3,y+h,x,y+h)box_mid=np.int(x+w3,y,x+w*23,y,x+w*23,y+h,x+w3,y+h)box_right=np.int(x+w*23,y,x+w,y,x+w,y+h,x+w*23,y+h)result.append(box_left)result.append(box_mid)result.append(box

    注意事项

    本文(数字验证码识别的设计与实现 计算机科学和技术专业.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开