验证码识别(1)

    两年前做过验证码识别的东西,这几天因为一个朋友问,索性总结一下。本人技术很差,文笔也很差,全当抛砖引玉,高手请指点,新手一起学习哈。

 

 

    验证码,形式很多,由最早的噪点,连接线,到背景色‘变换,以至于后来的旋转,扭曲,粘连,方法各异,但是,个人认为,难点主要集中在一点,就是粘连与否。(个人主要卡在这里)。 

 

    今天先介绍一下验证码识别的传统思路:灰度(也有直接二值法)、二值、去噪(也可能放到前面)、切割、识别

 

    灰度有一个很著名的心理学公式Gray = R*0.299 + G*0.587 + B*0.114,不过除非你不想过日子,才会用浮点数过日子,给大家提供一个位移法: Gray = (R*19595 + G*38469 + B*7472) >> 16,这个精度不错,速度也很快,个人比较推荐。 

 

   二值化这个很重要,一般来说,二值化做得好,后面的去噪都能省很大事,甚至不用去噪了。 

 

   去噪要因噪而异,现在算法还是不错的,能看到的噪音,几乎都能去掉,所以,去噪不是什么问题,不需要担心。 

 

   切割比较好笑,可以切的,就切了,不可以切的,你也没脾气,一般都是x轴投影,新出来的有外轮廓识别的,有连通线的,大同小异,一般来说,如果粘连了,什么方法都没用。 

 

   识别算法很多,学术派喜欢的是神经网络流,其实效果一般,而且,样本越大,导致越慢,不是很推荐,不过好发文献,呵呵。数字类的,比较常用的算法是日字投影,加权法。字母就比较杂了,加权、神经网络、覆盖法等等。近几年有人提出来的形状上下文,这个不错,很推荐。个人在开发一种新的识别方法,专门针对扭曲字母和数字,不过对付粘连还是不强,一直有个目标是google的验证码实现50%的识别,呵呵。 

 

   如果粘连,一般来说,或者通过算法分割,或者用形状上下文做整体识别。笔者的粘连识别一直没有超过50%所以不好说什么。

 

   转贴请注明来源,希望和大家交流进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值