QQ泡沫乐园 · 免费提供游戏辅助,破解软件,活动资讯,喜欢记得收藏哦!
综合软件_线报活动_游戏辅助_最新电影_最优质的的辅助分享平台

验证码训练数据获取新方法和基于卷积神经网络的无字符切割的识别算法

泡沫乐园 2022-05-10 11:14

本文讨论了基于卷积神经网络的验证码识别问题。提出了一种基于卷积神经网络的CAPTCHA训练数据捕获新方法和不切字识别算法。讨论了损失函数、Metrics函数的选择以及网络参数选择的方向。

训练数据的生成

直觉上,我们应该从网站上抓取验证码并标记它,然后使用这些数据进行训练。但是这样做可能会出现一些问题:

用于训练的图片往往需要在几万甚至几十万的数量级,要抓到这么多图片又不被网站扣分可能并不容易。假设网站可以容忍一个IP在一秒内抓取一张验证码图片,那么一天只能抓取8万张图片。如果您在此期间受到网站的处罚,收集这些图像将需要更长的时间。

二是图像标注问题。假设你要收集 500,000 张图片,手动识别并一一标注。假设以验证码文本作为文件名完成注解,在Windows上完成这样的操作可能需要5秒。这样一来,标注全部50万张图片需要29天(按24小时计算易语言过验证码,不是8小时作为工作时间计算)。当然,我们可以使用一些脚本来加速这个操作。比如先把50万张图片按照1到50万的数字命名,然后分成几个文件夹(减少错误,方便校对;另外,出于性能考虑,一个文件夹不宜存放太多文件。) ,然后在资源管理器中以缩略图的形式依次显示这些图片。人工识别后,将验证码文件写入文本文件,每行一个,然后使用脚本将这个一个一个读取,存储大量验证码。, 并将原来以数字命名的验证码文件一一重命名。尽管如此,即使验证码只有4位数字和英文字母,输入一次也需要2~3秒左右。以这种方式标注 500,000 张图像仍然需要将近 15 天的时间。

这只是完成一个网站验证码注释的时间和资源成本。

考虑到 CAPTCHA 识别不是一个值得大量投资的话题,投入如此多的资源来收集训练数据很可能并不经济。因此,我们必须想出更好的方法。

事实上,大多数网站都使用开源框架来生成验证码。虽然这样的开源框架很多,但是生成验证码的套路大同小异,只是参数不同造成的一些视觉差异。如果我们的神经网络模型具有足够的泛化能力,那么这些参数的变化应该是可以容忍的。这样易语言过验证码,我们的思路就变成了,参考开源框架的实现,生成类似网站的验证码进行训练,更好的解决了训练数据问题。

Github上有很多开源的验证码生成框架,其中PHP语言最多:

下面是常用的验证码:

可以看出,它的产生具有以下特点:

字符颜色变化 背景颜色变化和阴影变化 插入干涉线和干涉点 整个画面已经变形

根据以上特点,我们使用python实现了一个简单的验证码。主要由两个文件组成,一个是vocab.py,用于管理验证码的词汇;另一个是captcha.py,用于实际生成验证码图片。

# vocab.py

pascal语言是过程式语言吗_易语言过验证码_易游单码验证破解

词汇管理模块除了生成随机字符串外,还提供编码转换功能,后续训练需要用到。

现在看看 captcha.py:

# PIL是一个常用的python图像库。在python 3.5中, 应该使用pip install pillow来安装

此代码由两个类组成。Captcha 基类提供了一个简单的默认实现,其派生类可以修改和添加一些行为(例如添加噪音)以适应不同的网站验证码需求。

代码先画背景,这里我们简单画一个白色的背景。然后画出文字。请注意,没有为不同的字符选择不同的颜色。接下来画出干涉线和干涉点。最后,对图像进行变形,并通过滤波器进行边缘增强。

为了完整起见,这里简单介绍一下从网站抓取验证码图片的技术问题。

网站验证码抓取

推荐使用 scrapy 工具包。该工具包具有先进的多线程管理、调度功能、限流机制和易于使用的调试工具。在 Github 上获得 18k 颗星。

具体用法请参考这里

以数据uri格式发送的验证码

一些网站在通过验证码时使用数据uri而不是单独的图像文件来传输验证码。这样做的好处是验证码图像通常很小并且(可能)不值得单独使用 HTTP 请求。另一方面,验证码一般是一次生成一个,以后不需要保存。如果生成了图片文件,必然会保存到磁盘,并为它生成一个URL,这也是不必要的。

以下代码以今日头条的登录验证码为例,展示了如何从数据uri中恢复图片:

from