使用深度学习破解点击验证码
问题描述&可行性分析
网易验证码样例如下图1所示,需要在图中顺序点击文字。
极验,腾讯等点击同样适用。
图片点选验证码_验证码接口_验证安全系统_在线体验_网易云易盾
该问题本质是图片的detection问题,是图像处理中的经典问题。使用R-cnn,Yolo,SSD等深度学习技术完全可以解决。针对这个验证码,我考虑了两种方法:
- 直接使用R-cnn,Yolo,SSD这样的模型进行端到端训练
- 使用R-cnn,Yolo,SSD先进性检测,后进行识别
最终选择了方法2,原因是:
- 端到端训练难度大
- 需要大量训练样本
最终选择Yolo作为定位网络,网络框架使用 Darknet: Open Source Neural Networks in C
训练过程
定位训练
网络准备cfg/yolo-origin.cfg
爬取验证码图片,最初爬取500张,进行极为痛苦的手工标注。因为打算只定位汉字一类,故只需要标框就可以了,darknet有提供Yolo训练代码。
在这里需要注意修改cfg/yolo-origin.cfg
中 filter=30
,classes=1
。num=5
代表每个框最多可以预测多少类,这里我没有进行修改 。
[convolutional]
size=1
stride=1
pad=1
filters=30
activation=linear
[region]
anchors = 1.3221, 1.73145, 3.19275, 4.00944, 5.05587, 8.09892, 9.47112, 4.84053, 11.2364, 10.0071
classes=1
coords=4
num=5
softmax=1
jitter=.3
rescore=1
filter计算公式如下:
(classes+ coords+ 1)* (NUM)
因为检测只有汉字1类,坐标为中心点坐标+图片宽高,共4个数,还有1个置信度,每个cell预测5个box,故最后输出 (4+1+1) * 5 = 30
可以提供通过url进行识别破解的demo(针对网易点选验证码)
训练配置cfg/yolo-origin.data
训练配置文件格式如下
backup = products/backup
classes = 1
names = names
results = products/results
train = products/trainval.txt
valid = products/test.txt
- backup 用于保存训练权重
- classes代表定位有几个类
- names代表网络前向时图片对应标签的名字,如下图中的
dog bicycle truck
。定位只需一类就写一个。
- results 代表使用
d
编辑于 2018-05-06 11:26