本帖最后由 阿福 于 2010-11-30 19:23 编辑
(1)背景为图片底纹:这是朋友要求做的,不过发来的原始验证码字母不全,没给我验证码的原始链接,所以识别库做的不是很好,如果能将链接发来,还可以再大幅提高识别率。
所以目前只能识别已提供来的验证码中出现的字母了。
原始验证码:
转换后(转换后过程未保存,如需保存请联系):
所提供的原始验证码:
下载:
使用:验证码图图片存在[朋友请求4]目录.运行后结果在文本文件中。
(2)粘连:用于识别:http://bo.tianxia.taobao.com/checkcode.jpg这个网址的验证码.
原始验证码:
下载:
此类型验证码(注意是此类型,不是指此组验证码,这组验证码只是左右粘连,没有上下波动,字体变化,是此类型验证码中最简单的,所以单就这组验证组另有其他简单的算法处理)识别要求机器配置够好.因为au3不支持真正意义上的多线程,所以这种验证码基本上是AU3能识别的极限了,再高级的就要用支持多线程的其他语言或DLL调用.
1)该验证码由大字符和小字符组成,小字符字库很好取,所以认真做了字库,可以准确识别.
2)大字符因为一个验证码只出现一个,很懒的做字库,就按小字符库的特征来识别,受干扰线的影响,识别效果不好.
3)这种粘连且位置变化的验证码类似QQ验证码,如果再多用几种字库并旋转就和QQ验证码一样难了.此类验证码要用多线程处理(注意是此类,而不是这组验证码,由于这组验证码没有上下波动,实际上有更简单的识别方法,我现在的这个例子,把验证码可能上下波动也考虑到了,你们可以PS试一下把验证码单个或全部上下挪移,一样能识别),用AU3写很不合适.为了能用纯AU3写,我做了伪多线程.
4).机器不好的不用试了,单CPU机器识别一个验证码可能要几分钟,单核的识别一个验证码可能要30秒左右.我的4核机器(相当于8CPU),设成10-20个伪线程,识别一个验证码是3秒左右.
5)设置伪多线程数在生成的ini文件[UserSetup]中,task=4是默认4个伪线程. Per是小字库精度要求,Per2是大字库精度要求,前面说过了大字库没做只取小字库特征,所以per2要设低.
机器不是很好的一定要试的话,task设成1-4为宜
6)使用:验证码图下载到[演示5]目录.结果生成在CheckCode.txt,过程记录在Task.ini
(2)粘连的补充:
1)单只针对这个验证码的识别程序:
A) 2维算法
可以达到接近100%的识别率.对机器要求也较低,普通机器在10秒左右可以准确识别,在我的机器上只要1-3秒.如果识别效果和速度不理想,用户可调整ini文件[UserSetup]中的Per值(字库匹配率,默认99%)和Task值(多任务,默认2).
B) 1维算法:
可以达到接近100%的识别率.对机器要求最低,普通机器在4秒左右可以准确识别.
C) 1维特征索引算法
可以达到接近100%的识别率.对机器要求最低,普通机器在1秒左右可以准确识别.不需开多任务
2)软件要生成临时文件,使用了FileInstall,所以有些杀毒软件会阻止它的运行.
(3)旋转:
验证码地址: http://www.ipal.com/?_task=index&_action=vcode,
此演示程序要连接作者服务器.
提供此网址的朋友只要求50%识别率,所以只做了快速倾斜校正,未对粘连做进一步处理,如果粘连点超过4个以上的,程序可能会乱拆分(粘连只能处理到本程序所带的样图94这两个字符这种粘连的).
此演示程序对于无粘连验证码有较好识别率,对于粘连验证码的拆分相当花时间,寒假时可以考虑花一天试试.
下载的验证码存到[演示6]目录下的CheckCode.bmp,结果存在CheckCode.txt
|