Python+TF实现验证码识别
2018-03-06 13:36
281 查看
导语利用Python+TensorFlow训练简单的验证码识别模型。。。
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7LUovBOFXEuwXU4icmKYibCn5TeFeEQeh6OptU1L2d7Yg0QEHTI77icPtQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
(2)进入显示的路径
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7q7KiaGsO8qyhaPWmb1clhw0e7CiaIoic0ggf7rQtATOI4nhDTeUOXBiaXg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
(3)在该路径下新建一个pip文件夹
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7EXV22WdRuncC5xibjMMHNPlZE7YmnfU7N9M4yicCPKqkn2k0cGYfxbicw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
(4)在该文件夹内创建pip.ini文件,写入内容为:
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF75yzJk6zyE38icrttd63I6zGCTPMzeWmVPx0tM0guDUExyOtTCWK1jrQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
当然你也可以使用其他pip源:
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7Ud2GkurMs0OJ9IRicUvUHA0JODyse6AGicvB4ocE9SyF2dSVic8ibN7EibA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
原理简介(1)验证码验证码无非就是将一些符号转为图片的形式,并在图片里加入各种干扰像素。其作用无非是想确定用户为真人,并以此防止机器批量注册等行为。我们今天要识别的Discuz验证码类似下图:
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7YHibrMHVOCo51XBxQchAx4XDnv7v7Ybq3vOp32PUZuOeLK4WsAMczIA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
(2)主要实现过程Step1:数据预处理,主要包括数据读取、标签向量化。Step2:搭建网络模型,模型结构为:3卷积层+1全连接层。网络结构基于LeNet-5改编。提出LeNet-5的论文为(简书和CSDN上都有人对该网络结构做了详细介绍,有兴趣者请自行检索):Gradient-Based Learning Applied to Document RecognitionStep3:数据的可视化训练,主要使用了TensorBoard模块。Step4:模型使用方式的简单举例。具体实现过程详见相关文件中的源代码。额外说明(1)由于时间和设备限制,本人训练的模型完全没有实用价值,仅作为教学示范使用。T_T不在家不能用家里的台式机跑。PS:真的没骗你们。。。相关文件中模型的准确率只有30%左右。我只训练几轮,而且只用了200个验证码。所以真的别傻傻地拿去用。。。截图为证:
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF76Le4giazI93ucmib3uicpiaGBpiblL9OkFlZAHkDs9ZI59MzSDFTp3boa5A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
(2)相关文件中我提供了6万张验证码图片提有需要者作为训练样本。(3)模型参数我基本我没怎么调。有兴趣者可微调学习率和其他网络参数来提高网络性能。网络训练参数对此模型最终好坏起决定性作用。PS:个人认为LeNet-5网络结构性能一般。Why?实验测试的时候的感觉,毕竟这个网络结构已经提出了好一段时间了。之前看到有人用过,识别率也就90出头吧,没有仔细看他怎么训练的。(4)标签向量化过程中,我区分了字母大小写。但一般网站是不会区分的。因此有兴趣的同学可自行修改源代码,使得向量化过程不区分大小写,这样或许有助于提高准确率。就这样吧!使用演示在cmd窗口运行Vcode_Identify.py文件即可。先放个视频:可视化训练过程:安装TensorBoard模块后,在cmd窗口输入类似下图的命令:
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7czCEmp2niabGyoicb3ZM3U0ewMelDTxxTgTicJE9qPhdcDyOSUhwyklYg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
G:/Log为信息保存的位置。需与源代码46行相同。请自行事先建立这个文件夹。
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF74miaLnx1QJc7NYfvvmBCLCicicOn7oxK6gN2JjCrUoZQINUZ2MNdQvTnw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
在浏览器中访问运行后显示的地址即可。视频里都有,就不截图了。
![](https://mmbiz.qpic.cn/mmbiz_png/zZTbkic2pYRqKMUibQTHRSKSdqWAUgbxF7xJWLkSKJG3ZwjIiaLnYuWgqosHzCYibzN8Z3aFD5Pv1ibEkMnOHqoZBKA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)
模型使用方法简单举例:源代码在test.py文件中。其功能为利用训练好的模型识别验证码。由于模型惨不忍睹,这里就不贴出结果了。。有兴趣的同学自己看吧~~~更多目前国内所有的大型网站都不再使用此类Discuz验证码,而是各种奇奇怪怪的。。。毕竟此类Discuz验证码实在太low了。。。因此以后如果有需要我会尝试破解一些比较有水准的验证码,当然前提大概是我自己需要使用的时候了。
艾伯特(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%(2)进入显示的路径
(3)在该路径下新建一个pip文件夹
(4)在该文件夹内创建pip.ini文件,写入内容为:
当然你也可以使用其他pip源:
原理简介(1)验证码验证码无非就是将一些符号转为图片的形式,并在图片里加入各种干扰像素。其作用无非是想确定用户为真人,并以此防止机器批量注册等行为。我们今天要识别的Discuz验证码类似下图:
(2)主要实现过程Step1:数据预处理,主要包括数据读取、标签向量化。Step2:搭建网络模型,模型结构为:3卷积层+1全连接层。网络结构基于LeNet-5改编。提出LeNet-5的论文为(简书和CSDN上都有人对该网络结构做了详细介绍,有兴趣者请自行检索):Gradient-Based Learning Applied to Document RecognitionStep3:数据的可视化训练,主要使用了TensorBoard模块。Step4:模型使用方式的简单举例。具体实现过程详见相关文件中的源代码。额外说明(1)由于时间和设备限制,本人训练的模型完全没有实用价值,仅作为教学示范使用。T_T不在家不能用家里的台式机跑。PS:真的没骗你们。。。相关文件中模型的准确率只有30%左右。我只训练几轮,而且只用了200个验证码。所以真的别傻傻地拿去用。。。截图为证:
(2)相关文件中我提供了6万张验证码图片提有需要者作为训练样本。(3)模型参数我基本我没怎么调。有兴趣者可微调学习率和其他网络参数来提高网络性能。网络训练参数对此模型最终好坏起决定性作用。PS:个人认为LeNet-5网络结构性能一般。Why?实验测试的时候的感觉,毕竟这个网络结构已经提出了好一段时间了。之前看到有人用过,识别率也就90出头吧,没有仔细看他怎么训练的。(4)标签向量化过程中,我区分了字母大小写。但一般网站是不会区分的。因此有兴趣的同学可自行修改源代码,使得向量化过程不区分大小写,这样或许有助于提高准确率。就这样吧!使用演示在cmd窗口运行Vcode_Identify.py文件即可。先放个视频:可视化训练过程:安装TensorBoard模块后,在cmd窗口输入类似下图的命令:
G:/Log为信息保存的位置。需与源代码46行相同。请自行事先建立这个文件夹。
在浏览器中访问运行后显示的地址即可。视频里都有,就不截图了。
模型使用方法简单举例:源代码在test.py文件中。其功能为利用训练好的模型识别验证码。由于模型惨不忍睹,这里就不贴出结果了。。有兴趣的同学自己看吧~~~更多目前国内所有的大型网站都不再使用此类Discuz验证码,而是各种奇奇怪怪的。。。毕竟此类Discuz验证码实在太low了。。。因此以后如果有需要我会尝试破解一些比较有水准的验证码,当然前提大概是我自己需要使用的时候了。
相关文章推荐
- tf–idf算法解释及其python代码实现(上)
- TF-IDF算法解析与Python实现方法详解
- python实现TF-IDF算法
- TF-IDF算法解析与Python实现
- TF-IDF算法(2)—python实现
- python 利用sklearn自带的模块 快速简单实现文章的 tfidf向量空间的表示
- 【Natural Language Processing】TF-IDF及其Python实现
- Python用 KNN 进行验证码识别的实现方法
- 分享自用小工具:TF-IDF计算文档相似性的python实现
- Tf-Idf的python实现
- TF-IDF学习(python实现)
- Python实现文本型数据的向量化:TF-IDF
- python实现TF-IDF算法解析
- 文章的 tfidf原理的python实现
- TF-IDF算法-Python实现(附源代码)
- TF-IDF算法解析与Python实现
- python脚本实现验证码识别
- TF-IDF算法-Python实现(附源代码)
- TF-IDF算法-Python实现(附源代码)
- tf–idf算法解释及其python代码实现(下)