如何使用加速度计进行手势识别

我的目标是识别安装在太阳光点上的加速度计的简单手势。 手势可以像旋转设备或以几种不同的动作移动设备一样简单。 该设备目前只有加速度计,但我们正在考虑增加陀螺仪,如果它更容易/更准确。

有没有人有如何做到这一点的建议? Java中的任何可用库? 您推荐的示例项目我结账了吗? 你推荐的论文?

sun spot是一个Java平台,可帮助您快速制作系统原型。 它使用Java编程,可以将命令转发回连接到计算机的基站。 如果我需要解释硬件如何工作更多留下评论。

加速度计将记录由于重力引起的恒定加速度,以及设备受到用户承受的任何加速度以及噪声。

您需要对样本进行低通滤波,以尽可能消除无关的噪声。 噪声最差的频率通常高于任何可能的人为加速度。

意识到当设备没有被用户加速时,唯一的力量是由于引力,因此你可以推断它在太空中的态度 。 而且,当总加速度从1g变化很大时,必须是由于用户加速了设备; 通过减去最后已知的重力估计值,您可以粗略估计用户加速设备的方向和数量,从而获得可以开始匹配已知手势列表的数据。

使用单个三轴加速度计,您可以检测当前的俯仰和滚转,以及设备的直线加速度。 将加速度减去重力积分可以得到当前速度的估计值,但由于噪声,估计值会迅速偏离现实; 您必须在手势之前/之间/之间对用户的行为做出假设,并引导他们完成UI,提供设备未加速的点,您可以重置估算并可靠地估计重力方向。 再次集成以找到位置不可能在任何有用的时间长度内提供可用的结果。

如果您有两个相距一定距离的三轴加速度计,或者一个和一些陀螺仪,您还可以检测设备的旋转(通过比较加速度矢量,或直接来自陀螺仪); 在几秒钟内积分角动量将为您提供相对于开始积分时的当前偏航的估计,但是这将再次快速偏离真实。

由于OP的要求似乎没有人提到现有的库,这里有:

http://www.wiigee.org/

wii适用于Wiimote,是一种基于开源Java的实现,用于基于加速度计读数的模式匹配。 它使用隐马尔可夫模型 [1]来实现这一点。

显然,Thorn Technologies公司已经很好地使用了它,他们在这里提到了他们的经验: http : //www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition /

或者,您可以考虑使用FastDTWhttps://code.google.com/p/fastdtw/ )。 它不如常规DTW准确[2],但计算成本也较低,这在嵌入式系统或移动设备方面是一个大问题。

[1] https://en.wikipedia.org/wiki/Hidden_​​Markov_model
[2] https://en.wikipedia.org/wiki/Dynamic_time_warping

编辑:OP在其中一条评论中提到他完成了他的项目,使用$ 1识别器的变体,在该领域具有90%的准确度和亚毫秒的计算时间。 他还提到轮换不是他项目的标准。

尚未提及的是实际的手势识别。 这是困难的部分。 清理完数据后(低通滤波,标准化等),您仍然需要完成大部分工作。

看看隐马尔可夫模型。 这似乎是最流行的方法,但使用它们并非无足轻重。 通常有一个预处理步骤。 首先进行STFT并将结果向量聚类到字典中,然后将其提供给HMM。 看一下java lib的google代码中的jahmm。

添加到moonshadow关于必须重置重力和旋转基线的观点……

除非设备具有稳定的静止力矩(其中唯一作用于它的力是重力)才能重置其测量基线,否则您的系统最终会产生相当于眩晕的效果。