机器自动识别验证码的原理是怎么样的?
1.分难度等级的 2.一般人觉得好认的就好识别, 3.粘连的一塌糊涂,噪点很多,干扰多的就不好识别回答里面有问动态图的,动态图也是一帧一帧的图片连起来的,重新拆成一张一张的就好识别了。。。而且这种验证码信息会更多一些,反而好识别些然后来讲一下识别过程吧,其实跟人眼的识别时差不多,想把每一个字符分割出来,一个一个认。首先是分割,字符粘连的厉害的,或者噪点太多都会造成分割不成功,比较简单的办法是二值化之后寻找连通域(就是没有分开的部件,单个字母和数字都是,但是左右结构的中文字就有两个连通域),前提是每个字符都是一个连通域,这个办法对中文字不合适,字符比较均匀还可以找垂直投影的间隔。然后是字符的校正,包括各种旋转,仿射变换,这儿的算法又海了去了,titl之类的牛逼算法,有验证码扭曲的太厉害的估计这儿也校正不回来了。然后是字符的二值化,简单理解就是整成字是白的底是黑的,二值化的算法也很多,楼上有采用定阈值的,也有自适应的算法。 以上每一步里面都得穿插一些去噪去干扰的步骤。 最后对每个字符进行识别,这儿又有很多算法了,svm算是近年来比较热门的分类器,还有神经网络,或者最简单的模板匹配。训练分类器又要涉及到训练样本的选择,牛逼的话还能加入在线学习的算法,可以选择的策略又多了去了。最后想说的是,验证码的识别算法如果具有普适性的话,搞出这算法的娃估计能发好多篇牛逼的paper赚好多好多钱了,这本来就是公认的人工智能中很难的事情,现在抢票软件因为只需要识别一个网站的验证码,所以相对正确率会高一点,一个网站的验证码一般都是一个类型的,相对来说会容易识别一些。不过现在有些验证码是为了做广告和识别一些扫描书籍的内容(就是机器识别不了的),内容多样性多了去了。
现在一般的验证码识别算法无非就是:1.先把背景颜色和可能是干扰的点和线(噪点)去掉; 2.把旋转和扭曲的文字进行归位; 3.把文字块分离出来,然后对照训练样本进行识别。这些算法基于以下几点:1.大多数验证码的背景单一,背景与文字颜色的区别很大,噪点明显,很容易被剔除;2.GIF动态验证码只是坑人的。因为对于程序来说只要转换成其他格式就变成静态图片了,并不影响识别,反而造成人类识别相对困难;3.干扰点和线与验证码文字差别一般比较明显,太多的干扰点和线也能轻松去除,反而不利于人类识别;4.文字一般是相同颜色的,如果每个文字颜色不一样反而更容易被程序分离出来;5.旋转和扭曲的文字确实在一定程度上提高了程序的识别难度,但是训练样本多了也是可以在某种程度上提高识别的准确率的。另外,扭曲和粘连的文字(Google那种图片验证码就是这样,不是reCAPTCHA哦)连人类都不容易识别(参考:如何识别高级的验证码),程序就更难了。