我的QQ验证码识别设计探讨(QQ2011)

 

 

本人技术很菜,

但做事很执就。

找人很多高手问验证码识别技术,结果未了,

一气之下,就自己动手摸索了。

 

什么神经无算法,啥的,都是浮云。

下面是我用模式对比算法做的,

根据自己眼睛看东西悟出来的算法。

 

方法:样本 + 算法 = 识别

 

说个小时候学识字的例子: 

1. "R" 这个字母,你要会认识这个“R”字母,必需得记住“R"的(模式)特征,脑袋会存储大量"R"的(模式)特征样本

2. 大家都知道了人脑处理图片的速度是非常惊人的,电脑一秒能运算2亿次以上的指令,但处理图片无法跟跟人脑相比,所以算法很重要。 

 

识别结论: 

1. 制作大量样本。

2. 设计快速算法。

 

比如26个字母有1000个样本(每个字会的形状会不同,包括:字体、大小、角度),

一个样本识别会移位运算1000次以上,

再加1000个样本,

那就要运算 1000 * 1000 = 1百万次。

一百万次运算也许会花费几秒会10几秒。

运算时间越长,识别的速度会越慢的。 

 

(半)成品展示:

 

下面图片是制作样本软件,样本是在原有的验证码图片上来制作的。(验证码识别没用到切割技术) 

 

 

 识别结果:字符:R,相似度:96%,耗时:0.0190,运算:299,移位:16445,X轴标:22,像素比列:55%

 

 位移:16445次

 耗时:不到0.02秒

 X轴标:22(表示X位置,用于4位个验证码排序 

 如果是1千个样本,就花掉 19秒,当然这是单线程。

 开10个线程不到2秒完成。(实际验证码识别用不1千个样本,用到500个可能就识别出来了)

 

其它样本识别测试结果:(以下左边为样本图片,右边为验证码图片,测的只是单个样本识别。)

 
 

R样本,耗时不到0.01秒。

 

 

 R样本,耗时不到0.01秒。

 

 

 R样本,耗时不到0.01秒。 

 

 

 V样本,V位置在X轴 96的位,最后一位了。

 

 

 V样本

  

 

 H样本,可以看到二图片H的字体不同。

 

 

 算法思路:

  本人没学过高等数学,什么线性数学,微分啥的不懂。

  所以高端的算法基本没用到。

 

  我的算法很简单,采用初中学的几何数学,三角函数来计算的。

 

  验证码字母特征:字体 + 大小 +  转角

  字体:制作样本。(有多少字体,制作多少样本)

  大小:可以采用缩小样本来处理。(还没开发,我暂时采用制做样本来处理)

  转角:QQ的验证码一样是左右各45度,最多是90度。(还没开发,我暂时采用制做样本来处理

 

 QQ验证码识别分析: 

 1. QQ验证码算国内很变态的了,他用到的字体,大小,转角很多。(但这些都是浮云)

 2. QQ验证码4位的用到24个字母(O 和 I 好像没有),加上大小写有48个字母,

     10种字符 * 10个大小 * 10种转角 * 48 = 4.8万个样本。

     当然你可以不用做这么多样本,但样本越多,识别率就会越高。

 3. 如果大小和转角能在算法上来处理,可以减少制作很多样本,验证码识最大成本花费在做样本上面。

 

 开发感想:

 1. 我没上过高中,对三角函数(角度计算)不是太懂,所以样本的角度、转角没找到好的算法,因为要用到三解函数的正切、余切。

 2. 验证码识别跟眼睛看东西一样,其实不难,主要在于识别的思路。像Google的il验证码非常复杂,如果硬要去识别,基本上一台电脑是运算不了,要用到多台电脑一起运算。

 3. 对于QQ的验证码,我有更强的识别思路,可以达到90%以上的识别率,下次我再公布思路。(不管是5位、6位,都可以识别的) 

 

 如果你对验证码识别、群发软件开发、国外共享软件等有兴趣的高手,可以联系我,交流交流心得。

 

 

 

   

  

 

 

 

posted on 2011-09-23 03:01  我是小罗  阅读(7413)  评论(30编辑  收藏  举报

导航