发明内容
本发明的目的在于提供一种识别通过率高、通过率稳定性强的滑块缺口定位及拖动轨迹生成方法。
实现本发明目的的技术解决方案为:一种滑块验证码的滑块缺口定位及拖动轨迹生成方法,包括线下模型训练和线上模型服务两部分,其中:
所述线下模型训练包括:
滑块缺口位置定位建模与线下模型训练:构建基于深度学习的目标检测模型,根据滑块缺口背景图片计算滑块缺口中心位置坐标,并标注矩形标注框,进行有监督的目标检测模型训练;
滑块拖动轨迹建模与线下模型训练:根据真人滑块拖动轨迹,建立LSTM前端模型,以及适应非均匀采样输入时序和可变长时序数据的LSTM后端回归模型,对建立的LSTM前端模型、LSTM后端回归模型进行训练;
所述线上模型服务包括以下步骤:
对屏幕进行截图,处理截图得到含有滑块图片和滑块缺口背景图片;
以滑块缺口背景图片为输入,执行已训练好的目标检测模型,得到滑块缺口中心位置坐标;结合滑块初始位置,计算得到滑块位移距离;
执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹时间序列即鼠标移动轨迹序列。
在其中一个实施例中,上述滑块缺口位置定位建模与线下模型训练,具体如下:
构建基于深度学习的目标检测模型,截取滑块缺口背景图片分别进行通用性图像处理和针对性图像处理;通用性图像处理包括缩放图片至固定大小、像素值均衡化操作,通用性图像处理结果用于深度学习目标检测模型的输入;针对性图像处理用于有监督学习的数据自动标注,根据针对性图像处理结果,计算滑块缺口中心位置坐标,并自动识别和标注矩形框,即为目标检测模型提供有监督的标签,从而进行无需人工数据标注的有监督的目标检测模型训练;最终,训练完成的目标检测模型用于输出滑块缺口位置的定位矩形框坐标,以及矩形框的中心坐标即滑块缺口中心位置坐标。
在其中一个实施例中,上述滑块拖动轨迹建模与线下模型训练,具体如下:
录取真人滑块拖动轨迹,并对滑块轨迹进行预处理:从录制的滑块轨迹中提取滑块点击、拖动和释放过程,并将数据格式转化为csv文本文件;将滑块移动绝对坐标转换成滑块移动相对坐标,第一个点的坐标为(0,0);将时间采样由系统绝对时钟周期转换成毫秒,第一个点的采样时间点为0毫秒;统计数据集滑块位移最大值和耗时最大值,并进行数据归一化;
建立LSTM前端模型,学习滑块轨迹总位移与轨迹总耗时的关联关系特征,以及滑块轨迹的不均匀时间采样序列特征;
建立改进的LSTM后端回归模型,以适应非均匀采样输入时序和可变长时序数据;
对建立的LSTM前端模型、LSTM后端回归模型进行训练,用于生成滑块拖动轨迹时间序列。
在其中一个实施例中,上述截取滑块缺口背景图片分别进行通用性图像处理和针对性图像处理,其中:
所述通用性图像处理,包括对滑块缺口背景图片进行单色灰度图转换、直方图均衡处理,并进行归一化使图像像素在[0,1]区间内;
所述针对性图像处理,包括对滑块缺口背景图片进行单色灰度图转换、ROI限制、二值化处理,采用一阶图像梯度计算,然后利用边缘白色连续像素点连续性、以及该白色连续像素点坐标位置的统计中位数计算,得到滑块缺口中心位置坐标,进而在滑块缺口位置标注矩形标注框,即为目标检测模型提供有监督的标签。
在其中一个实施例中,上述根据针对性图像处理结果,计算滑块缺口中心位置坐标,具体如下:
(1)滑块图片特征使用RGBA的A信道,对该信道进行二值化得到滑块覆盖的像素点位,剔除其他像素得到滑块模板;
(2)将滑块缺口背景图片转换成int16格式,然后对水平和垂直方向分别进行差分计算,将负值赋值为0,然后将水平和垂直计算结果按照原图像大小叠加,得到滑块缺口特征图,进一步计算边缘连续像素的位置得到一个缺口中心位置(C_x1,C_y1);求图片的转移矩阵,再次进行上述计算得到缺口中心位置(C_x2,C_y2);
(3)在缺口特征图上匹配滑块模板,取匹配度最高的位置,得到另一个缺口中心位置(C_x0,C_y0);
(4)将以上2种途径计算所得的缺口位置和缺口大小进行组合,得到最终的滑块缺口中心位置坐标,具体计算方法为:
a)将缺口中心坐标设置为匹配模板计算的坐标输出(C_x0,C_y0);
b)判别模板匹配计算输出的匹配度数值,当匹配度数值小于设定阈值时,再判断缺口中心横坐标C_x0是否为空,若为空,则将缺口中心坐标设置为(C_x1,C_y2)作为最终输出结果;若不为空,则保留(C_x0,C_y0)作为缺口中心坐标最终的输出结果;其中,匹配度阈值的设置原则是保留匹配度排序的前5%。
在其中一个实施例中,上述建立LSTM前端模型,采用基于统计学的独立模型,具体如下:
利用Burr统计模型针对位移距离与拖动时长的关联关系进行建模,即该模型输出符合Burr模型的耗时总时长A,单位为毫秒;
针对采集到的真人滑块操作数据集,分析时间采样频率的统计学关系,建立模型用于生成时间采样序列;在该步骤中,首先采用舍选法进行时间序列非均匀采样点的选取,然后针对所选取采样点的具体采样数值,进行指定均值和方差的高斯随机数生成;最后将生成总耗时为A的非均匀采样时间序列,作为LSTM后端回归模型的输入。
在其中一个实施例中,上述建立LSTM前端模型,采用额外一层LSTM进行建模,且该额外一层LSTM与LSTM后端回归模型一起,进行反向传播模型参数学习,具体如下:
采用额外一层LSTM直接建立输入到输出非均匀采样时间序列的模型,该层LSTM的输入为位移距离与拖动时长,该层LSTM的全部time step输出作为LSTM后端回归模型的输入。
在其中一个实施例中,建立适应非均匀采样输入时序和可变长时序数据的LSTM后端回归模型,具体如下:
首先,LSTM模型输入强制带入实际时间序列长度,输出为全time step输出;
其次,在接入输出层前,加入一层dropout层,Dropout层与输出层使用全连接,损失函数定义为MSE,该函数经过修改,根据带入的实际时间序列长度信息,剔除zero-padding节点对MSE计算带来的干扰;
最后,输出层添加Leaky Relu激活函数,配合Adam优化器进行模型参数的反向传播学习。
在其中一个实施例中,结合滑块初始位置,计算得到滑块位移距离,公式如下:
其中,D表示滑块位移距离,x为滑块缺口中心位置横坐标,x0为滑块初始横坐标,Welm为目标检测模型输入图片的宽度,Wsnap为屏幕截图的宽度,以上变量的单位均为像素;
所述滑块初始位置为不定值时,采用template matching算法根据滑块本身,单独计算滑块初始位置坐标(x0,y0)。
在其中一个实施例中,上述执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹时间序列即鼠标移动轨迹序列,具体如下::
1)以滑块位移距离D为输入,执行在线下模型训练部分已训练好的LSTM前端模型,得到非均匀采样的时间序列t[n],单位为毫秒;
2)对时间序列t[n]进行预处理:包括零值填充、归一化和数据维度转换;其中,归一化是指将t[n]的数值归一到[0,1]区间内;
3)以经过预处理的t[n]为输入,执行在线下模型训练部分已训练好的LSTM后端回归模型,得到初始滑块拖动轨迹时间序列(x[n],y[n],t[n]),其中x[n],y[n]分别表示在t[n]时刻滑块的中心位置横、纵坐标,单位为相对像素;
4)将初始滑块拖动轨迹时间序列(x[n]y[n],t[n])反归一化,将滑块的中心位置坐标单位转化成输入图片坐标域的像素点、将t[n]的单位转化为毫秒;
5)通过拉伸或压缩序列,对初始滑块拖动轨迹时间序列进行对齐处理,使得滑块拖动轨迹时间序列最终横坐标位置x[N]等于滑块位移距离D,其中N代表最后一个采样点;
6)将对齐处理后的滑块拖动轨迹时间序列数值近似为整数;
7)返回差分计算结果(x_t,y_t,t)作为最终的滑块拖动轨迹时间序列,其中差分计算具体为:x_t=x[n]–x[n-1],y_t=y[n]–y[n-1],t=t[n]–t[n-1]。
本发明与现有技术相比,其显著优点为:(1)在滑块位移计算步骤,利用闭环有监督目标检测的深度学习方法,减小了对滑块识别供应商所提供滑块图片特殊特征的依赖,不需要人工手动标注标签;(2)在滑块轨迹生成步骤,以经过修改的LSTM模型为核心,利用统计学模型和轨迹平滑等辅助型算法,实现对人类滑块拖动行为的深度学习,进而随机生成含有人类滑块拖动本质特征的轨迹,具有识别通过率高和通过率稳定性强的优点。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,提供一种滑块验证码的自动识别方法,可以应用于如图1所示的滑块验证码的自动识别系统中,该系统包括X服务器启动模块和滑块识别程序模块,其中:
X服务器启动模块,用于加载X服务器配置文件、启动X服务器,并开启X客户端接入权限;
滑块识别程序模块,用于配置网页浏览器启动选项、加载Selenium框架,并运行滑块识别算法,得到鼠标轨迹序列,通过X服务器的XTEST接口或者Linux操作系统的鼠标事件文件控制鼠标点击滑块、拖拽滑块、释放滑块到缺口位置。
在一个实施例中,所述滑块识别程序模块,具体包括:
模型训练单元,用于滑块缺口位置定位建模与线下模型训练,滑块拖动轨迹建模与线下模型训练,
滑块验证码触发单元,用于访问目标网站,触发滑块验证码;
屏幕截图单元,用于对屏幕进行截图,得到含有滑块图片和滑块缺口背景图片;
滑块位移距离计算单元,用于执行已训练好的目标检测模型,得到滑块缺口中心位置坐标,并计算得到滑块位移距离;
滑块拖动轨迹序列计算单元,用于执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹序列即鼠标轨迹序列;
鼠标操作控制单元,用于根据滑块拖动轨迹序列,控制鼠标点击、拖拽、释放到滑块缺口位置,完成滑块验证码的自动识别。
在一个实施例中,上述滑块验证码自动识别系统的系统架构,包括网页浏览器、浏览器自动化测试框架即Selenium、Linux的图形显示服务器即X服务器、X服务器虚拟显卡驱动、真实输入输出驱动、X服务器的封装驱动、X服务器配置文件、滑块识别应用程序模块,其中:
Selenium,用于滑块识别应用程序模块对网页浏览器的自动化控制;
X服务器,用于实现虚拟桌面,支持无头服务器部署,并支持滑块识别应用程序对虚拟鼠标光标的控制操作;
X服务器的封装驱动,用于X服务器在启动时通过Linux内核动态加载真实输入输出驱动;
X服务器配置文件,用于配置X服务器,定义虚拟桌面参数,动态加载真实输入输出驱动、配置虚拟鼠标相关参数,以及配置相关虚拟显卡设置;
滑块识别应用程序模块,用于配置网页浏览器启动选项、加载Selenium框架,并运行滑块识别算法,得到鼠标轨迹序列,通过XTEST接口或者鼠标事件文件控制鼠标点击、拖拽、释放滑块到指定位置。
具体地,上述网页浏览器为Chrome浏览器或Firefox浏览器,或支持WebDriverAPI的其他网页浏览器。
具体地,上述游览器控制框架Selenium提供网页浏览器的API接口,使得网页浏览器能够被程序软件控制。
具体地,上述Selenium安装的库函数与滑块识别应用程序模块所使用的编程语言对应,使得通过该语言编写的滑块识别应用程序模块能够访问网页浏览器,并控制网页浏览器的操作。
具体地,上述X服务器配置文件,还用于无头服务headless mode的配置与部署,包括XTEST支持、鼠标驱动、显示器分辨率、DPI配置、键盘配置。
具体地,上述滑块验证码的自动识别系统的架构构建过程如下:
(1.1)安装具体要使用的网页浏览器,比如Chrome浏览器或Firefox浏览器;
(1.2)安装Selenium的浏览器驱动程序,比如Chrome浏览器的驱动程序chromedrive;该驱动程序提供网页浏览器的控制接口,使得网页浏览器可以被程序自动化控制;
(1.3)根据使用的编程语言选择对应的Selenium库函数安装,使得通过该语言编写的滑块识别应用程序模块能够访问网页浏览器,以及控制网页浏览器操作;;
以上(1.1)~(1.3)三个步骤完成了滑块识别应用程序可通过Selenium对浏览器进行自动化控制。下面的步骤介绍搭建X服务器来实现虚拟桌面,用来支持无头服务器部署,更重要的是用来支持滑块应用程序对虚拟鼠标的模拟操作。结合图1,滑块应用程序可根据鼠标模拟操作仿真度的不同需求,通过2种不同的方式对虚拟鼠标进行控制:使用这种架构的滑块验证码识别系统,可以绕过滑块验证码厂商对于用户交互、网页编码形式、网页应用前后端交互机制的加密和检测机制,同时也不再受到浏览器自动化框架对于输入输出设备控制(比如鼠标)的限制和框架本身的功能局限,在Linux操作系统层面实现对网页的自动化控制。
(1.4)安装X服务器;
(1.5)安装X服务器虚拟显卡驱动;
(1.6)安装真实输入输出驱动,以及X服务器的封装驱动,使X服务器可以在启动时通过Linux内核动态加载这些真实输入输出驱动。因为这些驱动是真实的物理硬件驱动,因此可以通过这些驱动实现虚拟鼠标的仿真程度最大化。
(1.7)加载X服务器配置文件:该配置文件需要事先编写好,该文件的作用是配置X服务器,定义虚拟桌面参数,如分辨率、DPI等,同时加载输入输出驱动、配置鼠标相关参数,已确保驱动被Linux内核正确加载。该配置文件还需配置相关显卡设置,比如禁用3D硬件加速等,以及扩展接口相关设置,在本实施例中,打开XTEST支持。
(1.8)启动X服务器;
(1.9)开启X客户端接入权限;
(1.10)设置X协议通信方式,比如客户端(滑块识别应用程序模块)将使用Unix端口与X服务器进行通信;
至此,图1所示的系统架构已完成搭建和启动,下面启动滑块验证码识别程序。
(1.11)启动滑块识别应用程序模块,控制鼠标点击、拖拽、释放滑块到指定位置,滑块识别应用程序模块内部有如下步骤:
①配置web浏览器启动选项;
②配置鼠标驱动选项(可选);
③加载Selenium框架;
④运行滑块识别应用程序模块,得到鼠标轨迹序列;(注:滑块识别应用程序模块细节在下文的算法流程里详述);
⑤程序根据鼠标轨迹序列,通过XTEST接口或者鼠标事件文件控制鼠标点击、拖拽、释放到滑块缺口位置。
采用本实施例的方案,通过直接控制浏览器和模拟鼠标移动,实现了拟人化操作,从而从技术上绕过了http技术的局限性,同时,http加密对本发明系统架构完全透明,意味着本发明系统无需修改就可支持不同滑块验证码供应商,技术通用性和延展性高。在系统部署形式上,本发明系统支持用于无头服务器的部署,即在无物理显卡、无物理显示终端、无物理输入输出设备的Linux服务器上部署该系统。
在一个实施例中,如图2~5所示,提供了一种一种滑块验证码的滑块缺口定位及拖动轨迹生成方法,包括线下模型训练和线上模型服务两部分,其中:
第一部分、线下模型训练,包括以下步骤:
滑块缺口位置定位建模与线下模型训练:构建基于深度学习的目标检测模型,根据滑块缺口背景图片计算滑块缺口中心位置坐标,并标注矩形标注框,进行有监督的目标检测模型训练;
滑块拖动轨迹建模与线下模型训练:根据真人滑块拖动轨迹,建立LSTM前端模型,以及适应非均匀采样输入时序和可变长时序数据的LSTM后端回归模型,对建立的LSTM前端模型、LSTM后端回归模型进行训练。
在一个实施例中,上述滑块缺口位置定位建模与线下模型训练,具体如图2所示:
构建基于深度学习的目标检测模型,截取滑块缺口背景图片分别进行通用性图像处理和针对性图像处理;通用性图像处理包括缩放图片至固定大小、像素值均衡化操作,通用性图像处理结果用于深度学习目标检测模型的输入;针对性图像处理用于有监督学习的数据自动标注,根据针对性图像处理结果,计算滑块缺口中心位置坐标,并自动识别和标注矩形框,即为目标检测模型提供有监督的标签,从而进行无需人工数据标注的有监督的目标检测模型训练;最终,训练完成的目标检测模型用于输出滑块缺口位置的定位矩形框坐标,以及矩形框的中心坐标即滑块缺口中心位置坐标。
在一个实施例中,上述基于深度学习的目标检测模型,具体采用YOLO或SSD深度学习模型,进行有监督的目标检测模型训练,其中:
所述通用性图像处理,包括对滑块缺口背景图片进行单色灰度图转换、直方图均衡处理,并进行归一化使图像像素在[0,1]区间内;
所述针对性图像处理,包括对滑块缺口背景图片进行单色灰度图转换、ROI限制、二值化处理,采用一阶图像梯度计算,然后利用边缘白色连续像素点连续性、以及该白色连续像素点坐标位置的统计中位数计算,得到滑块缺口中心位置坐标,进而在滑块缺口位置标注矩形标注框,即为目标检测模型提供有监督的标签。
采用本实施例的方案,在滑块位移计算步骤,利用一种闭环有监督的目标检测模型深度学习方法,解决了对滑块识别供应商滑块图片特殊特征的依赖,也解决了有监督深度学习模型需要人工手动标注标签的问题。
在一个实施例中,上述根据针对性图像处理结果,计算滑块缺口中心位置坐标,具体如下:
(1)滑块图片特征使用RGBA的A信道,对该信道进行二值化得到滑块覆盖的像素点位,剔除其他像素得到滑块模板;
(2)将滑块缺口背景图片转换成int16格式,然后对水平和垂直方向分别进行差分计算,将负值赋值为0,然后将水平和垂直计算结果按照原图像大小叠加,得到滑块缺口特征图,进一步计算边缘连续像素的位置得到一个缺口中心位置(C_x1,C_y1);求图片的转移矩阵,再次进行上述计算得到缺口中心位置(C_x2,C_y2);
(3)在缺口特征图上匹配滑块模板,取匹配度最高的位置,得到另一个缺口中心位置(C_x0,C_y0);
(4)为进一步提升定位精确度,将以上2种途径计算所得的缺口位置和缺口大小进行组合,得到最终的滑块缺口中心位置坐标,具体计算方法为:
a)将缺口中心坐标设置为匹配模板计算的坐标输出(C_x0,C_y0);
b)判别模板匹配计算输出的匹配度数值,当匹配度数值小于设定阈值时,再判断缺口中心横坐标C_x0是否为空,若为空,则将缺口中心坐标设置为(C_x1,C_y2)作为最终输出结果;若不为空,则保留(C_x0,C_y0)作为缺口中心坐标最终的输出结果;其中,匹配度阈值的设置原则是保留匹配度排序的前5%。
在一个实施例中,上述滑块拖动轨迹建模与线下模型训练,如图3所示:
录取真人滑块拖动轨迹,并对滑块轨迹进行预处理;建立LSTM前端模型,学习滑块轨迹总位移与轨迹总耗时的关联关系特征,以及滑块轨迹的不均匀时间采样序列特征;建立改进的LSTM后端回归模型,以适应非均匀采样输入时序和可变长时序数据;对建立的LSTM前端模型、LSTM后端回归模型进行训练,用于生成滑块拖动轨迹时间序列。
在一个实施例中,上述滑块拖动轨迹建模与线下模型训练,采用的模型为LSTM,具体如下:
利用鼠标录屏软件进行真人滑块操作数据采集;
将采集到的数据进行预处理;
进行LSTM前端模型建模,包括两种方式:一种是采用基于统计学的独立模型,另一种是采用额外一层LSTM进行建模,且该额外一层LSTM与LSTM后端回归模型一起,进行反向传播模型参数学习;
建立改进的LSTM后端回归模型,通过修改网络架构和损失函数,生成不同位移距离、不同拖动时长的可变长滑块拖动轨迹。
采用本实施例的方案,在滑块轨迹生成步骤,利用经过特殊修改的LSTM模型为核心,统计学模型和轨迹平滑等辅助型算法技术,实现对人类滑块拖动行为的深度学习,进而随机生成含有人类滑块拖动本质特征的轨迹,最终获得滑块验证码的高识别通过率和高通过率稳定性。
在一个实施例中,上述将采集到的数据进行预处理,包括以下步骤:
从录制的鼠标轨迹中提取滑块点击、拖动和释放过程,并将数据格式转化为csv文本文件;
将鼠标移动绝对坐标转换成鼠标移动相对坐标,第一个点的坐标为(0,0);
将时间采样由系统绝对时钟周期转换成毫秒,第一个点的采样时间点为0毫秒;
统计数据集鼠标位移最大值和耗时最大值,并进行数据归一化。
在一个实施例中,上述进行LSTM前端模型建模,采用基于统计学的独立模型,具体如下:
利用Burr统计模型针对位移距离与拖动时长的关联关系进行建模,即该模型输出符合Burr模型的耗时总时长A,单位为毫秒;
针对采集到的真人滑块操作数据集,分析时间采样频率的统计学关系,建立模型用于生成时间采样序列;在该步骤中,首先采用舍选法进行时间序列非均匀采样点的选取,然后针对所选取采样点的具体采样数值,进行指定均值和方差的高斯随机数生成;最后将生成总耗时为A的非均匀采样时间序列,作为LSTM后端回归模型的输入。
在一个实施例中,上述进行LSTM前端模型建模,采用额外一层LSTM进行建模,且该额外一层LSTM与LSTM后端回归模型一起,进行反向传播模型参数学习,具体如下:
采用额外一层LSTM直接建立输入到输出非均匀采样时间序列的模型,该层LSTM的输入为位移距离与拖动时长,该层LSTM的全部time step输出作为LSTM后端回归模型的输入。
在一个实施例中,上述建立改进的LSTM后端回归模型,具体如下:
首先,LSTM模型输入强制带入实际时间序列长度,输出为全time step输出;
其次,在接入输出层前,加入一层dropout层,Dropout层与输出层使用全连接,损失函数定义为MSE,该函数经过修改,根据带入的实际时间序列长度信息,剔除zero-padding节点对MSE计算带来的干扰;
最后,输出层添加Leaky Relu激活函数,配合Adam优化器进行模型参数的反向传播学习。
第二部分、线上模型服务,包括以下步骤:
如图4所示,首先通过浏览器自动化技术访问目标网站,触发滑块验证码;
对屏幕进行截图,处理截图得到含有滑块图片和滑块缺口背景图片;
以滑块缺口背景图片为输入,执行已训练好的目标检测模型,得到滑块缺口中心位置坐标;结合滑块初始位置,计算得到滑块位移距离;
执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹时间序列即鼠标移动轨迹序列;
根据滑块拖动轨迹时间序列,通过X服务器的XTEST接口或者Linux操作系统的鼠标事件文件,自动控制鼠标点击滑块、拖拽滑块、释放滑块到缺口位置,完成滑块验证码的自动识别。
在一个实施例中,上述根据滑块拖动轨迹时间序列,通过X服务器的XTEST接口或者Linux操作系统的鼠标事件文件,自动控制鼠标点击滑块、拖拽滑块、释放滑块到缺口位置之前,所述滑块验证码的自动识别方法还包括:调用滑块轨迹平滑模型,用于平滑生成的滑块拖动轨迹时间序列。
在一个实施例中,上述以滑块缺口背景图片为输入,执行已训练好的目标检测模型,得到滑块缺口中心位置坐标;结合滑块初始位置,计算得到滑块位移距离,公式如下:
其中,D表示滑块位移距离,x为滑块缺口中心位置横坐标,x0为滑块初始横坐标,Welm为目标检测模型输入图片的宽度,Wsnap为屏幕截图的宽度,以上变量的单位均为像素;
所述滑块初始位置为不定值时,采用template matching算法根据滑块本身,单独计算滑块初始位置坐标(x0,y0)。
在一个实施例中,上述执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹时间序列即鼠标移动轨迹序列,结合图5,具体如下:
1)以滑块位移距离D为输入,执行在线下模型训练部分已训练好的LSTM前端模型,得到非均匀采样的时间序列t[n],单位为毫秒;
2)对时间序列t[n]进行预处理:包括零值填充(zero-padding)、归一化和数据维度转换;其中,归一化是指将t[n]的数值归一到[0,1]区间内;
3)以经过预处理的t[n]为输入,执行在线下模型训练部分已训练好的LSTM后端回归模型,得到初始滑块拖动轨迹时间序列(x[n],y[n],t[n]),其中x[n],y[n]分别表示在t[n]时刻滑块的中心位置横、纵坐标,单位为相对像素;
4)将初始滑块拖动轨迹时间序列(x[n]y[n],t[n])反归一化,将滑块的中心位置坐标单位转化成输入图片坐标域的像素点、将t[n]的单位转化为毫秒;
5)通过拉伸或压缩序列,对初始滑块拖动轨迹时间序列进行对齐处理,使得滑块拖动轨迹时间序列最终横坐标位置x[N]等于滑块位移距离D,其中N代表最后一个采样点;
6)将对齐处理后的滑块拖动轨迹时间序列数值近似为整数;
7)返回差分计算结果(x_t,y_t,t)作为最终的滑块拖动轨迹时间序列,其中差分计算具体为:x_t=x[n]–x[n-1],y_t=y[n]–y[n-1],t=t[n]–t[n-1]。
下面对本发明实施例中的技术方案进行清楚、完整地描述,当然,此处所描述的实例并非全部的实施例。在此处附图中描述和示出的本发明实施例的组件可以以各种不同的形式来布置和设计。因此,以下提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。
下面先对本发明所述的技术实施方案在Linux无头服务器上的线上部署与执行,进行详细叙述,后再对本发明涉及到的模型线下训练环境进行方案实施具体描述。
一、滑块验证码系统架构实施方案
1、在Linux服务器一次性上安装X11服务器、X11 dummy driver(虚拟显卡驱动)和X11 libinput驱动;
2、一次性安装libinput输入驱动;
3、编写特制的conf文件放入/etc/x11/xorg.conf.d/文件夹下;该conf文件用于描述桌面屏幕分辨率、DPI、色深等显示相关配置,也用于加载虚拟显卡驱动、真实输入驱动(鼠标+键盘),详细配置键盘和鼠标驱动参数;该配置同时用于过滤不必要的输入输出和驱动,以及禁用硬件加速等需要真实硬件的显示渲染引擎和内核库函数;
4、使用Xorg命令后台启动X服务器;
5、使用xhost命令开启X客户端访问权限,以支持X协议的客户端接入;
6、设置采用Unix端口形式的DISPLAY参数,(注:也可采用X协议支持的其他传输机制);
7、启动滑块验证码应用程序开始自动识别验证码。
采用本实施例上述的通用式的系统架构设计,该架构解决了传统滑块验证码识别技术的系统架构瓶颈,即其技术不再受到滑块前端页面特制控件、http传输协议加密的限制,实现了系统技术架构的创新。同时,该架构实现了在无物理鼠标硬件情况下,加载真实的鼠标Linux内核驱动,消除了程序对鼠标控制与真人对鼠标控制的差异性,提高了系统拟人拖动鼠标的鲁棒性,进而提高滑块识别通过率。
二、滑块验证码应用程序实施方案
1、配置Selenium的webdriver参数,具体为浏览器窗口大小和窗口启动位置坐标。在本实施例中,具体采用的网页浏览器为Chrome浏览器,在root权限下需使用—no-sandbox参数。同时,由于使用的虚拟显卡,因此使用—disable-gpu禁用GPU加速而使用软件渲染。
2、通过Selenium框架启动浏览器,浏览器将在X服务器内运行。
3、通过对浏览器的元素与控件控制,进入目标网站。具体元素、CSS、class根据网站不同而不同。
4、获取滑块验证码屏幕截图。
5、根据滑块验证码窗口位置只截取滑块和含有滑块缺口背景的图片。
6、执行线下已训练好的目标检测模型,该模型将输出滑块中心位置坐标(x,y),以及对应的矩形框bbox坐标(x_left,y_left,w,h)。
7、定位初始滑块位置。该步骤为可选,多数验证码滑块初始位置为定值,针对不定值的滑块初始位置可采用template matching算法搜索滑块按钮位置坐标(x0,y0),其中x0用于滑块位移计算。
8、滑块位移计算,公式为
其中,D表示滑块位移距离,x为滑块缺口中心位置横坐标,x
0为滑块初始横坐标,W
elm为目标检测模型输入图片的宽度,W
snap为屏幕截图的宽度,以上变量的单位均为像素。
9、生成滑块拖动轨迹,该步骤可细分为如下几个环节,如图5所示:
(9.1)生成时间采样序列,本实施案例执行在线下模型训练环节已训练好的模型,载入其参数,得到非均匀采样时间序列;
(9.2)LSTM模型输入预处理,包括zero-padding、归一化和数据维度转换;
(9.3)执行LSTM模型,得到生成的滑块拖动轨迹(x_t,y_t)序列;
(9.4)(x_t,y_t,t)序列反归一化;
(9.5)轨迹对齐处理,确保轨迹最终位置为滑块缺口位置,必要时拉伸和压缩序列;
(9.6)将序列数值近似为整数;
(9.7)返回差分计算结果;
10、调用滑块轨迹平滑模型,用于平滑生成的滑块轨迹序列。轨迹序列平滑处理,本实施例采用的是tweening函数,也可以使用其他差值函数,该步骤与训练集数据采样周期相关,为可选步骤。本实施例中使用了轨迹平滑处理,以提高识别通过率。
11、利用事件文件或XTEST接口模拟鼠标操作,完成滑块按钮的点击、拖动和释放,完成滑块验证码的自动识别。
下面对本专利涉及到的算法模型线下训练实施方案具体描述。本专利涉及2个模型训练:滑块缺口位置定位模型和滑块拖动轨迹生成模型。
三、滑块缺口位置定位模型
该模型的线下训练步骤如图2所示,其具体的深度学习模型为YOLO,但是也可以使用SSD等其他深度学习模型。作为模型的实际输入,含有滑块缺口的背景图片经过通用图像处理模块,转化为单色灰度图,继而进行直方图均衡处理,并进行归一化使图像像素亮度在[0,1]区间内。
图2为给模型自动打标签的处理流程,根据具体滑块验证码图片,对含有滑块缺口的背景图片进行特定处理,随厂商的不同而不同。结合图2所示步骤,本实施例中,在针对性图像处理环节,采用了灰度变换、ROI限制、以及例如Ostu的multi-level二值化等算法;在滑块缺口位置定位环节,采用了一阶图像梯度计算,然后利用其边缘白色连续像素点连续性、以及其坐标位置的统计中位数计算,得到滑块缺口中心位置坐标,进而可实现对滑块缺口位置的矩形框标注(bbox),为目标检测模型自动提供标签用于闭环有监督训练。
滑块缺口位置定位的具体步骤包括:
1、通过屏幕截取方式获得滑块缺口背景图片和滑块图片
2、使用针对性、通用性的图像处理算法对图片分别进行处理;有针对性的图像处理结果用于后续的滑块缺口位置自动标注步骤,即为目标检测模型提供有监督的标签;通用性图像处理结果则用于目标检测的模型输入,包括缩放图片至固定大小,像素值均衡化操作。现有的计算方法,比如,利用滑块背景有缺口和无缺口图片的计算方式在此环节使用,便于自动标签标注过程。
3、在标签自动标注条线下,有滑块缺口定位算法步骤,用于计算滑块缺口中心位置坐标;得出滑块缺口中心位置坐标后,可计算出其矩形标注框位置(boundingbox),用于目标检测有监督模型的训练;
为了便于理解本发明的方案,以下通过一个具体示例进行说明。
以腾讯滑块验证码测试为例。结合图2的标签自动标注条线,本发明同时利用了滑块图片特定特征、滑块缺口背景图片特定特征、以及滑块图片与滑块缺口图片的形状关联特征,构建了滑块缺口定位算法,可以准确的识别滑块缺口的位置并进行标注:
(1)滑块图片特征使用RGBA的A信道,对该信道进行二值化得到滑块覆盖的像素点位,剔除其他像素得到滑块模板;
(2)将滑块缺口背景图片转换成int16格式,然后对水平和垂直方向分别进行差分计算,将负值赋值为0,然后将水平和垂直计算结果按照原图像大小叠加,得到滑块缺口特征图,进一步计算边缘连续像素的位置得到一个缺口中心位置(C_x1,C_y1);求图片的转移矩阵,再次进行上述计算得到缺口中心位置(C_x2,C_y2);
(3)在缺口特征图上匹配滑块模板,取匹配度最高的位置,得到另一个缺口中心位置(C_x0,C_y0);
(4)为进一步提升定位精确度,将以上2种途径计算所得的缺口位置和缺口大小进行组合,得到最终的滑块缺口中心位置坐标,具体计算方法为:
a)将缺口中心坐标设置为匹配模板计算的坐标输出(C_x0,C_y0);
b)判别模板匹配计算输出的匹配度数值,当匹配度数值小于设定阈值时,再判断缺口中心横坐标C_x0是否为空,若为空,则将缺口中心坐标设置为(C_x1,C_y2)作为最终输出结果;若不为空,则保留(C_x0,C_y0)作为缺口中心坐标最终的输出结果;其中,匹配度阈值的设置原则是保留匹配度排序的前5%。
(5)目标检测模型训练完毕后,将可以输出滑块缺口的中心位置坐标和矩形标注框,示例输出如图6、图7所示,根据该两幅图可以看出滑块定位效果较好。
采用本实施例上述的滑块缺口位置定位算法,通用深度学习目标检测使算法真正学习到滑块位置识别的本质特征,实现了一个算法支持多个不同滑块验证码供应商的识别能力,实现了自动化标签标注的闭环系统,无需人工介入和标注数据。
四、滑块拖动轨迹生成模型
该模型的线下训练步骤如图3所示,具体的深度学习模型为LSTM:
1、利用鼠标录屏软件(例如Mouse Controller)进行真人滑块操作数据采集;然后将采集到的数据进行预处理,具体有如下几步:
(1)从录制的鼠标轨迹中提取滑块点击、拖动和释放过程,并将数据格式转化为csv文本文件;
(2)将鼠标移动绝对坐标转换成鼠标移动相对坐标,第一个点的坐标为(0,0);
(3)将时间采样由系统绝对时钟周期转换成毫秒,第一个点的采样时间点为0毫秒;
(4)统计数据集鼠标位移最大值和耗时最大值,并进行数据归一化。
2、建立数学模型学习轨迹总位移与轨迹总耗的关联关系特征
3、建立数学模型学习录制轨迹的不均匀时间采样序列特征,如图3(注:步骤2和步骤3可视为LSTM前端模型,步骤2和步骤3也可混合成一个模型)。
步骤2和步骤3是LSTM前端模型,可以统一以LSTM建模,也可以单独建模。LSTM建模为加入单独一层全输出LSTM层,以位移距离作为单个输入;单独建模则是建立2个串联统计模型,第一个模型以位移距离为输入,输出拖动总耗时,如图8所示,根据人工拖动滑块耗时与滑块位移距离的关系,可使用线下统计模型实现对轨迹耗时的拟人模拟。第二个模型以总耗时为输入,时间采样序列为输出,如图9所示,显示了非均匀采样点出现在人工录制轨迹中的概率,比如采样点在500毫秒出现的概率约为50%。利用此信息,可实现非均匀采样模型,从而制作时间序列随机生成器,用于生成符拟人的轨迹时间序列。
这里描述2种具体实施方案,2个方案的不同点在于方案1为基于统计学的独立模型,不参与后端LSTM反向传播模型参数学习;方案2则是利用额外一层LSTM进行建模,该层与后端LSTM模型一起,进行反向传播模型参数学习。
①LSTM前端实施方案1
结合图3,该方案首先利用Burr统计模型针对位移距离与拖动耗时的关联关系进行建模,即该模型输出符合Burr模型的耗时总时长A,单位为毫秒。
其次,针对采集到的真人滑块拖动数据集,分析其时间采样频率的统计学关系,建立模型用于生成时间采样序列。在该步骤中,首先采用舍选法(Acceptance-RejectionMethod)进行时间序列非均匀采样点的选取,然后针对已被确定选取的采样点,对该采样点的具体采样数值(单位为毫秒),进行指定均值和方差的高斯随机数生成。该步骤最后将生成非均匀采样时间序列(该序列的总耗时为A),作为LSTM后端模型的输入。
②LSTM前端实施方案2
该实施方案利用一层LSTM,直接建立输入(位移距离,耗时时长),到输出非均匀采样时间序列的模型。该LSTM层的全部time step输出将作为LSTM后端的输入,time step数为55,不足补零。
结合图3,LSTM回归模型采用Tensorflow框架编写,其网络架构和损失函数经过定制修改以适应滑块验证码识别应用中,对不同位移距离、不同拖动时长的可变长滑块拖动轨迹的生成。首先,LSTM模型输入强制带入实际时间序列长度,输出为全time step输出;其次,在接入输出层前,加入一层dropout层。Dropout层与输出层使用全连接(fullyconnected),损失函数定义为MSE,该函数经过修改,根据带入的实际时间序列长度信息,剔除zero-padding节点对MSE计算带来的干扰;最后,输出层添加Leaky Relu激活函数,配合Adam优化器进行模型参数的反向传播学习。
4、建立经过修改的LSTM后端回归模型,该模型可适应非均匀采样输入时序和可变长时序数据.
5、训练该模型用于生成滑块轨迹序列,一个拟人滑块拖动轨迹生成示例如图10所示,根据图10可知机器生成的滑块轨迹与人类真实的滑块轨迹相比,近似度较高。
采用本实施例上述的基于LSTM模型的滑块轨迹生成算法,该算法通过深度学习,结合轨迹生成后的平滑函数处理,实现了拟人滑块轨迹的随机生成。该算法与传统滑块轨迹生成算法的最大区别在于,该算法在达到高识别通过率的同时,可以保证其通过率不随测试数量的增多而下降。
本实施例通过上述优点的有效结合,实现了对滑块验证码的高识别通过率和高通过率稳定性。本专利的技术根本性的解决了滑块验证码识别这一图灵动态感知游戏测试问题,其技术效果不受滑块验证码厂商具体滑块页面控件编写方式、网页应用前后端加密和传输方式的影响,可达到95%以上的滑块识别通过率且不随测试数量的增加而衰减。
此外,在一个实施例中,还提供了一种服务器,所述服务器包括:存储器、处理器及存储在所述存储器上,并可在所述处理器上运行的滑块验证码的自动识别程序,所述滑块验证码的自动识别程序配置为实现以下步骤:
线下模型训练:
滑块缺口位置定位建模与线下模型训练:构建基于深度学习的目标检测模型,根据滑块缺口背景图片计算滑块缺口中心位置坐标,并标注矩形标注框,进行有监督的目标检测模型训练;
滑块拖动轨迹建模与线下模型训练:根据真人滑块拖动轨迹,建立LSTM前端模型,以及适应非均匀采样输入时序和可变长时序数据的LSTM后端回归模型,对建立的LSTM前端模型、LSTM后端回归模型进行训练;
线上模型服务:
通过浏览器自动化技术访问目标网站,触发滑块验证码;
对屏幕进行截图,处理截图得到含有滑块图片和滑块缺口背景图片;
以滑块缺口背景图片为输入,执行已训练好的目标检测模型,得到滑块缺口中心位置坐标;结合滑块初始位置,计算得到滑块位移距离;
执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹时间序列即鼠标移动轨迹序列;
根据滑块拖动轨迹时间序列,通过X服务器的XTEST接口或者Linux操作系统的鼠标事件文件,自动控制鼠标点击滑块、拖拽滑块、释放滑块到缺口位置,完成滑块验证码的自动识别。
在一个实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有滑块验证码的自动识别程序,所述滑块验证码的自动识别程序被处理器执行时实现以下步骤:
线下模型训练:
滑块缺口位置定位建模与线下模型训练:构建基于深度学习的目标检测模型,根据滑块缺口背景图片计算滑块缺口中心位置坐标,并标注矩形标注框,进行有监督的目标检测模型训练;
滑块拖动轨迹建模与线下模型训练:根据真人滑块拖动轨迹,建立LSTM前端模型,以及适应非均匀采样输入时序和可变长时序数据的LSTM后端回归模型,对建立的LSTM前端模型、LSTM后端回归模型进行训练;
线上模型服务:
通过浏览器自动化技术访问目标网站,触发滑块验证码;
对屏幕进行截图,处理截图得到含有滑块图片和滑块缺口背景图片;
以滑块缺口背景图片为输入,执行已训练好的目标检测模型,得到滑块缺口中心位置坐标;结合滑块初始位置,计算得到滑块位移距离;
执行已训练好的LSTM前端模型,以及LSTM后端回归模型,得到滑块拖动轨迹时间序列即鼠标移动轨迹序列;
根据滑块拖动轨迹时间序列,通过X服务器的XTEST接口或者Linux操作系统的鼠标事件文件,自动控制鼠标点击滑块、拖拽滑块、释放滑块到缺口位置,完成滑块验证码的自动识别。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。