美章网 资料文库 基于SVM的字符验证码识别分析范文

基于SVM的字符验证码识别分析范文

本站小编为你精心准备了基于SVM的字符验证码识别分析参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

基于SVM的字符验证码识别分析

摘要:验证码广泛应用在互联网各个领域,也称为互联网安全防火墙,本质上验证码是为了区分人与机器人,防止网络机器人的攻击.然而随着OCR技术的发展,验证码暴露出来的安全问题也非常严峻.以高校系统中的字符型验证码作为研究对象,对验证码进行二值化,去噪,分割等操作,采用SVM支持向量机的方式对数字验证码进行识别.实验结果表明,当训练集到达一定数量时,对字符验证码具有较好的识别率.

关键词:验证码识别;图片处理;支持向量机SVM

引言

验证码(CAPTCHA)是全自动区分计算机和人类的图灵测试的缩写,可以辨别用户是人还是计算机的公共自动化程序[1].程序根据用户回答验证码的答案正确与否来判断此用户是人类还是计算机,若回答正确则可以认为是人在操作.验证码形式多种多样,有传统的字符型验证码,有新的验证形式包括滑动解锁式、语音验证、图片选择式等.目前,字符验证码仍然应用在各种场景中[2],如注册、登录、找回密码、抢购下单、评论、投票等.这类验证具有相同特点,计算机容易生成、人容易辨识,暴力破解有一定难度.同时网站为了安全性,增加验证码的识别难度,常见的方法是增加干扰项,如:字符旋转、噪点、字符扭曲粘连、字符位置随机及个数不定等[3-4].本文介绍的字符验证码的识别属于简单的OCR技术,其应用场景较多,如目前广泛使用的手机银行App可以识别银行卡号、身份证号码以及停车场车牌识别等.由于每个网站所使用的验证码不一样,需具体问题具体分析,本文仅选取某高校系统中的验证码作为主要分析对象.

1字符识别模型

1.1基本流程

字符型验证码识别流程主要为:原始验证码图片预处理(二值化为黑白图片、去除背景噪点)字符切割尺寸归一字符标记(SVM识别、KNN识别)

1.2图片预处理

验证码图片预处理阶段,主要包括灰度化、二值化、去除噪点操作.批量请求网络接口以获取验证码,获取的初始验证码如图1所示.下载的原始验证码格式是真彩色图像,因为颜色信息对分割识别没有作用,故将其转换到灰度空间.转换方法使用最多的是加权平均值法[5],其公式为:Y=0.299R+0.587G+0.114B(1)将得到的灰度图片按照设定阈值转化为二值图.其中关键是要找出合适的阈值.阈值法包括全局二值化、局部二值化法[6].本文采取全局二值化方法,公式为:通过实验当阈值T取值为140时可以得到较好的效果.二值化后得到了比较干净的图片,但还存在少些的离散噪点,为了增加识别的准确性还需去除背景中的噪点,使用较多的是FloodFill算法,本文采用简单去噪点方法,统计像素值为0的周边黑点的个数,如果小于一个值,则可以判断此点为孤立点.所有的像素点可以分为三类:顶点、非顶点的边界、内部点,通过实验当总数小于2时效果最好.经过二值化去噪以后得到的验证码如图2所示.获得干净的图片后对其进行分割操作,将图片分解到原子级,即:只包含单个字符的图片.使用PhotoShop打开并放大到像素级别,可以得出图片的参数特征:整个图片像素为60*20,单个字符像素为8*13,字符间隔6个像素,左相距8个像素,上相距3个像素,最后根据像素位置特征进行分割.得到的原子图片效果如图3所示.由于本文所选择的研究对象本身尺寸就是统一状态:60*20的规格,因此图片不必进行归一化.

2基于svm的验证码识别

本文采用开源的机器学习库Libsvm是一个易于使用和快速有效的SVM模式识别与回归的软件包,由台湾大学林智仁教授等开发设计[7].Libsvm使用步骤可分为6个步骤:1)按照格式要求准备数据集;2)对数据进行缩放操作;3)考虑使用RBF核函数;4)选择最佳参数C与g;5)对训练集进行训练获取支持向量机模型;6)利用模型进行测试与预测[8].

