如何识别Microsoft Band手势

时间:2015-04-23 16:52:36

标签: accelerometer gesture gyroscope microsoft-band

通过手机,我可以向配对的Microsoft乐队发送消息和/或对话,但我想收到乐队回电话的确认。由于似乎没有任何其他方式,我认为我将不得不采取一种姿势,例如用户来回旋转一次手腕,或者可能会晃动手腕。这听起来像是加速度计和陀螺仪的工作。从这些中收集信息应该很容易,但是在识别手势如一个方向上的手腕旋转然后又回到另一个方向时,任何人都可以建议如何将其识别为有意的手势,而不仅仅是正常的手势。 #34;非手势"转移?

非常感谢您的帮助,

John H.

1 个答案:

答案 0 :(得分:10)

首先保存数据并将其绘制为不同类型的图形,以查看是否看到手势模式。我遇到了类似的问题,我想检测用户咬一口的时间,并过滤掉其他手势,如切割,饮用等等。

我记录了1分钟的数据并且准确地进行了预定数量的咬合,否则正常交互。然后我稍微平滑了数据,并查看图表,看看我是否能看到一个模式,看看我可以使用哪些阈值。

我确定了一些因素: 定义咬合的集合中的读数Nr(必须以16ms间隔超过20) Y轴上的峰和谷 中断之间

我用它来创建一个基于用户提供的训练数据找到“最终”阈值的计算,但由于旋转等手势在人与人之间大致相同,因此您可以预定义阈值然后让用户设置灵敏度,例如。

以下是一些图表:

应该说Y数据:) enter image description here

enter image description here

这张图片可能过于模糊,但这一切都始于一些想法和一些白板,其中包括使用斜率,抛物线计算,加速度随时间变化以及未考虑的因素。蛮力工作最好,或者我只是吮吸数学。

enter image description here

<强>摘要

  • 写下您的手势和相关因素的定义
  • 记录数据 来自加速度计和陀螺仪并绘制一些图表
  • 寻找常见模式
  • 汇总一个可以产生正确响应的算法 基于输入数据和因素。
  • 调整并重构。

摇晃应该相当容易,只需决定哪种方式(上下或侧身,或两者都允许)。设置轴的阈值,并确定在多长时间内有多少交叉点。

手机上的伪代码,原谅丑陋:)有些事情......?:

if(totaltime&lt; maxTime)

if(reading.X&gt; something)      if(reading.timestamp - itemsForCount.Last()。TimeStamp&lt; = maxTimeBetweenShakes)      itemsForCount.Add(新项目({....})

if(itemsFourCount.Count&gt; = desiredShakes)    itemsFourCount.Clear(); if(totaltime&gt; maxTime)    itemsFourCount.Clear();

启示: 我已经完成了Leap动作的一些工作,我记得看看他们的js代码,看看他们的几个手势是如何定义的。 Here is Js leap motion. C#libs需要被反编译,并且会违反lic。协议

Hammer.js是一个有趣的OSS,你可以看到如何定义触摸手势, - 查找滑动和旋转。

还有一些值得关注的kinect手势api,但与飞跃不同,因为你通常有一个骨架或点模型可以使用,还有一个坐标视图框。