通过电话,我可以向配对的 Microsoft Band 发送消息和/或对话,但我希望收到来自 Band 的确认回电话。由于似乎没有任何其他方式,我想我将不得不拿起一个手势,例如用户来回转动手腕一次,或者可能摇晃他们的手腕。这听起来像是加速度计和陀螺仪的工作。从这些人那里收集信息应该很容易,但是就识别手势而言,例如手腕向一个方向旋转然后再回到另一个方向,任何人都可以建议如何将其识别为故意手势,而不仅仅是正常的“非手势”动作?
非常感谢您的帮助,
约翰·H。
通过电话,我可以向配对的 Microsoft Band 发送消息和/或对话,但我希望收到来自 Band 的确认回电话。由于似乎没有任何其他方式,我想我将不得不拿起一个手势,例如用户来回转动手腕一次,或者可能摇晃他们的手腕。这听起来像是加速度计和陀螺仪的工作。从这些人那里收集信息应该很容易,但是就识别手势而言,例如手腕向一个方向旋转然后再回到另一个方向,任何人都可以建议如何将其识别为故意手势,而不仅仅是正常的“非手势”动作?
非常感谢您的帮助,
约翰·H。
首先保存数据并将其绘制为不同类型的图表,以查看您是否看到手势模式。我有一个类似的问题,我想检测用户何时咬了一口,并过滤掉其他手势,例如切割、喝水等。
我记录了 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 值得一看,但与跳跃一样,它不同,因为您通常需要使用骨架或点模型以及用于坐标的视图框。