2.1数据集标记

在开始阶段,计算机程序并不认识相应的字符,因此在识别之前,必须人工对素材进行标识.本文研究的内容是数字验证码,因此只要在目录下建立9个文件夹,以相应的数字命名即可.采用分割算法将验证码分割成4个原子图片,将分割好的原子图片拖放到对应的9个文件目录中,通常来说标记的图片素材越多,程序预测的准确率越高.如果是字母和数字组合的验证码,则分别建立相应数量的以数字和字母命名的文件夹.在验证码的一些干扰项如扭曲,噪点,干扰线等做得不够好的前提下,对计算机来说纯数字与字母加数字的验证码组合并无区别.

2.2字符特征

选择字符特征选择的优劣对算法效率有重要的影响,文中特征选择阶段有两种方法.第一种方法,单个字符像素为8*13,可以将每个像素点作为特征向量则有104个特征,此方法中较高的维度会造成大量的计算.第二种方法,对其进行适当的降维,统计每行黑色像素的个数,可以得到13个特征,统计每列的黑色像素个数可以得到8个特征,最后将得到21个特征,这样可以将104个特征缩小到只有21个特征,可减少计算量.本文则采取第二种特征选择方法.

2.3素材特征

化依次遍历目录下9个文件夹,根据Libsvm指定的格式将对应的图片素材特征化,生成向量文件,如果每个文件夹有100张素材图片,那么将会生成10000行的向量文件.得到的像素特征文件部分内容如图4所示.第一列是标签列,即上文中标记的10个图片值,第二列到最后一列共有21组特征值,以冒号隔开,前面的值为索引号,后面为相应的行或者列的黑色像素点个数,本文中1-13组为行的值,14-21组为列的值.2.4生成SVM模型并预测在生成SVM模型阶段,只需调用svm-read-problem、svm-train以及svm-save-model函数即可将特征文件生成SVM模型.主要实现代码如下:y,x=svm-read-problem(train-file-name)//train-file-name为像素特征文件model=svm-train(y,x)//对训练集的数据进行训练svm-save-model(model-path,model)//保存生成的模型到指定目录模型生成之后,使用新的图片进行测试,使用一组全部标记为0的30张图片来进行模型测试,用特征算法,将图像进行特征化降维,并将所有的特征转化为标准化的SVM单行的特征向量,调用p-label,p-acc,p-val=svm-predict(yt,xt,model)进行预测并得出正确率.

3实验结果分析

实验主要分为6个步骤:1)请求验证码接口,获取图片保存在内存中;2)对图片进行预处理操作:灰度化,二值化、去噪点;3)将验证码分割成4个原子图片;5)加载训练好的模型,依次对4个原子图片进行识别;6)对程序返回的4个识别结果进行拼接.本文对网站发起了1000次请求.返回的部分结果如图5所示. 由实验结果可以得出,当每个数字的训练集在90张左右时,识别率已经达到100%.

4结束语

研究了基于SVM对传统数字验证码进行识别,从实验结果可以看出,高校系统中验证码识别率可以达到100%.在识别阶段也可以采用KNN算法进行识别,同样可以达到100%的识别率.由此可以看出高校中的系统存在着安全隐患.随着深度学习技术的发展,其在图像处理技术上也越来越强,某些传统的简单图片验证码已无任何安全可言,因此建议采用新型的验证码形式,如:随机点选汉字图片式、语音验证等方式来增加识别难度,从而有效地加强高校系统的安全性. 

参考文献: 

[3]文晓阳,高能,夏鲁宁,等高效的验证码识别技术与验证码分类思想[J].计算机工程,2009,35(8):186-188.

[4]尹龙.扭曲粘连字符验证码识别研究[D].合肥:中国科学技术大学,2014.

[5]朱莹玲.粘连字符验证码的识别研究[D].南京:南京理工大学,2017.

[6]张洁玉.基于图像分块的局部阈值二值化方法[J].计算机应用,2017,37(3):827-831.

[8]杨雄.基于Python语言和支持向量机的字符验证码识别[J].数字技术与应用,2017(4):72-74.

作者:安梦生 单位:淮阴师范学院