Python+TF实现验证码识别导语
利⽤ +TensorFlow训练简单的验证码识别模型。。。
艾伯特()国内第⼀家⼈⼯智能门户
要识别的验证码为最简单的Discuz验证码。。。
当然直接使⽤Tesseract这些第三⽅库也可以做到识别这些简单的验证码,准确率也还过得去。。。
但是你真的⽢⼼稀⾥糊涂地⽤现成的库嘛?
⼀波毒鸡汤之后。。。
进⼊正题hhhhh~~~
开发⼯具
版本:3.5.4
相关模块:
cv2模块;
matplotlib模块;
numpy模块;
-gpu模块;
TensorBoard模块;
win_unicode_console模块;
以及⼀些Python⾃带的模块。
其中TensorFlow-GPU版本为:
1.6.0
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
TensorFlow-GPU的环境配置请⾃⾏参考相关的⽹络!(T_T⾃⼰写⼀遍教程太⿇烦了)
补充说明:
若pip安装时下载速度不理想。
可参考以下步骤提⾼下载速度:
(1)在cmd窗⼝输⼊: %DATA%
(2)进⼊显⽰的路径
(3)在该路径下新建⼀个pip⽂件夹
(4)在该⽂件夹内创建pip.ini⽂件,写⼊内容为:
当然你也可以使⽤其他pip源:
原理简介
(1)验证码
验证码⽆⾮就是将⼀些符号转为图⽚的形式,并在图⽚⾥加⼊各种⼲扰像素。
其作⽤⽆⾮是想确定⽤户为真⼈,并以此防⽌批量注册等⾏为。
我们今天要识别的Discuz验证码类似下图:
(2)主要实现过程
Step1:
数据预处理,主要包括数据读取、标签向量化。
Step2:
搭建⽹络模型,模型结构为:3卷积层+1全连接层。
python怎么读取py文件⽹络结构基于LeNet-5改编。
提出LeNet-5的论⽂为(简书和CSDN上都有⼈对该⽹络结构做了详细介绍,有兴趣者请⾃⾏检索):Gradient-Based Learning Applied to Document Recognition
Step3:
数据的可视化训练,主要使⽤了TensorBoard模块。
Step4:
模型使⽤⽅式的简单举例。
具体实现过程详见相关⽂件中的源代码。
额外说明
(1)由于时间和设备限制,本⼈训练的模型 完全没有实⽤价值,仅作为⽰范使⽤。
T_T不在家不能⽤家⾥的台式机跑。
:
真的没骗你们。。。
相关⽂件中模型的准确率只有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了。。。
因此以后如果有需要我会尝试破解⼀些⽐较有⽔准的验证码,当然前提⼤概是我⾃⼰需要使⽤的时候了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论