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

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

有没有人对如何做到这一点有建议?Java中是否有任何可用的库?您推荐我查看的示例项目?你推荐的论文?

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


答案 1

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

您需要对样本进行低通滤波,以尽可能多地消除不相关的噪声。最糟糕的噪声通常比任何可能的人为引起的加速度更高的频率。

意识到当设备没有被用户加速时,唯一的力是由于重力,因此您可以推断出它在空间中的姿态。而且,当总加速度从1g变化很大时,一定是由于用户加速了设备;通过减去上次已知的重力估计值,您可以粗略地估计出用户在哪个方向以及设备加速的程度,从而获得可以开始与已知手势列表匹配的数据。

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

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


答案 2

由于似乎没有人按照OP的要求提到现有的库,所以这里是:

http://www.wiigee.org/

意味着与Wiimote一起使用,wiigee是一个基于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在其中一条评论中提到他完成了他的项目,现场准确率为90%,计算时间亚毫秒,使用1美元识别器的变体。他还提到,轮换不是他项目中的标准。


推荐