【问题标题】:Continuous gesture recognizion with DTW使用 DTW 进行连续手势识别
【发布时间】:2015-07-05 13:28:53
【问题描述】:

我尝试使用动态时间扭曲 (DTW) 来检测智能手机通过加速度计传感器执行的手势。我已经实现了一个简单的 DTW 算法。

所以基本上我将加速度计数据 (x,y,z) 数组与 DTW 进行比较。一个数组包含我的预定义手势,另一个应该包含测量值。我的问题是,加速度计传感器不断测量新值,我不知道何时开始与我的预定义值序列进行比较。

我需要知道手势何时开始以及何时结束,但不同的手势可能会有所不同。在我的情况下,所有支持的手势都在同一点开始和结束,但据我所知,我无法可靠地计算加速度的行进距离。

总结一下:您将如何确定使用 DTW 比较我的数组的正确时间?

提前致谢!

【问题讨论】:

  • 您可能应该命令用户在某个时间点执行手势并开始比较。或者应该以按钮的形式赋予用户权限,让用户说出系统开始追踪。
  • 感谢您的建议!遗憾的是,这不是一个选项,因为 1. 如果用户仍然需要按下按钮,让用户通过点击直接选择操作会更容易 2. 用户看不到电话屏幕,因为他会在手势检测期间将其放在口袋里
  • 这个项目的文档可以帮助你:github.com/talcs/simpledtw

标签: android accelerometer gesture-recognition


【解决方案1】:

答案是,您将预定义的手势与 EVERY 进行比较 子序列。 您可以比实时更快地完成此操作(请参阅 [a])。

您需要对每个子序列进行 z 归一化,并对预定义的手势进行 z 归一化。

因此,以此类推,如果您流式传输是.....

NOW IS THE WINTER OF OUR DISCONTENT, MADE GLORIOUS SUMMER.. 

而您的预定义字是made,您可以与每个标记的字开头(用空格表示)进行比较

DTW(MADE,NOW)
DTW(MADE,IS)
DTW(MADE,THE)
DTW(MADE,WINTER)

在你的情况下,你没有制造商,你有这个......

NOWISTHEWINTEROFOURDISCONTENTMADEGLORIOUSSUMMER.. 

所以你只需测试每个偏移量

DTW(MADE,NOWI)
DTW(MADE, OWIS)
DTW(MADE, WIST)
DTW(MADE, ISTH)
::
DTW(MADE, TMAD)
DTW(MADE, MADE)   // Success!

埃蒙

[a]https://www.youtube.com/watch?v=d_qLzMMuVQg

【讨论】:

  • 感谢您的回复和易于理解的示例。我是否理解正确,这仅在我的(无限)序列中的模式与预定义的手势序列具有相同数量的样本时才有效?
【解决方案2】:

您不仅希望将 DTW 应用于时间序列,还希望应用于不断发展的流。因此,您将不得不使用 n 个最近数据点的滑动窗口。 这正是 eamonn 在他的第二个示例中所描述的。他的目标模式由 4 个事件(M、A、D、E)组成,因此他使用长度为 4 的滑动窗口。

但在这种情况下,他假设数据流不包含失真,例如 (M,A,A,D,E)。 DTW 的优点是它允许这些类型的扭曲,但将扭曲的目标模式识别为匹配。在你的情况下,时间上的扭曲很可能会发生。我假设您希望以相同的手势慢速或快速地执行相同的手势。

因此,滑动窗口的长度必须大于目标图案的长度(以便能够检测到慢速目标手势)。这在计算上是昂贵的。

最后,我的意思是:我想向你推荐这篇论文 Spring algorithm Sakurai、Faloutsos 和 Yamamuro。

他们针对数据流优化了 DTW 算法。对于每个传入事件,您将不再需要超过 n*n 次计算,而只需 n 个。它基本上是 DTW,但减少了所有不必要的计算,并且只考虑模板与流的最佳对齐。

附言我对时间序列和模式匹配的大部分了解,都是通过阅读 Eamonn Keogh 提供的内容来学习的。非常感谢,基奥先生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多