Python+TF实现验证码识别

本文介绍如何利用Python、TensorFlow-GPU和相关模块实现Discuz验证码的识别。通过数据预处理、构建基于LeNet-5改编的网络模型、使用TensorBoard进行可视化训练,以及模型应用示例,详细阐述了整个识别过程。尽管提供的模型准确率约为30%,作者建议通过调整参数以提高性能。
摘要由CSDN通过智能技术生成
导语

利用 Python+TensorFlow训练简单的验证码识别模型。。。

艾伯特(http://www.aibbt.com/)国内第一家人工智能门户

要识别的验证码为最简单的Discuz验证码。。。

当然直接使用Tesseract这些第三方库也可以做到识别这些简单的验证码,准确率也还过得去。。。

但是你真的甘心稀里糊涂地用现成的库嘛?

一波毒鸡汤之后。。。

进入正题hhhhh~~~

 

开发工具

Python版本:3.5.4

相关模块:

cv2模块;

matplotlib模块;

numpy模块;

tensorflow-gpu模块;

TensorBoard模块;

win_unicode_console模块;

以及一些Python自带的模块。

其中TensorFlow-GPU版本为:

1.6.0

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

TensorFlow-GPU的环境配置请自行参考相关的网络教程!(T_T自己写一遍教程太麻烦了)

补充说明:

若pip安装时下载速度不理想。

可参考以下步骤提高下载速度:

(1)在cmd窗口输入:echo %APPDATA%

Python+TF实现验证码识别 (2)进入显示的路径

Python+TF实现验证码识别 (3)在该路径下新建一个pip文件夹

Python+TF实现验证码识别 (4)在该文件夹内创建pip.ini文件,写入内容为:

Python+TF实现验证码识别 当然你也可以使用其他pip源:

Python+TF实现验证码识别 原理简介

(1)验证码

验证码无非就是将一些符号转为图片的形式,并在图片里加入各种干扰像素。

其作用无非是想确定用户为真人,并以此防止机器批量注册等行为。

我们今天要识别的Discuz验证码类似下图:

Python+TF实现验证码识别 (2)主要实现过程

Step1:

数据预处理,主要包括数据读取、标签向量化。

Step2:

搭建网络模型,模型结构为:3卷积层+1全连接层。

网络结构基于LeNet-5改编。

提出LeNet-5的论文为(简书和CSDN上都有人对该网络结构做了详细介绍,有兴趣者请自行检索):

Gradient-Based Learning Applied to Document Recognition

Step3:

数据的可视化训练,主要使用了TensorBoard模块。

Step4:

模型使用方式的简单举例。

具体实现过程详见相关文件中的源代码。

额外说明

(1)由于时间和设备限制,本人训练的模型 完全没有实用价值,仅作为教学示范使用

T_T不在家不能用家里的台式机跑。

PS

真的没骗你们。。。

相关文件中模型的准确率只有30%左右。

我只训练几轮,而且只用了200个验证码。

所以真的别傻傻地拿去用。。。

截图为证:

Python+TF实现验证码识别(2)相关文件中我提供了 6万张验证码图片提有需要者作为训练样本。

(3)模型参数我基本我没怎么调。

有兴趣者可微调学习率和其他网络参数来提高网络性能。网络训练参数对此模型最终好坏起决定性作用。

PS:

个人认为LeNet-5网络结构性能一般。

Why?

实验测试的时候的感觉,毕竟这个网络结构已经提出了好一段时间了。

之前看到有人用过,识别率也就90出头吧,没有仔细看他怎么训练的。

(4)标签向量化过程中,我区分了字母大小写。但一般网站是不会区分的。

因此有兴趣的同学可自行修改源代码,使得向量化过程不区分大小写,这样或许有助于提高准确率。

就这样吧!

使用演示

在cmd窗口运行 Vcode_Identify.py文件即可。

先放个视频

可视化训练过程:

安装TensorBoard模块后,在cmd窗口输入类似下图的命令:

Python+TF实现验证码识别 G:/Log为信息保存的位置。需与源代码46行相同。

请自行事先建立这个文件夹。

Python+TF实现验证码识别在浏览器中访问运行后显示的地址即可。

视频里都有,就不截图了。

Python+TF实现验证码识别 模型使用方法简单举例:

源代码在test.py文件中。

其功能为利用训练好的模型识别验证码。

由于模型惨不忍睹,这里就不贴出结果了。。

有兴趣的同学自己看吧~~~

更多

目前国内所有的大型网站都不再使用此类Discuz验证码,而是各种奇奇怪怪的。。。

毕竟此类Discuz验证码实在太low了。。。

因此以后如果有需要我会尝试破解一些比较有水准的验证码,当然前提大概是我自己需要使用的时候了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
验证码识别问题可以使用神经网络进行解决。下面是一个基于 TensorFlow 框架的 Python 代码示例,用于训练和测试一个基本的神经网络模型来识别验证码: ```python import tensorflow as tf import numpy as np # 加载数据集 data = np.load('data.npy') labels = np.load('labels.npy') # 训练集和测试集的划分比例 split_ratio = 0.8 split_index = int(len(data) * split_ratio) # 训练集和测试集 train_data, train_labels = data[:split_index], labels[:split_index] test_data, test_labels = data[split_index:], labels[split_index:] # 构建神经网络 model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10) ]) # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 训练模型 model.fit(train_data, train_labels, epochs=10) # 测试模型 test_loss, test_acc = model.evaluate(test_data, test_labels, verbose=2) print('\nTest accuracy:', test_acc) # 保存模型 model.save('captcha_model') ``` 在上面的代码中,首先加载了训练数据和标签,然后将数据集划分为训练集和测试集。接着,通过 `tf.keras.Sequential` 构建了一个包含一个输入层、一个隐藏层和一个输出层的神经网络模型。然后,使用 `compile` 函数对模型进行编译,并使用 `fit` 函数训练模型。最后,使用 `evaluate` 函数测试模型,并保存训练好的模型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值