你如何做出和识别手势?

Posted

技术标签:

【中文标题】你如何做出和识别手势?【英文标题】:How do you make and recognize gestures? 【发布时间】:2011-11-19 06:21:19 【问题描述】:

我正在使用网络摄像头获取视频源,然后对此视频源执行运动跟踪。运动跟踪器连续返回(x,y) 坐标。

我想使用这些(x,y) 来识别“向左滑动”、“向右滑动”、“向上滑动”或“向下滑动”等手势。

我如何制作和存储这些手势的模板,以及如何判断/识别是否有一个 的手势发生了?

提前谢谢你:)

PS:我使用的是 Flex 4 和 ActionScript 3.0。如果有人可以帮助我解决逻辑问题,我可以用 ActionScript 编写。

【问题讨论】:

我之前遇到过[link]gestureworks.com,它可能不是一个现成的解决方案,但希望里面的逻辑可以激发一个解决方案。 【参考方案1】:

我能想到的一种工作方法是使用一系列 (X,Y) 坐标来表示手势上的点。在小范围内,如果通过您的屏幕的手势被绘制成这样:

|1|1|1|

|1|0|0|

|1|0|0|

并表示(从左上角代表0,0):

(0,2)(0,1)(0,0)(0,1)(0,2)

将 x,y 坐标分解为单独的 2d 数组,其中当前坐标和第一个点之间的总距离(在此示例中的所有情况下,它将递增 1),因此您将拥有两个数组:

X:(0,0)(1,1)(2,2)

Y:(0,1)(1,1)(2,2)

现在对每个数组进行最小二乘拟合,以找到 x 变化和 y 变化作为二次函数的最接近的表示。对每个确定的手势执行相同的操作,然后将每个确定的手势的 x、y 坐标插入到用户手势的二次函数和您设计的每个确定的手势中,看看哪个最匹配。这是你的手势。

(我从未尝试过处理手势,但我不明白为什么这不起作用)

【讨论】:

【参考方案2】:

你应该把你的任务分成更小的子任务。在计算机视觉中,没有像通用手势检测这样的东西可以在所有环境中开箱即用。

首先,您需要能够检测运动。有几种方法可以做到这一点,例如背景减法或斑点跟踪。

然后您需要从图像中提取某些特征,例如一只手。同样,有不止一种方法可以做到这一点。从肤色近似/评估开始,这在不同的照明条件下很容易出错,到更先进的技术,真正尝试“分析”物体的形状。这些算法随着时间的推移“学习”手应该是什么样子。

我只能建议购买一本关于计算机视觉的不错的书,并在网络上搜索文章等。还有像 OpenCV 这样的库,您可以使用它来了解更多关于实现方面的信息。应该有几个 OpenCV 到 ActionScript 3 的端口。我也可以推荐 Eugene Zatepyakin (http://blog.inspirit.ru) 的文章和工具。他正在使用 ActionScript 3 完成出色的简历工作。

长话短说,您应该研究运动跟踪和特征提取。

【讨论】:

【参考方案3】:

最好的起点是了解手语识别或触控板输入的工作原理,例如创建参考图像并将其与用户输入进行比较。对于 Adob​​e,有 FLARToolKit,在其网站上的 augmented reality 文章中有详细说明。

参考资料:

Trackpad Science

Hand Gesture Recognition

Sign Language Recognition Research - PDF

Gesture Recognition Walkthrough - Video

【讨论】:

以上是关于你如何做出和识别手势?的主要内容,如果未能解决你的问题,请参考以下文章

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

关于视图和手势识别器

如何识别调用了哪个点击手势识别器?

如何让动画和手势识别器协同工作? (迅速)

如何在弹出视图上识别手势而不中断下方视图上的手势识别?

特定手势的同时手势识别