原创,使用轮廓以及扇形扫描实现qq的验证码识别

常用的验证码识别方案对一些复杂的,粘连的字符串基本上是实现不了,最近CrazyCoder在研究腾讯的验证码识别,有一些心得体会,不敢独享,分享出来共大家参考,qq变态的验证码对应于切图和分割相当麻烦,并且干扰线去除也是一些纷繁芜杂,目前也仅仅实现了48%左右的识别率,进行分享下,看如下图片所示
qq<a href='/YanZhengMa/Index.html' _fcksavedurl='/YanZhengMa/Index.html'>验证码识别</a>
 
我们这里用传统的方法分割识别貌似不可实现
 
首先做一些基本分析,字符串粘连,干扰线扯淡,我们第一步要想办法把干扰线给去掉
 
这里采用一种斜线扫描的方案,也就是以对角线为基点,进行逐斜线扫描记录扫描的有色值的点,然后计算等平记录直线附件跳跃的指定阈值的点,可以很轻松的将图2,3,4的干扰线去掉
 
对于图1,显然斜线扫描并不适合,但是我们可以很清晰的分析出来,图一的线长,粘连点不同,并且形成不了直线区域的连续点,所以我们按照点线长度分析,去除周围无相连的点,基本可以将图1的干扰码去掉
 
下面重点讲解识别部分
 
首先我们分析1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
我们首先对验证码进行判断,首先来判断字符区域的直线链接
这里有个技巧,我们可以用6个矩阵把验证码描述出来,横向矩阵,纵向矩阵,X斜线矩阵,Y斜线矩阵,以及两个对角线矩阵
 
然后对矩阵进行分析,首先对坐标(0,0),(x,0),(0,y),(y,0)进行扇形扫描,通过扇形扫描,可以确定出来验证码的位置以及大致的轮廓,我们可以基本上确认是大些字母还是小写字母,qq的验证码的没有0和i的,那么先排除。
 
这里先来识别 o,d,b,8,9,p,g,q,e这几个字符,对比(0,0)扫描和(0,y)扫描,判断区域闭合并判断扫描基尾,可以识别出来这几个字符
 
对于字符N,W,M,X,V,K,Z识别使用扇形,因为有旋转角度和字符串粘连的问题,这个判断相对复杂一些,也许是腾讯怕我们肉眼识别麻烦,加了个T字角,这样,我们的麻烦其实只在于N,Z,V这三个上,至于W,M,K可以识别出来。对于N,Z,V倾斜角度的方面,我暂时没有一个好的方案,如果大家有思路,请给我发邮件Heroqst # Gmail.Com,请将@替换为#,或者在CrazyCoder.Cn上留言,大家评论探讨一下
 
抛去上面的识别结果,下面如正题,我们以轮廓方法来进行识别
 
首先clear无关点,然后进行图片放大,建议为4倍为宜,然后假设验证码字符为等长,进行圆形扫描,圆心基于交叉线的交叉点开始扫描,并进行相应X轴Y轴的位移,记录圆形扫描的点,同样以矩阵的形式存贮,然后以正方形的居于对圆形扩散,并位移,通过矩阵对比,我们基本上可以确认字符的轮廓。
 
下面开始轮廓识别,对于这类型的验证码,建立一个特征库基本上不可能,我的识别方法如下,
 
方法如下,基于以上方案,我们可以很方便的对字符进行等比例扩大,并以适合我们验证码的取样特征库的大小,以圆边正形的(0,0)位置进行倾斜,然后同化为一个等比例的矩形区域,同时对比轮廓的特征库,以特征点取样为概率放大,并对比,如果点线相似度大于80%我们就认为它就是我们要的结果
 
基于以上方法,可以实现接近50%的识别率,主要是有几个字符旋转的时候可能会同玛字不同,如果大家有什么好的建议,请email给CrazyCoder
 
 
 
 
Tags:  验证码识别 自动识别验证码 验证码识别软件 验证码识别器 验证码识别原理 qq验证码识别

延伸阅读

最新评论

  1. 这里采用一种斜线扫描的方案,也就是以对角线为基点,进行逐斜线扫描记录扫描的有色值的点,然后计算等平记录直线附件跳跃的指定阈值的点,可以很轻松的将图2,3,4的干扰线去掉 这句话实在是没有描述清楚是怎么去干扰线的那.有谁能读懂的请站出来.作者是不是写错了阿????
  2. 同意一楼的观点,另外其它的我也基本读不懂,呵呵,太菜了
  3. 我也看不懂
  4. ffffff
  5. 那一句太专业了,不懂啊
  6. xxxxxxxxx
  7. 老大能不能给我这个小菜做一个示意图!感激不尽呀!实在是看不懂这句话!
  8. 我也是看不懂啊。最好能配点图片来解说每步就好了。
  9. 专业人士,。。。。

发表评论