文字点选验证码再也不是难题,通过率 96% 的深度学习了解一下!
共 3299字,需浏览 7分钟
·
2020-08-17 15:16
阅读本文大概需要 3 分钟。
验证码是计算机领域发明的一大障碍,它已经成为爬虫工程师最大的拦路虎,是爬虫工程师必须要面对的一道屏障。
面对上面这种无干扰且较规整的字符型验证码,Python PIL 尚且可以一战。但如果是下面这样带干扰的呢?
不要以为简单的灰度、二值化就能够解决问题。验证码的形态多变,仅仅是字符型验证码都能玩出多种花样:
面对这种花里胡哨的验证码,Python PIL 也只能一声叹息了。何况后续还出现了行为验证码(滑动验证码、滑动拼图验证码、文字点选验证码、图标点选验证码、空间验证码等等):
这就相当为难人了。好在后来近年来深度学习和计算机视觉技术飞速发展,我们可以利用深度学习来识别上面列举的验证码。网上关于深度学习识别验证码的文章不少,相信大家或多或少的见过,效果确实很好。但当你将它应用到实际工作中的时候,你就会遇到新的问题:
1.哎!这验证码的长度怎么不一样的,一下 4 位一下 6 位?2.哎!这训练好的模型识别率怎么就变低了呢?3.哎!图片上要点击的文字怎么定位呢?4.哎!定位完了之后怎么确定哪个字对应哪个位置啊?5.哎!模型训练我会了,训练完怎么做成接口拿来调用呢?6.哎!可不可以边识别边训练啊?
这些问题一下就给你整懵了:“原来学习实验和企业应用还差这么远啊!”。
可能你还不知道,企业中使用的验证码识别服务准确率下限要求是 80%,一些追求技术的企业要求会更高。现如今,爬虫工程师招聘看重的是逆向能力和单点技术高度。
•如果你逆向能力不强,但单点技术实力接近行业上限,那么工资也不会低;•如果你逆向能力强,单点技术实力也强,那你就拥有了选择的主动权;
这里的单点技术指的是验证码识别技术,当然也可以是性能优化或者数据流处理能力。一个中型(10 人)爬虫团队每年消耗在 ip 代理和验证码识别服务上的经费基本在 25 万左右(价格跟业务强相关),如果你的技术能够为团队节省 10 万的开销,你说不招你招谁呢?
你看这些爬虫工程师的招聘要求,验证码真是不可缺少的一种“保命技能”。
在线案例
学完这个专栏后,你将掌握定长和不定长字符型验证码的识别方法、掌握行为验证码中点选验证码的文字定位与识别方法,同时学会将训练模型转换为 API 接口以提供服务能力。
有学员学完之后制作了点选验证码的 API 服务,你可以在线上进行调用。调用代码如下:
import base64
import requests
with open(r"1.jpg", "rb") as f:
img_bytes = f.read()
r = requests.post("http://152.136.181.66:19196/predict", json={
"image": base64.b64encode(img_bytes).decode(),
"title_coord": [0, 344, 120, 384]
})
print(r.text)
这里用到的 1.jpg
如下所示:
程序运行结果为如下所示
识别性能很高,一张图的识别从请求发起至拿到响应基本在 300 毫秒左右,如果追求速度还可以采用异步网络,完全能够胜任工作需求。
接口 Demo 预计保留 30 天,感兴趣的朋友可以用文章中给出的几张样本试试。
⚠️ Demo 用到的模型只针对这类图片进行训练,其他与之差异较大的图片由于未训练可能会识别不准。识别率高且覆盖范围广的前提是有足够的样本做针对训练。
视频内容制作人
冷月,现就读于美国计算机科学专业 Rank 排行榜前 15 的大学。曾分享大量主流验证码 JavaScript 加密, 分析思路, 涉及 行为验证、无感验证、轨迹检测、设备指纹、控制流平坦化、自更新算法等。
冷月是国内为数不多的 JS 逆向大成者,技术能力当属第一梯队,年纪轻轻(18 岁)便将自己的昵称变成了众多爬虫工程师奋斗的目标。这次开办验证码识别课的主要目的是希望通过技术分享提高大家在图像识别和验证码识别方面的能力,推动爬虫相关技术进步。他在接下来还将会为大家带来行为生成相关课程, 实现用深度学习生成行为数据。
学习收获
如何准备训练素材;
固定长度的验证码识别;
不固定长度的验证码识别;
深度学习中 CenterNet 网络的原理;
点选验证码目标文字位置识别;
将训练模型转化为 API 接口并部署到服务器;
课程涉及的代码、Markdown 等教材都将发放给学员(学员加入 GitHub 仓库),同时冷月在课程群(加入 GitHub 仓库之后见 README 获取)内为学员答疑解惑,帮助你掌握验证码识别方面的技术难点和实际应用中遇到的问题。
这里只给出点选验证的 Demo,不定长字符型验证码的 Demo 没有提供。Demo 应该会存活 30 天,但也有可能提前关闭。
课程大纲
实战:小试牛刀,从 MNIST 开始体验深度学习中的手写体文字识别;
理论:磨刀霍霍,数据预处理和加载;
实战:全军出击,基于全连接的固定长度验证码识别;
实战:乘胜追击,基于 LSTM & CTC 的不固定长度验证码识别;(整体准确率 99%)
理论:知己知彼,CenterNet 网络基础和定位原理;
实战:十拿九稳,基于 CenterNet 的点选验证码目标文字位置识别;(整体准确率 96%)
实战:将训练模型转换为 API 接口;
实战:将 API 接口部署到服务器;
课程播放地址和价格
课程在冷月自己写的网站上播放,https://tutorial.lengyue.video/ (点击阅读原文可前往试听)。1080P 视频,画面清晰、代码清晰。课程已录制完毕,随时可看,无需等待!
具体课程大纲内容如下图所示。
这是能够直接解决工作需求的一套课程,如果按项目源码卖的话大概是一千左右,这个课程的定价也是 999。「进击的Coder」在这里为大家争取到了 150 块钱的优惠,实打实的 150 块。现在从原文链接前往购买只需要 850 元,你就能获得准确率 96% (文字点选验证码)和准确率 99% (不定长字符验证码)的代码编写能力。
在公司团队中拥有一手绝杀技,它不香吗?升职加薪靠它了。
课程前置知识要求
这次课并不是完全零基础的,需要学员具备基本的深度学习概念、一些基本的理论知识和 Python 编程知识(这就想你学爬虫之前要会一点编程一样)。如果你知道什么是深度学习,听说过深度学习网络和模型,再看看莫烦 https://morvanzhou.github.io/tutorials/machine-learning/torch/1-1-A-ANN-and-NN/ 的深度学习公开课,那就可以了。
另外还有 PyTocrh 的各种教程,在这里贴几个参考链接供大家学习:
http://pytorch123.com/
https://pytorch.apachecn.org/docs/1.4/
https://pytorch.org/docs
课程辅导
课程有单独准备的 QQ 交流群(购买课程加入 GitHub 仓库之后在 README 中可以获取),大家可以在里面讨论和提问。除了冷月外,著名的黄瓜也在群里为大家答疑解惑,鱼导也在呢。
另外,黄瓜会不定期为大家提供各种网站的训练样本(样本数量每份几千到几万不等),样本通常来自工作需求的网站,比如什么盾、什么验、什么讯、什么浪之类的。
另外不定期会提供其他类型的验证码识别库源码和样本哦!
课程链接
最后就是课程的优惠购买链接了,大家可以直接戳「阅读原文」直达。
这里“阅读原文”,直达课程