TensorFlow识别知乎验证码
最近在爬知乎的数据,遇到了验证码,就使用TensorFlow的CNN训练了一个能自动识别验证码的模型,最后识别线上验证码的准确率在95%左右。
依赖库Python3requestsPIL & numpyT
识别知乎验证码 最近在爬知乎的数据,遇到了验证码,就使用TensorFlow的CNN训练了一个能自动识别验证码的模型,最后识别线上验证码的准确率在95%左右。 依赖库Python3requestsPIL & numpyTensorFlowCNN分析 做爬虫请求知乎接口频繁时,会遇到两种验证码:细字体和粗字体。 如果把两种验证码混合放到同一个神经网络中训练的话,收敛会比较慢,需要的样本量就比较大,如果手上样本量不够多,我们可以先训练一个分类器asp验证码,将两种验证码区分开,再分别去训练识别,这样需要的样本量就会少很多而且每个分类准确率都能得到保证! 最开始我样本量不够时就是是按照上面的做法实现的,现在样本足够了就可以把两种验证码在样本混合起来直接丢到CNN里训练就好了,最后也达到不错的准确率! 代码链接在文末。 如何运行 把你的验证码样本放到samples目录下的train_mixed_captcha_base64.txt文件中。训练模型:运行train目录下的model.py文件,直到达到你满意的准确率为止。这时训练好的网络结构和权重值会保存在checkpoints目录下。 恢复上一步训练好的网络模型,导出predict_captcha预测函数。传入base64编码的图片字符串,执行predict_captcha函数,得到预测结果。Boom!想干嘛你就可以干嘛了!CNN 代码中的模型使用TensorFlow构建了一个简单的卷积神经网络。 包含:一个输入层、三个卷积层+池化层和最后一个全连接层。 至于网络模型为什么是这种结构,因为:前人根据经验总结出来这种结构训练的效果会比较好。 当然你也可以尝试其他的结构,只要效果好就行了。我们都是黑盒调参的。 使用TensorBoard可以可视化训练的关情况。 给大家看一下我训练的网络结构: 网络结构 准确率走势图: 准确率曲线 loss曲线: loss曲线 最后,使用训练好的模型Cover到知乎线上的验证码平均识别准确率在95%左右,也就是两次至少命中一次的概率为:1 - 0.05*0.05 = 99.75%,够我用啦然后……你懂的! 源码地址:github.com/lonnyzhang423/zhihu-captcha UPDATE 知乎最近升级了验证码服务,换成腾讯的滑块验证码,这个没用啦 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |