智能手机加速度计手势算法

6
我正在开发用于iPhone和Android平台的简单移动应用程序,我正在寻找算法,以便在使用内部加速度计检测到某些手势时触发特定事件(函数)。我使用利用HTML5和javascript的Phonegap工作,它从预设间隔(例如每0.04秒)的加速度计中读取三个坐标(x、y和z)。
我编写了一个简单的函数来检测摇晃动作,并且它运行得相当不错,但是它很原始(它只能检测摇晃,而不能检测方向),我想检测其他一些手势,例如: - 倾斜(向左/右) - 上下震动 - 左右震动 - 圆形运动 - 翻转 - 等等...
是否有任何算法(或至少是数学公式/函数)可以基于我拥有的输入值(x、y、z和每次调用的时间间隔)计算(检测)这种手势?
我正在寻找任何编程语言的代码(我将自己重写为javascript)。提前感谢!

我知道这个问题很旧,但你可能想看一下来自MIT实验室的GRT(手势识别工具包):https://github.com/nickgillian/grt - teh.fonsi
3个回答

4
动态时间规整(DTW)做得很好,但我建议使用快速动态时间规整(Fast DTW)。特别是对于移动场景,FastDTW非常适用!有关详细版本,请参阅此研究论文:http://cs.fit.edu/~pkc/papers/tdm04.pdf 编辑:一段时间以前,我写了我的论文,讨论了在智能家居环境中控制设备的3D手势。在这里可以看到它的实际运行情况:here(也有PDF文件的链接)。我在iPhone上使用FastDTW来识别手势。

你知道在哪里可以找到一个快速DTW的工作示例吗?我已经谷歌搜索过了,但似乎找不到任何示例 - 尤其是针对与时间一起使用的3D数据(x,y,z)。 - j99
@tilo 如果您查看我提供的链接,您会看到我链接了这篇论文。 - Ali
@j99 如果您查看我提供的链接,您会看到我也链接了这篇论文。 - Ali
@Ali刚刚看到你的链接指向SO上的另一个问题,抱歉。在这里再次提供参考应该没问题。 - tilo
@tilo 您好,非常感谢您的出色回答。您介意与我就此问题交谈吗? - Ondrej Tokar

1
你可能想尝试使用动态时间规整(dynamic time warping)。有一个生动的例子在这里:here

1
我查看了你的示例 - 这只解释了如何比较两个1D数组,但在我们的情况下,我们有一个3D数组(x,y,z)以及时间。如果用户进行缓慢的“循环”手势,那么如果他加快2或3倍,它应该被检测到... - j99
@j99 我说这个例子是为了说明问题。如果你阅读链接的论文,你会发现可以将DTW扩展到3D数组,没有问题。手势的快速移动不应该造成任何问题,因为弯曲会解决这个问题。 - Ali
@Ali,我们能私聊吗?我想问你一些事情,或许可以交换一些东西。非常感谢。 - Ondrej Tokar
@OndrejTokar 请告诉我你的电子邮件地址。 - Ali
@Ali 给你:zatokar@gmail.com - Ondrej Tokar
@OndrejTokar,我刚刚给您发了一封电子邮件,请告诉我是否收到。 - Ali

0

如果我可以这么大胆,快速DTW(以及相关但不同的Sakurai和Faloutsos的FTW)都不是好的解决方案。

如果你限制了弯曲程度(a):

  1. 那么使用下界DTW就像欧几里得距离一样快[b][c]。
  2. 精确度会提高。(a,b)

对于有限制的弯曲程度,FTW和快速DTW比暴力算法慢,因为存在开销(Ira Assent等人已经证明了这一点)。

a)Ratanamahatana,C.A.和Keogh.E。(2004)。Dynamic Time Warping的一切都是错的。

b)Xiaoyue Wang,Hui Ding,Goce Trajcevski,Peter Scheuermann,Eamonn J. Keogh:时间序列数据表示方法和距离度量的实验比较CoRR abs / 1012.2789:(2010)

c)http://www.cs.ucr.edu/~eamonn/LB_Keogh.htm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接