艾伯特(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安装时下载速度不理想。
可参考以下步骤提高下载速度:
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/bb1407bfe3f2a57d94afe61c0f1f72a6.png)
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/c6de211e6eae7768da58391518d9aa98.png)
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/bad06fc9450b9b6698b5628716993019.png)
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/fdb835a675912e4d5d23f8143fa71562.png)
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/31df7d420415cad9353698ee6c56f069.png)
验证码无非就是将一些符号转为图片的形式,并在图片里加入各种干扰像素。
其作用无非是想确定用户为真人,并以此防止机器批量注册等行为。
我们今天要识别的Discuz验证码类似下图:
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/fb92319ba129b9a84572613cfc9535c1.png)
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实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/6faaf8542edc5b45a757290911efb443.png)
(3)模型参数我基本我没怎么调。
有兴趣者可微调学习率和其他网络参数来提高网络性能。网络训练参数对此模型最终好坏起决定性作用。
PS:
个人认为LeNet-5网络结构性能一般。
Why?
实验测试的时候的感觉,毕竟这个网络结构已经提出了好一段时间了。
之前看到有人用过,识别率也就90出头吧,没有仔细看他怎么训练的。
(4)标签向量化过程中,我区分了字母大小写。但一般网站是不会区分的。
因此有兴趣的同学可自行修改源代码,使得向量化过程不区分大小写,这样或许有助于提高准确率。
就这样吧!
使用演示 在cmd窗口运行 Vcode_Identify.py文件即可。先放个视频:
可视化训练过程:
安装TensorBoard模块后,在cmd窗口输入类似下图的命令:
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/4e4bb4468afb1c5462cf0ad0c63bf7de.png)
请自行事先建立这个文件夹。
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/8566c52565254f141faf61004ccc03e1.png)
视频里都有,就不截图了。
![Python+TF实现验证码识别](https://i-blog.csdnimg.cn/blog_migrate/fa4821021f7fb019bedaac057a97622c.png)
源代码在test.py文件中。
其功能为利用训练好的模型识别验证码。
由于模型惨不忍睹,这里就不贴出结果了。。
有兴趣的同学自己看吧~~~
更多 目前国内所有的大型网站都不再使用此类Discuz验证码,而是各种奇奇怪怪的。。。毕竟此类Discuz验证码实在太low了。。。
因此以后如果有需要我会尝试破解一些比较有水准的验证码,当然前提大概是我自己需要使用的时候了。