验证码识别小记 -- 从产生验证码到利用svm识别

3 篇文章 0 订阅
2 篇文章 0 订阅

一. 利用java生成验证码

使用awt库,画图。随机生成数字,并随机使用颜色。加入30条随机线条。文件名为验证码的内容

验证码:示例

二.利用python进行验证码识别步骤

大步骤分为:

1.样本验证码处理成单个字符

2.字符特征提取

3.svm,rf模型训练

4.给定测试验证码,得出识别率

 

主要使用到的库: PIL,os,sklearn 

1.样本验证码处理成单个字符

1.1 将验证码转换成灰度图,设定某阈值,若灰度大于该阈值,将该点变为白色

1.2 将处理完的灰度图,转换成二值图。遍历二值图,若二值图的周围一圈像素点中,黑色点的数量小于3个,即为孤立点,则删除掉该孤立点。

1.3 划分验证码为单个字符,找到字符的开始于结束。利用标志位记录是否在字符里。根据划分出的字符的宽度,若划分出多余验证码字符的个数时,选取最大的前k个字符。为防止验证码存在高低上的平移,将已经切割的单个字符,从上到下遍历,遇到的第一个存在黑点的行,作为起始行。将从下到上,第一个存在黑点的行,作为末尾行。将最后切割成的图像重新resize,成为大小一样的图片,以便特征选取。

1.4 将单个字符的验证码部分,安装样本验证码的名称所对应的字符的值按分类存储,作为模型的训练集

 

2.字符特征选取

将字符在行上面的像素点为0的个数与在列上面的像素点为0的个数作为特征向量,例如行为26pixels,列为8pixels,特征向量,则共有34个特征

示例:数字0 的特征向量

[15, 22, 26, 6, 6, 26, 22, 15, 4, 4, 6, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 6, 4, 4]     

 

3.模型训练

由于sklearn库的透明性,笔者使用支持向量机,和随机森林来训练模型。根据cross_val_score函数确定,模型的优劣。最终选取支持向量机,以高斯函数为核。存储模型

示例:模型优劣

rbf:Accuracy: 0.97 (+/- 0.06)
linear:Accuracy: 0.97 (+/- 0.06)
rf:Accuracy: 0.98 (+/- 0.06)

 

4.给定测试验证码,得出识别率

4.1 利用上述步骤1,将验证码分割成单个字符

4.2 利用上述步骤2,将单个字符转化成列表

4.3 载入上述步骤3的模型,根据模型得到验证码

4.4 比对得到的验证码值和验证码实际值,得到正确率

笔者数据集结论部分示例:

0AKC.jpg    0AKC
0BRS.jpg    0BRS
0C40.jpg    0C40
0CON.jpg    0CON
0DGU.jpg    0DGU
0DIW.jpg    0DIW
0DOQ.jpg    0DOQ
0EWF.jpg    0EW
0FII.jpg    0FII
0FJ4.jpg    0FJ4
0FXZ.jpg    0PXZ
0GA1.jpg    0GA1
0GTL.jpg    0GTL
0IHX.jpg    0IHX
0IQO.jpg    0IQO
0IV2.jpg    0IV2
0IYD.jpg    0IYD
0KPB.jpg    0KPB

打印出的错误识别验证码示例:

actual: ZHOZ
predict_letter_list1: ZVOZ
-----------------------
actual: ZRWU
predict_letter_list1: ZRW
-----------------------
actual: ZSWW
predict_letter_list1: ZSW
-----------------------
actual: ZW3M
predict_letter_list1: ZWM
-----------------------
actual: ZWB4
predict_letter_list1: ZW4
-----------------------
actual: ZWIV

模型预测正确率为:

测试集预测acc: 0.9236051502145923

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值