4

通过电话,我可以向配对的 Microsoft Band 发送消息和/或对话,但我希望收到来自 Band 的确认回电话。由于似乎没有任何其他方式,我想我将不得不拿起一个手势,例如用户来回转动手腕一次,或者可能摇晃他们的手腕。这听起来像是加速度计和陀螺仪的工作。从这些人那里收集信息应该很容易,但是就识别手势而言,例如手腕向一个方向旋转然后再回到另一个方向,任何人都可以建议如何将其识别为故意手势,而不仅仅是正常的“非手势”动作?

非常感谢您的帮助,

约翰·H。

4

1 回答 1

10

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

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

我确定的一些因素是: 定义咬合的一组读数的 Nr(必须以 16 毫秒的间隔超过 20) Y 轴上的峰值和谷值

我用它来创建一个计算,根据用户提供的训练数据找到“最终”阈值,但是由于手势(如旋转)在人与人之间或多或少相同,您可以预定义阈值并让例如,用户设置的灵敏度。

以下是一些图表:

应该说Y数据:) 在此处输入图像描述

在此处输入图像描述

这张图片可能太模糊了,但这一切都始于一些想法和一些白板,其中包括使用斜率、抛物线计算、随时间的加速度以及未考虑的一切。蛮力效果最好,或者我只是数学很烂。

在此处输入图像描述

概括

  • 写下是什么定义了你的手势和涉及的因素
  • 记录加速度计和陀螺仪的数据并绘制一些图表
  • 寻找常见模式
  • 组合一个算法,该算法将根据输入数据和因素产生正确的响应。
  • 调整和重构。

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

电话上的伪代码,请原谅丑陋 :) 类似于...?:

如果(总时间 < 最大时间)

if(reading.X > something) if(reading.timestamp - itemsForCount.Last().TimeStamp <= maxTimeBetweenShakes) itemsForCount.Add(new item({....})

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

灵感:我已经完成了一些 Leap 动作的工作,我记得查看了他们的 js 代码,看看他们的几个手势是如何定义的。这是Js跳跃动作。C# 库需要反编译,这将违反 lic。协议。

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

还有一些 kinect 手势 api 值得一看,但与跳跃一样,它不同,因为您通常需要使用骨架或点模型以及用于坐标的视图框。

于 2015-04-24T22:59:35.193 回答