如何学习鼠标移动?

Posted

技术标签:

【中文标题】如何学习鼠标移动?【英文标题】:How to learn mouse movement? 【发布时间】:2011-10-26 21:29:33 【问题描述】:

在过去的几周里,我一直在尝试开发一种在我的应用程序中合成类人鼠标移动的方法。一开始我使用了多项式和样条插值等简单的技术,但是即使有一点噪音,结果仍然不能足够像人类。

为了解决这个问题,我一直在研究将机器学习算法应用于真实人类鼠标移动生物特征的方法,以便通过从记录的真实人类移动中学习来合成鼠标移动。用户将编译记录运动的配置文件,以训练程序以进行综合。

我找了几个星期,看了几篇关于逆生物识别在生成鼠标动力学中的应用的文章,比如Inverse Biometrics for Mouse Dynamics;然而,他们倾向于关注从随机生成动态生成现实时间,而我希望生成从具体 A到B. 另外,我实际上仍然需要提出一条路径,而不仅仅是从一条路径中测量出的一些动态。

有没有人有一些建议可以帮助菜鸟?

目前,测试是通过记录动作并让我和其他几位开发人员观看回放来完成的。理想情况下,该运动将能够欺骗自动生物特征分类器,以及真实的、活生生的、会呼吸的智人。

【问题讨论】:

你如何测试它是否像人类? 你的“检测算法”很难用,而且可能容易出错……你做过盲测吗,即记录了一个人造的和一个真实的,然后给别人看不知道哪个是人造的/真实的?结果如何? 在进一步使用机器学习之前,您应该首先执行此操作,因为它对您的整个方法至关重要......在您对“检测算法”进行排序之后,将更清楚要采取的方向实现你的目标! 我可以建议一个模拟醉酒用户的算法:) 机器学习在这里可能是矫枉过正/时间黑洞。也许你可以尝试理解为什么一条路径看起来像人类。例如,也许人们总是超越目标并慢慢纠正。 (我有一个触控板,所以我不能完全告诉自己。) 【参考方案1】:

Fitt's law 可以很好地估计定位鼠标指针所需的时间。在derivation 部分有一个简单的解释,我认为您可以将其用作应用程序的基本构建块之一。从大动作开始,在动作的方向和长度上放一些不准确,然后做一个较小的修正动作等等......

【讨论】:

谢谢。您给出了恕我直言的科学答案。 (+1) 我非常了解菲茨定律。我链接到的论文使用了一个神经网络,它综合了不同类型鼠标移动的实际时间估计,从而产生了确实符合规律的结果。我唯一的问题是我还没有找到一种方法来产生鼠标移动的实际路线。【参考方案2】:

首先,我猜你记录了人类鼠标从 A 到 B 的运动。否则,我似乎无法为这种运动合成一个模型。

其次,如何测量与“直接”路径的偏差,可能与时间有关。我实际上怀疑不同角度、路径长度等的运动看起来会有所不同,但也许您可以先尝试一个标准化模型,您只需拉伸(在空间和时间上)并根据需要旋转。

第三,学习。最简单的事情是只收集一组真实动作(以我上面讨论的形式),并从该集合中采样。评估它的样子。如果你真的想要一个概率模型,那么你必须评估什么样的模型适合。用高斯噪声来模糊直接路径是否足够,您从训练集中学习其参数?还是一些(正弦)波浪形偏差?或单独的模型用于“靠近按钮”和“最终更正”。菲茨定律可能对评估有用。

【讨论】:

这就是我正在寻找的回应!谢谢。我已经处理了添加到样条曲线的随机噪声,但该路线再次显得过于数学化,不像人类。【参考方案3】:

这个问题让我想起了我多年前知道的一个网站,所以我访问了它并找到了this in-depth discussion on the topic。

时间是如此相似,以至于让我觉得这个问题在某种程度上是相关的。事实上,线程中的某个人链接到您所做的同一篇文章。如果它不相关,那么有一个链接可以指向很多人讨论您的想法。

【讨论】:

但是现在我看到那里也有一个名为super_的用户。 我没有帐户。每隔几年左右,我就会过来看看客户端黑客攻击的进展情况。那里使用了很多我在其他地方还没有真正看到过的编程技术。【参考方案4】:

