C# 验证码识别实践2 ——对CSDN资源上传验证码识别率100%,久游网登陆90%

转 http://blog.csdn.net/stevenkylelee/article/details/8270069

昨天写了《C# 验证码识别实践》一文

地址:

http://blog.csdn.net/stevenkylelee/article/details/8263890


由于昨晚上又改进了下算法和程序,

所以今天继续写。

改进的程序下载地址:

http://download.csdn.net/detail/stevenkylelee/4859013


其实,识别的大体过程上一篇文章基本上讲完了。

如果要说的话,只能在细节上深入。

现在我也不太确定,我用的方法是否具备一定的扩展性和适应性。


所以,先拿2个网站进行试验。

以后这些地址的验证码可能会变,我先截图好现在的图

1.CSDN上传资源页面的验证码。地址:

http://u.download.csdn.net/upload

截图:    

2.久游登陆页面的验证码。地址:

https://passport.9you.com/login.php 或 https://login.passport.9you.com/ 

截图:

     

     

     

    



先看看CSDN上传资源页面的。

比较简单,改了一下处理过程,就轻松100%识别了。


一般每种验证码都有其特点。

所以,对应一种类型的验证码往往需要一种特定的算法。

尽管CSDN资源的比较简单,但针对它做的识别,

就只能用在它身上,不可套用到其他情况上。

当然,这个也可能和我水平有限有关。

会不会有牛人可以写出一个算法就能通用到所有的验证码的情况,

我就不清楚了。总之,我不能。呵呵


先在界面上填写CSDN资源上传的验证码的地址:

http://u.download.csdn.net/index.php/rest/tools/validcode/uploadvalidcode/10.501964908791706

然后在程序界面上的“验证码类型”选择:“CSDN资源上传”

再然后,点“下载”,再点“识别”,就会出结果了。

截图如下:

C# 验证码识别实践2 ——对CSDN资源上传验证码识别率100%,久游网登陆90%_第1张图片


然后是久游登陆页面的验证码,这个验证码就比较复杂一些了

62种分类=26个小写字母+26个大写字母+10个数字。

随机背景颜色,随机字符颜色,随机字符位置,

随机字符大小,随机字符扭曲。

虽然随机的情况比较多,但随机的程度都不是很大。

所以,识别还是可以的,但目前不能做到100%。


先填写久游的验证码地址:

https://login.passport.9you.com/identifyingCode.jsp?0.953521374380216

然后,选择“验证码类型”为“提取连通分量”

再点“下载”,“识别”

识别截图如下:

C# 验证码识别实践2 ——对CSDN资源上传验证码识别率100%,久游网登陆90%_第2张图片


用提取连通分量的方法,一般可以“抓到”字符。

就是说,在字符轮廓分明并且没有断裂的情况下,

不管它出现在什么位置,都可以定位到。

这样就屏蔽了位置随机性。


对久游登陆的识别率大概是80%-90%左右。

那个10%的missing率是怎么回事呢?

原因出在字符的分割上。

久游登陆的验证码会有一定的几率,出现字符粘连。

就是说,提取到的一个连通分量会包含2个或以上字符。

对于这种情况,我的处理是,如果提取到了一个比较宽的连通分量。

那么,按照字符平均宽度进行切分,把那个宽的连通分量,

垂直切成符合字符可能宽度的尺寸的几份,在进行识别。

这个处理,有一定的效果。比如:W和M边缘相连的话,可以切分出来。

但是,对于:M和有点旋转的i或者l相连,就切分错误了。


其实,要做到久游这种验证码的100%识别。

大概也是可以的。就是要花费比较多的精力。

就好比:考试得40分,要考到60分不难。

而考到了95分,要再考到98分或者100分就难了。

昨天和前任公司的技术部主管聊到这个问题,

他认为没有必要做到100%识别,一般有90%以上就足够了。

也有人和我说,有些情况,30%也够了。

因为,大不了就是重发3次请求,作为自动登陆来说,没什么。


最后,久游验证码怎样做到100%识别呢?

呵呵。透露一点,久游有一个比较明显的破绽,

利用好这个破绽,应该可以弥补我的10%-20%错误,

最终达到100%识别。

这个破绽就是:字符的颜色!

你可能感兴趣的:(算法,验证码,验证码识别)