使用深度学习破解点击验证码

使用深度学习破解点击验证码

问题描述&可行性分析

网易验证码样例如下图1所示,需要在图中顺序点击文字。

极验,腾讯等点击同样适用。

图片点选验证码_验证码接口_验证安全系统_在线体验_网易云易盾


图1

该问题本质是图片的detection问题,是图像处理中的经典问题。使用R-cnn,Yolo,SSD等深度学习技术完全可以解决。针对这个验证码,我考虑了两种方法:

  1. 直接使用R-cnn,Yolo,SSD这样的模型进行端到端训练
  2. 使用R-cnn,Yolo,SSD先进性检测,后进行识别

最终选择了方法2,原因是:

  1. 端到端训练难度大
  2. 需要大量训练样本

最终选择Yolo作为定位网络,网络框架使用 Darknet: Open Source Neural Networks in C

训练过程

定位训练

网络准备cfg/yolo-origin.cfg

爬取验证码图片,最初爬取500张,进行极为痛苦的手工标注。因为打算只定位汉字一类,故只需要标框就可以了,darknet有提供Yolo训练代码。

在这里需要注意修改cfg/yolo-origin.cfgfilter=30classes=1num=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