如何学习鼠标操作?

45

我过去几周一直在尝试开发一种方法,在我的应用程序中合成类似人类的鼠标移动。起初,我使用了简单的技术,如多项式和样条插值,但即使加入了一些噪声,结果仍然不够像人类。

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

我已经搜索了几周,并阅读了几篇关于逆生物识别在生成鼠标动态方面的文章,例如《鼠标动力学逆生物识别》;然而,它们往往侧重于从随机生成的动态生成现实时间,而我希望能够从A到B生成路径。此外,我仍然需要实际生成路径,而不仅仅是从一个位置测量出来的一些动态。

有没有人能够给个建议?目前,测试是通过记录运动并让我和其他几个开发人员观看回放来完成的。理想情况下,这种移动将能够欺骗自动生物特征分类器,并且也能够欺骗活生生、呼吸着的智人。


13
你如何测试是否表现得像人类一样? - Yahia
3
你的“检测算法”难以使用,可能存在错误。你是否进行了盲测试?例如,记录一个人工检测和一个真实检测,然后给别人观看,而不告诉他哪个是人工/真实的?结果如何? - Yahia
3
在进行机器学习之前,你应该首先做这件事情,因为它对你的整个方法非常重要……当你解决了“检测算法”后,就会更清楚如何达到你的目标! - Yahia
4
我可以建议一个模拟醉酒用户的算法 :) - Bozho
3
在这里使用机器学习可能有些过头/会浪费很多时间。也许你可以尝试理解路径看起来像人类的原因。例如,也许人们总是会超过目标然后慢慢纠正。(我使用触摸板,所以自己无法完全确定。) - toto2
显示剩余15条评论
7个回答

14

菲茨定律可以很好地估计鼠标指针定位所需的时间。在推导部分中有一个简单的解释,我认为您可以将其作为应用程序的基本构建模块之一。从大的移动开始,加入一些不准确性,包括方向和移动长度,然后进行更小的纠正移动等等...


谢谢。您给出了科学的答案,这正是我认为应该在这里得到的。(+1) - AlexR
我非常了解费茨定律。我链接的论文使用神经网络综合不同类型鼠标移动的逼真时间估计,其结果确实遵循该定律。我唯一的问题是,我还没有找到一种方法来生成鼠标移动的实际路径。 - obataku

11

首先,我猜您记录了从A到B的人类鼠标移动。否则,尝试合成这种移动的模型对我来说似乎是不可能的。

其次,考虑测量与“直接”路径的偏差,也许与时间有关。我实际上怀疑不同角度、路径长度等情况下移动看起来会有所不同,但也许您可以首先尝试一个规范化模型,然后根据需要进行拉伸(在空间和时间上)和旋转。

第三,学习。最简单的方法就是拥有一系列真实移动(以我上面讨论的形式),并从该集合中取样。评估其外观。如果您真的想要一个概率模型,那么您必须评估哪种模型适合。用高斯噪声来模糊直线路径是否足够,或者使用(正弦)波浪形偏差?或者分别为“接近按钮”和“最终校正”建立模型。Fitts定律可能对评估有用。


这就是我要的回应!谢谢。我曾经处理过加入样条的随机噪声,但一次又一次地出现了数学化而不是类人的路径。 - obataku

2
这个问题让我想起了几年前我知道的一个网站,所以我去访问了它,并发现这个深入探讨该主题的讨论
时间上如此相似,以至于让我觉得这个问题在某种程度上是相关的。事实上,帖子中的某个人链接到了你提供的同一篇文章。如果不相关,那么这里有很多人正在讨论你所思考的内容的链接。

1
但是现在我看到那里还有一个名为 super_ 的用户。 - Evan Cordell
我没有账号。每隔几年,我会来看看客户端黑客技术的发展情况。那里使用了很多编程技巧,我在其他地方并没有真正看到过。 - Evan Cordell

1
鼠标移动的方式因设备类型、操作类型、涉及的UI元素、对UI的熟悉程度、用户试图完成任务的速度、用户的技能水平、用户最初的失败(例如误点)、用户的情绪状态(以及许多其他因素)而异。您是否计划创建几种路径策略以对应不同的上下文?此外,您对尝试欺骗的算法了解程度如何?我认为您并没有深入了解,否则您将直接针对该算法进行编程。
如果人类正在观察路径,他们可能能够识别与路径策略相关联的状态,并且如果他们将其识别为人类状态(例如用户匆忙、误点、快速关闭结果弹出窗口、尝试较慢地再次操作),他们可能更容易被欺骗。UI不仅涉及大小和位置。我经常快速指向工具栏,然后滑动选项,直到找到我的目标。另一个例子是,我通常在扫描目标时暂停菜单项或悬停在我正在阅读的文本上方。您是要模拟人类行为还是只是他们的鼠标移动(因为我认为它们是相互关联的)?

1

你是否想要模拟人类般的鼠标移动,因为你正在进行实时在线游戏培训?如果你的培训序列是静态的,只需记录你的鼠标移动,并在每次点击鼠标按钮时播放鼠标点击音效。没有任何鼠标移动会比你自己的感觉更“真实”。

个人认为,软件专家在培训视频中移动鼠标的速度太快了。我更喜欢一种屏幕录制视频软件采用的方法,即始终将鼠标线性地从A点移动到B点。诀窍在于,视频中进行的每个鼠标移动都需要相同的时间,无论距离有多远,例如3/4秒,然后再加上鼠标点击音效。

我认为他们以这种方式移动鼠标,是因为观看者可以通过鼠标开始移动的方向和速度来预测鼠标的着陆区域。在培训情况下,我想这样的常规移动对眼睛更温和,也更容易记住/回忆。


并不完全是为了测试游戏...它更加专注于欺骗生物识别认证以及观察这些动作的真实人类。 - obataku
小心啊,祝你好运模拟黄金矿工和机器人! ;) - DWoldrich
模拟黄金矿工和机器人?我的意思是为了测试游戏服务器,而不是游戏本身。最终的想法是看看是否有任何合成鼠标移动方式可以看起来完全像人类,并绕过我们目前的检测技术,其中包括基本的生物识别分类器和观察记录的鼠标移动的人类。 - obataku

1

我认为这个问题并没有被很好地定义。到目前为止还没有提到一个重要的概念,那就是上下文。当 Chrome 获得焦点时,我的屏幕上的鼠标移动与 Vim 获得焦点时的移动大不相同。


理论上来说,这并不重要,因为记录和合成的动作都针对同一款游戏,因此上下文是一致的。 - obataku

0
你有没有考虑在你的应用程序中添加鼠标跟踪功能,以便记录用户如何移动鼠标并分析记录?
我最近没有研究过这个问题,但我相信在Swing应用程序中使用MouseListener可以获取所需的信息。

目前测试的方式是通过跟踪鼠标移动并记录它。理想情况下,每个用户都保留其记录的生物测定鼠标动态的个人资料,这些资料会以某种方式进行分析,以产生真实的鼠标移动 :) - obataku
那么你的问题不是录制,而是从你的录音中创建一个模型? - Thorbjørn Ravn Andersen
事实上,创建一个能够在给定两个点的情况下合成类似鼠标移动的模型。 - obataku
追踪鼠标超出了琐事,处理数据才是难点。 - bestsss
@super,我建议您开一个新问题,有意识地寻求帮助,根据您的经验数据对鼠标移动进行建模。 - Thorbjørn Ravn Andersen
模型的目的是产生鼠标移动...它是一个问题的重要部分,询问如何基于人类训练样本学习移动鼠标。 - obataku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接