博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python处理滑块验证的轨迹计算问题
阅读量:6677 次
发布时间:2019-06-25

本文共 1748 字,大约阅读时间需要 5 分钟。

在上一回中说了五行代码找图中滑块验证的缺口位置《》,本章讲轨迹相关的问题。

滑块验证核心是后台验证轨迹参数,效验轨迹取点的分布,正常情况是如下图的离散分布

2019-03-12-17_35_39.png

如果横坐标x是时间、纵坐标y是位移,那么每个点的切线就是加速度,会发现这样的一个规律,加速度由小变大,再又大变小,这是最主要的特征之一。

速度的变化率如下:

2019-03-12-17_35_39.png

对速度而言肯定是先加速在减速,但加速度不会是固定的,应该是变变加速和变变加速,不过目前实际应用中的情况来说,是以速度变化情况为主要判别依据,因为在以恒加减速度生成的轨迹应用中一样可以通过检测,就说明目前没有对是否恒定加速度来鉴别机器和人工。

知道上面的两点后我们就应该明白滑块验证的关键,并且可以预测它的下一步优化方式将是对加速度变化的验证,收集了两种轨迹生成方式:一种是以加减速为主的物理学生成方式,另一种是根据轨迹离散分布生成的数学生成。

def generate_tracks(S):     """     :param S: 缺口距离Px     :return:      """     S += 20     v = 0     t = 0.2     forward_tracks = []     current = 0     mid = S * 3 / 5  # 减速阀值     while current < S:         if current < mid:             a = 2  # 加速度为+2         else:             a = -3  # 加速度-3         s = v * t + 0.5 * a * (t ** 2)         v = v + a * t         current += s         forward_tracks.append(round(s))     back_tracks = [-3, -3, -2, -2, -2, -2, -2, -1, -1, -1]     return {
'forward_tracks': forward_tracks, 'back_tracks': back_tracks}

传入距离S,先加上20的距离然后在生成轨迹中再减去20,达到超过缺口在回滑的效果,以固定周期0.2秒来计算轨迹和速度。

def ease_out_quad(x):     return 1 - (1 - x) * (1 - x) def ease_out_quart(x):     return 1 - pow(1 - x, 4) def ease_out_expo(x):     if x == 1:         return 1     else:         return 1 - pow(2, -10 * x) def get_tracks(distance, seconds, ease_func):     tracks = [0]     offsets = [0]     for t in np.arange(0.0, seconds, 0.1):         ease = globals()[ease_func]         offset = round(ease(t/seconds) * distance)         tracks.append(offset - offsets[-1])         offsets.append(offset)     return offsets, tracks

这种方式是从时间出发,在假设匀速的情况下,把时间分割成一段一段的,每段都对应一个轨迹,那么这个轨迹先大后小如下:

[0, 0.0, 21.0, 16.0, 13.0, 10.0, 9.0, 6.0, 5.0, 4.0, 4.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0,  0.0, 0.0, 0.0]

目前这两种轨迹都是可行的,能够通过腾讯的滑块验证。

转载地址:http://oggxo.baihongyu.com/

你可能感兴趣的文章
使用Unity3D自带动画系统制作下雨效果
查看>>
创建、显示和删除保存的用户名和密码(cmdkey)
查看>>
连载《一个程序猿的生命周期》-4.母亲的病魔
查看>>
关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)...
查看>>
02 svn 文件提交与目录结构
查看>>
让Quality Center走下神坛--测试管理工具大PK(转)
查看>>
mysql 数据库插入语句之insert into,replace into ,insert ignore
查看>>
ConcurrentHashMap vs Collections.synchronizedMap()不同
查看>>
Linux 安装ibus极点五笔输入法备忘录
查看>>
jquery、js调用iframe父窗口与子窗口元素的方法整理
查看>>
MFC函数——CWnd::OnEraseBkgnd
查看>>
TrinityCore3.3.5环境搭建
查看>>
[转]《Hadoop基础教程》之初识Hadoop
查看>>
ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题
查看>>
JavaScript - 时间函数
查看>>
node.js操作mysql数据库之增删改查
查看>>
总结的面试中常见65种应聘技巧回答
查看>>
Androidmanifest.xml在Android项目中的作用
查看>>
验证非法电话号码
查看>>
Android Parcelable和Serializable的区别,androidparcelable
查看>>