下面我们应用 OpenCV 的 findContours() 函数以检测包含持续雷同像素块的分别部分:
Keras
随后将每个区域保存为一个零丁的图像文件就异常简单了,并且我们也知道每张图像大年夜左到右有四个字符,是以我们可以在保存的时刻应用这种常识标注各个字符。我们只须要按次序保存它们,并将每一张图像保存为对应的字符名。
然则还有一个问题,有些 CAPTCHA 图像包含重叠的字符:
这就意味着我们很可能会将两个字符采取为一个瓜分区域:
如不雅我们不解决这个问题,那么我们最后就会创建一个异常糟糕的练习集。我们须要解决这个问题,以免模型会将两个重叠的字符辨认为一个。
么很有可能章一?切分内就包含了两个字符。是以我们可以将这种连体的字符拆分为两半,并将它们视为零丁的字符。
我们将宽度大年夜于高度必定命值的图像拆分为两个数值,固然这种办法异常简单,但在 CAPTCHA 上却十分有效。
上图展示了字符「W」的采取情况,我们最后大年夜 1 万张 CAPTCHA 图像中获取了 1147 张不合的「W」。处理完这些图像后,我们总共大年夜约花了 10 分钟。
重点在于,这里有它的源代码!有了生成 CAPTCHA 图片的源代码,我们就可以轻松破解验证码了。在这里,为了让义务更具挑衅性,我们先给本身添加一点限制:我们能不克不及在 15 分钟内破解它?Let's try it!
构建并练习神经收集
因为我们一次只须要辨认单个字符,所以并不须要一个复杂的神经收集架构,且辨认这种字母与数字的义务要比其它辨认复杂图像的义务简单地多。是以我们应用了一个简单的卷积神经收集,它一共包含两个卷积层与两个全连接层。
如不雅我们应用的是 Keras,那么只须要几行代码就能构建一个神经收集架构:
- # Build the neural network!
- model = Sequential()
- # First convolutional layer with max pooling
- model.add(Conv2D(20, (5, 5), padding="same", input_shape=(20, 20, 1), activation="relu"))
- model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
- # Second convolutional layer with max pooling
- model.add(Conv2D(50, (5, 5), padding="same", activation="relu"))
- model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
- # Hidden layer with 500 nodes
- model.add(Flatten())
- model.
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 此刻,或许要脑补很多画面,但我们今天抛开社会舆论和>>>详细阅读
本文标题:仅需15分钟,使用OpenCV+Keras轻松破解验证码
地址:http://www.17bianji.com/lsqh/39801.html
1/2 1