网页采集器的自动识别算法(机器识别验证码的问题比较好解决了,你知道吗?)

优采云 发布时间: 2022-01-13 03:07

  网页采集器的自动识别算法(机器识别验证码的问题比较好解决了,你知道吗?)

  概述

  很多开发者讨厌网站的验证码,尤其是写爬虫的程序员,而网站之所以设置验证码是为了防止机器人访问网站,造成不必要的损失。那么现在,随着机器学习技术的发展,机器识别验证码的问题得到了较好的解决。

  示例采集工具

  这里我们使用WordPress的Really Simple CAPTCHA插件生成验证码。选择这个插件的原因一是安装量大,二是它是开源的,我们可以用它来批量生成验证码图片。

  目标估计

  我们从 demo网站 中了解到,Really Simple CAPTCHA 生成一张收录 4 个数字或字母的图片。通过阅读源码,我们知道这个插件还屏蔽了O和I,两个比较容易混淆的字母,而且还说,还有32个字符,看起来是可以做到的。到目前为止花了两分钟。

  依靠

  我们将使用以下工具和库。

  创建样本集

  为了达到我们的目的,我们首先需要准备一个样本集,样本如下:

  

  使用Really Simple CAPTCHA插件源码,我们可以轻松批量生成10000张验证码图片及对应结果。我们生成它们之后,大致如下:

  

  在这里,您可以根据自己的实际情况修改Really Simple CAPTCHA插件的源代码,生成您想要的样本集。如果觉得麻烦,也可以下载我生成的好。

  到目前为止,我们已经花了五分钟。

  如何训练

  我们现在有了一个样本集,我们可以直接用图片和相应的结果训练神经网络。

  

  只要我们有足够的样本,最终就能达到我们想要的效果。

  但是我们也可以使用更好的训练方法,这种训练方法使用的样本数据较少,但是结果比直接训练方法好很多,我想你已经猜到了,这种方法是将图片中的四个字符切开形成四个样品。此方法有效,因为所有验证码图像都是 4 个字符长。

  

  用PS手动剪切1万张图片肯定是不现实的,而且因为图片横向排列不等距,字符间距不一致,手动剪切肯定是不可能的。

  

  其实我们只需要画一个矩形,保证矩形框内只有字符,然后从图片中剪下这样一个矩形,就形成了单个字符的图片样本。好在opencv已经为我们实现了这个操作。Opencv有一个函数叫findContours(),可以根据颜色值相同的区域,裁剪出我们想要的矩形。- 首先准备一张图片:

  

  - 将图片转换为黑白。这样有字符的地方是黑色的,空白处是白色的,方便opencv裁剪。

  

  - 接下来我们使用opencv的findContours函数来切割图像。

  

  接下来,我们从左到右对图片进行剪切,并存储剪切后的图片和图片对应的字符。但是在实际操作的过程中,我发现了一个问题,就是有时候两个字符靠得太近,导致opencv在切割的时候把两个字符切割器放在了一张图片中,比如:

  

  切割的效果是:

  

  如果这个问题不解决,我们的样本集就会不准确,训练出来的模型也不会正确。我的解决方案是先设置一个字符宽度最大的像素。如果超过这个像素,则认为一张图片收录两个字符,然后我们选择将图片切成两半,分成两个字符。例如:

  

  好的,我们现在得到了一张4个字符对应验证码图片的图片。现在我们已经把所有的样图都剪下来了,然后把相同字符对应的图片放到一个文件夹里。这样做的目的是尽可能多地尝试。查找同一字符的多个样式。结果如下:

  

  到目前为止,我花了 10 分钟。

  训练模型

  因为我们只识别图片对应的数字或字母,所以不需要特别复杂的神经网络算法。识别字符比识别优采云和小狗容易得多。我在这里使用卷积神经网络,两个卷积层和两个全连接层。

  

  这个地方不会详细介绍卷积神经网络算法。有兴趣的同学可以google一下。训练完成后,我们需要对其进行测试。花了15分钟。

  总结

  整个过程看起来很简单: - 使用我们上面提到的插件从 wordpress网站 下载验证码图像 - 将图像切割成收录单个字符的小图像 - 使用神经网络算法训练模型 - 预测新的字符对应到验证码图片

  下面是我的测试:

  

  代码

  您可以从这里获得完整的代码和示例图像,您可以参考 README 来运行相关程序。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线