基于 CNN 的验证码破解实战

在我们的实际生活中有很多的场景需要输入验证码,在工程实践中为了将数据采集、模拟登录等一系列操作行为自动化处理就需要处理好验证码的识别工作,已有的工作中基于机器学习和深度学习都有很多的工作开展出来,效果也都不错,今天本文的主要内容就是基于卷积神经网络CNN模型来构建验证码图片识别模型。


整体流程示意图如下图所示:

基于 CNN 的验证码破解实战

其中,主要的工作分为三个部分:数据采集、数据预处理和模型构建与测试。上述是之前一个实际完成的项目流程示意图,本文主要是实践基于CNN来构建识别模型,对于数据采集和预处理部分不作为讲解的内容,感兴趣可以亲身实践一下,都是图像处理领域内的比较基础的内容。

经过处理后我们将原始的验证码图片均进行了基本的去噪、二值化以及归一化等处理得到了可用于模型直接训练使用的特征向量数据,原始的验证码图像数据如下所示:

基于 CNN 的验证码破解实战

处理后生成的特征向量文件如下所示:

基于 CNN 的验证码破解实战

上图中,每一行表示一个字符子图,每一列表示字符子图的一维数据,向量的维数就是经过归一化处理后的字符子图【宽x高】的值,即:将二维的矩阵数据转化为了一维的向量数据,这一步不是必须的,只是我这里采用了这种处理方式。

生成得到原始验证码图片数据的特征向量后就可以搭建训练模型了,具体的代码实现如下所示:

默认设置了100次的迭代,不开启提前终止策略,训练完成后截图如下所示:

基于 CNN 的验证码破解实战

训练完成后就得到了离线的识别模型文件,可重复加载使用,我们在训练结束后绘制了模型的准确度和损失值对比曲线,如下所示:

基于 CNN 的验证码破解实战

基于 CNN 的验证码破解实战

从准确度和损失值对比曲线综合来看可以发现:模型在20次迭代计算后就趋近于平稳,之后保持一个比较稳定的状态。

之后对模型的识别能力进行测试分析,测试代码实现如下:

测试结果截图如下所示:

基于 CNN 的验证码破解实战

使用了200张的验证码测试集来测试模型的识别能力,最终的准确度为87%,感觉还是不错的,毕竟我只使用了不到2000的训练数据来训练CNN模型。

如果有数据集需求的可以联系我,或者是去随机生成一些验证码数据集也是可以的,一个简单的验证码数据集生成流程如下所示:

基于 CNN 的验证码破解实战


分享到:


相關文章: