如不雅有足够的练习数据,这种办法甚至可能直接产生效不雅——但我们要使问题变得更简单。问题越简单,练习数据越少,我们解决它所需的计算才能就越小。毕竟只有15分钟!
荣幸的是,验证码图像平日只由四个字母构成。如不雅我们能把图像瓜分开来,如许每个字母都是一个零丁的图像,那么我们只需练习神经收集一次辨认单个字母:

我没有时光去挨个查看10000个练习图像,然后用Photoshop将它们手工瓜分成不合的图像。这须要几天的时光,我只剩下10分钟了。我们不克不及将图像瓜分成4个等分大年夜小的块因为验证码随机将字母放置在不合的程度地位,以防止出现如许的情况:

我们将年腋荷琐原始的验证码图像开端:

每个图像中的字母都是随机放置的,使图像瓜分变得加倍艰苦。
然后我们将图像转换成纯黑和白(这称为阈值化),如许就很轻易找到持续区域:

接下来,我们将应用OpenCV的findContours()函数来检测图像中包含雷同色彩持续的像素点的图像的不合部分:

然后这就变成了一个简单的问题,可以把每个区域作为一个零丁的图像文件保存。因为我们知道每个图像应当包含四个大年夜左到右的字母,所以我们可以用这些常识来标记我们保存的字母。只要我们按这个次序把它们存起来,应当就可以用精确的字母名称来保存每一个图像字母。
然则等一下——我发明问题了!有时验证码有如许重叠的字母:

这意味着我们最终会将两个字母组合成一个区域。
OpenCV

这是我摘取所有字母后的“W”文件夹的图像:
最棒的是,我们可以应用它获得生考验证码的源代码,所以这应当很轻易被打破。为了使义务更有挑衅性,我决定给本身一个时光限制。15分钟内,可否彻底破解这个验证码体系?擦亮眼睛看吧!
如不雅我们不处理这个问题,我们就会产生“很脏”(dirty)的练习数据。我们须要解决这个问题,防止机械接收练习后仍然靠命运运限辨认这两个重叠在一路的字母。
这里有一个简单的桥绫桥:如不雅一个等高线区域比它的高度宽得多,那就意味着可能有两个字母在一路被压扁了。在这种情况下,我们可以把这两个字母放在中心,把它分成两个自力的字母:

我们将把比它们高得多的区域瓜分成两半,把它算作两个字母。这里有黑客行事风格的嫌疑,然则对于验证率攀来说,它是可行的。
如今我们有了一种提取单个字母的办法,接下来在所有的验证码图像中运行这个办法。目标是收集每个字母的不合变体。我们可以把每个字母都保存在本身的文件夹里,有条不紊。

大年夜我们的10,000个验证码图像中提取的一些“W”字母。我最终获得了1,147个不合的“W”图像。
今朝记时:10分钟
建立和练习神经收集
因为我们只须要辨认单个字母和数字的图像,我们就不须要一个异常复杂的神经收集构造。辨认字母比辨认像猫和狗如许的复杂图像要轻易得多。
我们将应用一个简单的卷积神经收集构造,它有两个卷积层和两个完全连通的层:

如不雅你想知道更多关于卷积神经收集的工作道理以及为什么它们是图像识其余幻想办法,请查阅Adrian的书。
荣幸的是,我们仍然可以实现主动化。在图像处理中,我们经常须要检测具有雷同色彩的像素的“blob”。这些持续像素点的界线称为轮廓。OpenCV有一个内置的findContours()函数,我们可以用来检测这些持续区域。
定义这个神经收集体系构造只须要应用Keras的几行代码:
- # Build the neural network!
推荐阅读
跟着2017岁尾的邻近,分析师、供给商、参谋和其他更多的人正把留意力转向每年一度的典礼,猜测将来一年科技的成长。欲望你能发明我的预言更有趣一些,即使它们不完全切近事实。然则,你们知道吗,我们这>>>详细阅读
本文标题:利用机器学习破解网站验证码 只需15分钟
地址:http://www.17bianji.com/lsqh/39913.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示