2008-10-13 72 views
19

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

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

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

回答

21

加速度计将被登记的恒定重力加速度,加上任何加速度的设备是由用户,加噪声进行。

您需要对样品进行低通滤波以尽可能消除无关噪音。最差的噪音一般会比任何可能的人为加速度都要高。

实现的是,当设备没有被用户加速,唯一的力是由于重力,因此就可以在空间deduce its attitude。而且,当总加速度从1g变化很大时,它必然是由于用户加速了设备;通过减去上次已知的重力估计值,您可以粗略估计用户在何种方向上加速设备,从而获得数据,您可以开始与已知手势列表进行匹配。

使用单个三轴加速度计可以检测当前的俯仰和滚动,并且在一条直线上还加速度的设备。积分加速度减去重力会给你一个当前速度的估计值,但由于噪声的原因,估计值会很快偏离现实;您必须对手势之前/之间/之间的用户行为做出假设,并通过您的用户界面指导他们,以提供设备未加速的点数,并且您可以重置估算值并可靠估计重力方向。再次整合以找到位置不可能在任何有用的时间长度内提供可用的结果。

如果有两个三轴加速度计隔开一定距离,或一个与一些陀螺仪,也可以检测该设备的转动(通过比较加速度矢量,或者直接从陀螺仪);在几秒钟内积分角动量将会给你一个相对于当你开始积分时的当前偏航的估计,但是这又会很快偏离真实。

+0

非常感谢这非常有帮助。 – smaclell 2008-10-13 21:20:15

+0

他们是否真的注册了一个恒定的加速度?我的意思是他们应该,但它似乎反直觉:-) – 2008-10-13 23:51:06

+2

是的,他们这样做。把它们想象为泉水上的群众,实际上报告的是“加速”的伸展/压缩量;那么它很直观。 – moonshadow 2008-10-14 07:45:54

1

添加到月影的点大约有重置基线重力和自转...

除非该设备预计将有休息的时刻,稳定(其中作用于它的唯一力是重力)重置其测量基线,你的系统最终会发展出相当于眩晕。

5

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

看看隐马尔可夫模型。这似乎是最流行的方法,但使用它们并不是微不足道的。通常有一个预处理步骤。首先进行STFT并将合成矢量聚类成字典,然后将其输入HMM。在java代码中查看jahmm的代码。

7

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

http://www.wiigee.org/

意味着与Wiimote的使用,wiigee是模式匹配一​​个开源的基于Java的实现基于加速度计读数。它使用隐马尔可夫模型 [1]来完成此操作。

它是由一个公司,索恩技术显然是用来很大的影响,他们已经在这里提到他们的经验: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 Recognizer的变体。他还提到轮换不是他项目的标准。