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

时间:2008-10-13 20:48:05

标签: java embedded accelerometer gesture-recognition

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

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

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

4 个答案:

答案 0 :(得分:22)

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

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

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

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

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

答案 1 :(得分:7)

由于似乎没有人提到现有的图书馆,按照OP的要求,这里有:

http://www.wiigee.org/

用于Wiimote, wiigee 是基于开源Java的实现,用于基于加速度计读数的模式匹配。它使用隐马尔可夫模型 [1]来实现这一点 它显然被一家公司Thorn Technologies用到了很好的效果,他们在这里提到了他们的经历:http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition/

或者,您可以考虑 FastDTW https://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 Recognizer的变体,在该领域具有90%的准确度和亚毫秒的计算时间。他还提到轮换不是他项目的标准。

答案 2 :(得分:5)

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

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

答案 3 :(得分:1)

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

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