我是一名图像处理专家和验证码解码器,之前做过很多验证码解析项目。
好啦,我们开始验证码解析步骤吧!
解码任何类型的验证码有 3 个主要步骤:
1-删除背景
清除验证码中的任何噪音(使用任何图像处理方法)。
验证码解码战斗机注意事项:如果你想有一个好的验证码,你应该添加更强的噪音。使用具有相似字符颜色的随机噪声背景。
2- 拆分字符
当他们分开时,这一步很容易;当他们不分开时,这一步就很难了。
*验证码解码霸王注意事项:如果你想有一个好的验证码,不要把字符分开!让它们重叠,不要对字符使用不同的颜色,解码器可以很容易地分割字符! (大多数开发人员都没有意识到这一点,并认为最好使用彩色验证码!),最好的方法是用黑色制作重叠的字符串。对于经验丰富的验证码解码器来说,解码彩色验证码不成问题!它只是美丽而没有用! :) 使用随机曲线将所有角色相互连接。 *
3- 将单独的图像转换为字符
分离后,我们有了一个字符集,(现在没有任何字符串,只有图像和像素),我们应该将字符图像转换为字符串,但是如何?!
有几种方法,如果它们不旋转,并且具有固定的字体和大小(例如 freeglobes CAPTCHA),您可以定义一个模式集,您的程序应该循环抛出模式以找到每个图像的最佳匹配,如果字符非常不同并且需要一个大的模式,您应该使用“神经网络”来识别该字符。用于验证码解析的神经网络将采用一个字符,我们告诉网络这个字符是什么,例如,我们将给它一个“A”的图像,然后我们告诉神经网络:它是“A”! ,然后它会“学习”这个角色并将其学习保存到数据库中,这个过程称为“训练”。因此,当我们再次向训练有素的网络询问新角色时,它会从其学习数据库中返回最佳匹配。
通常解码器专家使用验证码本身来训练神经网络。当心!使用适当的数据进行训练可能会影响你的结果。
验证码解码战斗机注意事项:如果您想拥有一个好的验证码,请使用任何解码器无法识别字符的方法,即使使用神经网络也是如此。使字符随机变形、使用多种字体而不是一种字体以及旋转字符等。
最后,我们将所有单个字符连接成一个并将其作为结果返回。
不幸的是,没有固定的算法来解决任何验证码,这意味着新的验证码需要新的分析和训练。您无法制作验证码解码器来解码所有验证码。
开始之前您应该了解什么:
1- 图像处理基础知识
2- 神经网络的一般理解
3-简单的图像处理功能(任何语言)
For PHP:
imagecreate()
imagecreatetruecolor()
imagecolorat()
imagecolorsforindex()
imagesetpixel()
.
.
.
对于.NET:
Bitmap type,
getPixel()
setPixel()
.
.
.
对于 JavaScript 和 HTML5:
You should know the Canvas very well.
Lastly:
验证码解码战士注意事项:如果您想知道某人如何解码验证码并希望阻止其解码,您应该首先自己成为验证码解码器或聘请非常了解验证码弱点和攻击算法的人!
希望能有所帮助! ;)