2011-11-19 126 views
2

我正在使用网络摄像头获取视频馈送,然后对此视频馈送执行动作跟踪。运动跟踪器不断返回(x,y)坐标。你如何制作和识别手势?

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

我如何制作和存储这些手势的模板,以及如何找出/识别手势的其中一个 是否已经发生?

预先感谢您:)

PS:我使用Flex 4和ActionScript 3.0。如果有人能够用逻辑帮助我,我可以用ActionScript编写它。

+0

我跑进[链接] http://gestureworks.com之前,它可能不是一个现成的解决你的问题,但希望里面的逻辑可能会激发一个解决方案。 –

回答

2

你应该将你的任务分成更小的子任务。在计算机视觉领域,没有任何东西可以像所有环境下都可以使用的通用手势检测一样。

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

然后,您需要从图像中提取某些功能,例如一只手。同样,有多种方法可以做到这一点。从非常容易出现不同照明条件的肤色近似/评估开始,到更真实地尝试“分析”物体形状的更高级技术。这些算法随着时间的推移“学习”一只手应该是什么样子。

我只能推荐购买一本关于计算机视觉的好书,并为文章研究网络。还有像OpenCV这样的库可用于了解更多关于实现方面的内容。应该有几个OpenCV端口用于ActionScript 3.我也可以推荐Eugene Zatepyakin的文章和工具(http://blog.inspirit.ru)。他用ActionScript 3做了很棒的简历。

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

3

我能想到的工作方法是沿着手势有一系列表示点的(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坐标分解为单独的2维数组,其中当前坐标和第一个点之间的总行程距离(在所有情况下,在本例中它将递增1),因此您将有两个数组:

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

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

现在对每个数组做一个最小二乘拟合,以找出x中变化的最接近表示形式,并将y变化为二次函数。对你的每一个判断的手势做同样的事情,然后插入你确定的手势的x,y坐标到用户的手势的二次函数和你设计的每个确定的手势,并且看看它匹配哪一个最接近的手势。这是你的姿态。

(我从来没有尝试过处理的手势,但我不明白为什么这是行不通的)