基于Python语言及支持向量机字符验证码识别.doc

基于Python语言及支持向量机字符验证码识别.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于Python语言及支持向量机字符验证码识别

基于Python语言及支持向量机字符验证码识别   摘要:验证码的主要目的是区分人类和计算机,用来防止自动化脚本程序对网站的一些恶意行为,目前绝大部分网站都利用验证码来阻止恶意脚本程序的入侵。本文以某高校教务系统的字符验证码作为研究对象,利用图像处理的方法,对验证码图像进行二值化、去离散噪声、字符分割、归一化、特征提取、训练和字符识别等过程实现了验证码识别,并使用Python语言实现。最后在分析识别结果的基础上,从验证码识别的角度提出生成更加安全验证码的一些建议 关键词:支持向量机(SVM);验证码;Python语言 中图分类号:TP3 文献标识码:A 文章编号:1007-9416(2017)04-0072-03 1 引言 随着互联网的迅速发展和应用,网络为我们提供了越来越多的资源,也为我们的生活和工作提供了极大的便利,但同时也带来了大量的互联网安全问题,比如刷票、用户批量注册、密码暴力破解、社区恶意发帖等 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写[1],是能够区分用户是人还是计算机的公共自动化程序,该程序提出的问题由计算机生成并评判,但必须只有人类才能回答。由于计算机无法解答验证码的问题,所以可以认为能够回答出问题的用户就是人类。目前大部分学校的教务系统都采用了字符图像验证码 支持向量机(SVM)是在统计学习的 VC维理论和结构风险最小化(Structure Risk Minimization,SRM)原理基础上,发展起来的一种全新的机器学习算法[2]。该算法在解决小样本、非线性及高维模式识别中有许多特有的优势。支持向量机根据其求解问题的不同分为支持向量分类机和支持向量回归机两种类型。本文提出的验证码识别算法是基于C-SVC的支持向量分类机[3] 但随着网络技术的发展,最初的字符图像验证码已经不能够完全保障网络的安全,为了评估这类验证码的安全性,需要从识别角度进行研究。因此,本文以某高校教务系统使用的验证码作为识别对象,提出一种基于SVM的验证码识别算法,使用Python的图像处理库和SVM机器学习库来实现验证码识别程序,根据识别率来评估网站的安全性,从而提出一些改进意见 2 验证码预处理 为了防止计算机自动化脚本的攻击,字符图像验证码往往由服务器产生随机字符序列后再加入一些干扰因素使计算机难以识别。本文将要识别的验证码示例如图1所示 可以看到,该类验证码加入的干扰因素主要是点线干扰噪声,其加大了图像识别的难度。因此,在进行验证码识别前,需要对验证码图像进行预处理,步骤包括二值化、去除离散噪声、字符分割和尺寸归一化 2.1 二值化 图像的二值化处理就是将图像上的点的像素值设置为0或255,使图像的集合性质只与像素值为0或255的点的位置有关。将图像中所有小于阀值的像素被判定为属于字符区域,其像素值设为0, 而大于或等于阀值的像素被排除在字符区域以外,像素值设为255。对图像验证码进行二值化处理的关键是阈值的选择与确定。二值化处理[4]选取阈值方法很多,经过实验比较,本文采用全局固定阈值法[5]选取阈值,然后再对验证码图像进行二值化处理 设原始灰度图像为f(x,y),二值化处理后的图像为g(x,y),则二值化过程可表示为: 式中f(x,y)是原始图像坐标为(x,y)的点的像素值,g(x,y)是二值化处理后的该点的像素值,0表示黑点,255表示白色。在实际的处理系统中,进行图像二值化处理的关键是要确定合适的阈值,使得字符与背景能够分享开来,而且结果图像必须具备良好的保形性,不能够丢掉原来有用的信息,不产生额外的空缺等。通过实验,采用固定阈值80能够得到较完美的效果 使用Python语言实现的主要步骤包括:将RGB彩图转为灰度图和将灰度图,再按照设定阈值转化为二值图 二值化后的验证码示例如图2所示,基本将背景噪声去除了 2.2 去除离散噪声 经过二值化处理后,验证码图像还存在或多或少的离散噪声,尤其在字符周围。本文消除验证码字符周围离散噪声采用的是连通域去噪法:当发现一个像素值为0的点时,记为:A,统计点A周边九宫格里的像素值同样为0的像素点数量,记为:Sum(A),如果Sum(A)少于一个定值K,则认为此点为孤立点,将其排除在字符区域以外,将点A像素值设为255。经过实验,当K值取2时,能够去除绝大部分的离散噪声,得到较好的效果 在具体处理时需要将所有的像素点按如下图分成三大类:顶点X、非顶点的边界点Y和内部点Z。如图3所示 其中:X类点需要计算周边相邻的3个

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档