我认为问题没有那么明确。有一个重要的概念到目前为止没有提到,那就是上下文。 Chrome 获得焦点时鼠标在屏幕上的移动与 Vim 获得焦点时的移动大不相同。

【讨论】:

上下文是关于玩 MMORPG 游戏的。不过,理想情况下这并不重要,因为录制和合成的动作都针对同一个游戏,因此上下文是一致的。【参考方案5】:

鼠标移动的方式因设备类型、操作类型、所涉及的 UI 元素、对 UI 的熟悉程度、用户尝试完成任务的速度以及用户的技能而异,用户的初始失败(例如未点击),用户的情绪状态(以及许多其他因素)。您是否计划创建几种路径策略以对应不同的上下文?另外,您对要欺骗的算法了解多少?我假设不是很广泛,否则您将直接针对该算法进行编程。

如果人类正在查看路径,他们可能能够识别与路径策略相关的状态,并且如果他们将其识别为人类状态(例如,用户正在冲、未点击),则可能更容易被愚弄,快速关闭生成的弹出窗口,再慢一点尝试)。 UI 不仅与大小和位置有关。我经常快速指向一个工具栏,然后在选项之间滑动,直到找到我的目标。另一个例子是,当我扫描我的目标或将鼠标悬停在我正在阅读的文本上时,我通常会暂停菜单项。您是在尝试模仿人类行为还是仅仅模仿他们的鼠标动作(因为我认为他们是在臀部连接的)?

【讨论】:

【参考方案6】:

您是否想要模拟类似人类的鼠标移动,因为您正在为您的游戏进行实时在线培训?如果您的训练序列是静态的,只需记录您的鼠标移动并在您单击鼠标按钮时播放鼠标单击音效。没有比您自己的鼠标移动更能让您感觉“足够真实”的了。

就我个人而言,我觉得软件专家在培训视频中移动鼠标的速度太快了。我更喜欢我见过的截屏视频软件采用的方法,它总是从点 A --> B 线性移动鼠标。诀窍是,无论距离如何,视频中的每一次鼠标移动总是花费相同的时间,比如说3/4 秒,然后是鼠标点击音效。

我相信他们以这种方式移动鼠标是因为观众可以通过鼠标在开始时移动的方向和速度来预测鼠标的着陆区域。在训练情况下,我认为像这样的常规动作对眼睛更温和,可能更容易记忆/回忆。

【讨论】:

不太适合测试游戏......它更适合欺骗生物识别身份验证以及观察此类动作的真人。 偷偷摸摸。祝你好运模拟金矿工和机器人,然后?! ;) 模拟黄金矿工和机器人?我的意思是它是用于测试游戏服务器而不是游戏本身。最终的想法是看看是否有合成的鼠标动作看起来完全像人类,并绕过我们当前的检测技术,其中包括基本的生物特征分类器和人类观察记录的鼠标动作。【参考方案7】:

您是否考虑过将鼠标跟踪添加到您的应用程序中,以便从本质上记录用户如何移动鼠标然后分析记录?

我最近没有对此进行研究,但我相信 Swing 应用程序中的 MouseListener 可以获得您需要的信息。

【讨论】:

目前进行测试的方式是跟踪鼠标移动并记录下来。理想情况下,每个用户都会保留他们记录的生物特征鼠标动态的配置文件,并以某种方式对其进行分析以产生逼真的鼠标移动:) 所以您的问题不在于录制,而是根据您的录制创建模型? 确实,创建了一个模型,可以在给定两个点的情况下合成相似的鼠标移动。 追踪鼠标绝非易事,处理数据才是硬道理 @super,我建议您打开一个新问题,在其中故意寻求帮助根据您的经验数据建模鼠标移动。

以上是关于如何学习鼠标移动?的主要内容,如果未能解决你的问题,请参考以下文章

如何将强化学习应用于连续动作空间?

向量学习3:蝌蚪随鼠标移动且蝌蚪头部总是指向鼠标

向量学习3:蝌蚪随鼠标移动且蝌蚪头部总是指向鼠标

openGL学习----相机

学习windows编程 day6 之处理鼠标移动

VC++随鼠标移动显示坐标和坐标映射模式学习