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

来源:百度文库 编辑:神马文学网 时间:2024/04/25 16:04:18

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

来源: 发布时间:星期一, 2008年12月1日 浏览:7270次 评论:0常用的验证码识别方案对一些复杂的,粘连的字符串基本上是实现不了,最近CrazyCoder在研究腾讯的验证码识别,有一些心得体会,不敢独享,分享出来共大家参考,qq变态的验证码对应于切图和分割相当麻烦,并且干扰线去除也是一些纷繁芜杂,目前也仅仅实现了48%左右的识别率,进行分享下,看如下图片所示  我们这里用传统的方法分割识别貌似不可实现 首先做一些基本分析,字符串粘连,干扰线扯淡,我们第一步要想办法把干扰线给去掉 这里采用一种斜线扫描的方案,也就是以对角线为基点,进行逐斜线扫描记录扫描的有色值的点,然后计算等平记录直线附件跳跃的指定阈值的点,可以很轻松的将图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