识别动网的验证码

 

基于矢量,掺杂矢量的角度值随机偏移和长度值随机偏移,默认的比例为角度:10度和长度:10%

特点:

  1. 图片大小固定,默认80*20。数字个数固定,默认4,每个数字大小固定,默认20*20。
  2. 矢量随机角度值(默认随机量10°)和随机长度值(默认随机量10%比率)。最终图片根据随机后的点阵自动缩放大小调整。
  3. 有随机噪点。默认噪点比率:背景20%,数字10%。
  4. 噪点特征:Brightness > 50
  5. 数字可随机颜色。数字的Brightness均为50

识别思路如下:

1.去噪点

滤去所有Brightness不是50的点。这样会使数字上的噪点也被除去,造成数字失真。由于实际上采用的识别比对是基于统计的,所以关系不大。但也可以使用带权的中值滤波进行一定程度的修复。权值: 当前点 : 临接点 : 斜点 = 4 : 2 : 1 = 0.25 : 0.125 : 0.0625 。 将Brightness>50的点填充为白点,=50的点填充为黑点,存到数组中也可以只用bool或者 0/1表示

ps: 取 Brightness 的方法,请搜索 HSB/ HSV 的说明。.net 2.0中 Color.GetBrightness方法可以直接取到,结果值域 [0.0,1.0]

2.分块统计

将20 * 20的数字及其背景分为 5 * 5 个小块,每块包含16个像素点,存放在一个25个元素的数组。由于前面已经做过去噪,所以数组中可以仅仅存储该小块内包含的数字点的个数。

3.比对

将与数据库中存储的0~9十个数字的对应小块的点数值进行方差计算。与0~9中分块点数的方差最小的数字作为识别结果返回。

4. 数据库说明

数据库中的数据可通过学习统计而来。大约对每个数字统计100~200个左右的样本即可。

5. 分析

优点:识别相当精确。目前的验证程序对于单个字母已经可以达到90%以上的准确率。对除2/7 、 6/8/9 数字对以外的数字可以达到 95%以上准确率
缺点:中值滤波对数字轮廓有一定变形作用,滤波之后会可能导致变形过大的数字识别错误,但也可能会加强某些特征。比如2/7、6/8、8/9
性能未进行测试,目前使用C#2.0,在粗糙的优化后,识别每个验证码的时间不超过1秒,4数字的识别率未测试。
可能可以提高准确率的方法:
记录方差的同时,记录学习数据的方差的平均值。识别比对时寻找方差与期望差值最小的进行比较
合理使用中值滤波和旋转。把去方差最小的前三个识别数据,再进行旋转变换和中值滤波,使用原比对算法进行识别,预计可以提高图片识别的准确率到95%
对于固定图片大小的,每次形状相同或者类似的验证码,均可以使用这个思路解决

 6.测试结果

未加中值滤波操作

对程序进行了100次识别测试,每次四个字符,正确89次,失败9~11次,其中错误12个字符,有两个1/2完全无法分辨,所以不能判断是正确还是错误,还有两个识别错误的,肉眼也同样很难分辨。

字符识别准确率在97%左右。个别字符,如3,4,7,0,没有出现错误,可以认为99%以上准确率。

可以认为总体识别准确率在90%左右。连续两次识别错误的概率在1%左右(测试时有两次连续两次识别错误 -_-!! )

错误字符如下:

识别错误统计

原字符

识别字符

出现次数

863
941
652
621
231
831
122 ( 不确定原字符为1还是2)
531
合计 10~12

测试识别消耗时间如下:

1 载入识别库     操作耗时:  31 ms ,     312500 ticks
2 网络抓取      操作耗时: 203 ms ,    2031250 ticks
3 保存        操作耗时:  31 ms ,     312500 ticks
4 识别        操作耗时:  31 ms ,     312500 ticks
0 全部操作      操作耗时: 296 ms ,    2968750 ticks

若只进行识别操作仅需100ms左右。

附本人测试机配置如下:

AMD Opteron 3000+ , 512M Ram (外频未知), 80 G ATA 133 HD , 网络为 ADSL 2M 

http://bbs.dvbbs.net/Dv_GetCode82.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值