代码之家  ›  专栏  ›  技术社区  ›  smaclell

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

  •  19
  • smaclell  · 技术社区  · 17 年前

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

    有没有人对如何做到这一点提出建议?在Java中有可用的库吗?你推荐我签出的示例项目?你推荐的论文?

    Sun是一个Java平台,帮助您快速生成系统原型。它使用Java编程,并可以将命令中继回附在计算机上的基站。如果我需要解释硬件的工作原理,请留言。

    4 回复  |  直到 8 年前
        1
  •  22
  •   moonshadow    17 年前

    加速度计将记录由于重力而产生的恒定加速度,加上用户所承受的任何加速度以及噪声。

    你需要低通滤波器的样本,以消除尽可能多的无关噪声。最糟糕的噪声通常会比任何可能的人为加速更高的频率。

    请注意,当设备没有被用户加速时,唯一的力是由于重力,因此您可以 deduce its attitude 在太空中。此外,当总加速度与1g相差很大时,一定是由于用户加速了设备;通过减去最后一次已知的重力估计值,您可以大致估计用户加速设备的方向和程度,从而获得数据,您可以开始根据已知手势列表进行匹配。

    用一个三轴加速度计,你可以检测到当前的俯仰和侧倾,以及设备在直线上的加速度。积分加速度减去重力将给你一个当前速度的估计值,但是由于噪音,估计值将迅速偏离现实;你必须在手势之前/之间/期间对用户的行为进行假设,并引导他们通过你的用户界面,以提供设备没有被加速的点和y你可以重新设定你的估计值并可靠地估计重力的方向。再次整合以寻找位置不太可能在任何有用的时间段内提供有用的结果。

    如果你有两个相距一定距离的三轴加速度计,或者一个和一些陀螺仪,你也可以检测到装置的旋转(通过比较加速度矢量,或者直接从陀螺仪);在几秒钟内积分角动量,你将得到一个当前偏航相对于你开始积分时的估计值,但是再次这将迅速偏离事实。

        2
  •  7
  •   Abraham Philip karim79    8 年前

    由于没有人提到现有的库,根据OP的要求,这里是:

    http://www.wiigee.org/

    用于wiimote, 维基 是基于Java的基于加速度计读数的模式匹配实现。它使用 隐马尔可夫模型 〔1〕。

    显然,Thorn Technologies公司已经将其应用到了巨大的效果中,他们在这里提到了他们的经验: http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition/

    或者,你可以考虑 快速DTW ( 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

    编辑:操作人员在其中一条评论中提到,他完成了他的项目,现场准确率达到90%,计算时间为毫秒,使用的变量为 $1 Recognizer . 他还提到轮换不是他的项目的标准。

        3
  •  5
  •   Brian    16 年前

    尚未提到的是实际的手势识别。这是最困难的部分。在清理完数据(低通过滤、规范化等)之后,仍然有大部分工作要做。

    看看隐藏的马尔可夫模型。这似乎是最流行的方法,但使用它们并不容易。通常有一个预处理步骤。首先做STFT并将得到的向量聚类到字典中,然后将其导入到HMM中。在Java代码中查看JAHMM的Java LIB。

        4
  •  1
  •   Toybuilder    17 年前

    为了重力和旋转,你必须重新设置基线,这也增加了月亮阴影的意义…

    除非设备有稳定的休息时间(唯一作用于它的力是重力),以重置其测量基线,否则您的系统最终会发展出与眩晕相当的功能。