我的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位,都可以识别的)
如果你对验证码识别、群发软件开发、国外共享软件等有兴趣的高手,可以联系我,交流交流心得。
------------------------------ 联系方式
邮箱:[email protected]
QQ: 48787479
作者: 我是狗狗 发表于 2011-09-23 03:01 原文链接
最新新闻:
· Facebook f8: Timeline 和 Social Apps 背後的意義(2011-09-23 11:46)
· 电商/SNS/搜索引擎跨界插足在线旅游(2011-09-23 11:41)
· CERN物理学家声称中微子速度超越光速(2011-09-23 11:38)
· Anybeat虚拟社交网络的希望?(2011-09-23 11:38)
· 卷土重来:关于新版Color你应该知道的5点(2011-09-23 11:36)
编辑推荐:C#技术漫谈之公共语言运行库(CLR)