手势识别策略


12

与Wii一起工作时,我经常发现必须识别简单的手势,到目前为止,我主要能够研究加速度的大小,以便识别游戏设计文档中要求的手势,但是我想创建一个更强大的系统,允许“记录”示例手势并识别复杂手势。

您过去使用过哪些策略?他们为什么工作?他们为什么不工作?你将做点什么不同的?

Answers:


5

编辑仿射不变性显然需要此版本的曲率。
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
假设这就是我所指的内容。(尽管我认为法向曲率对于旋转来说是不变的,这可能就足够了)。在此处
编辑比例不变的曲率版本,请参见
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform-斯卡利

手势识别问题是识别问题的子类,而识别问题基本上是模型比较问题。

您尝试使自己的手势适合某些手势集合,则最佳手势会获胜。

我会多次记录您的手势,然后尝试使用b样条曲线(曲线)来拟合您的训练数据。您可能希望手势对于仿射变换(旋转,缩放,平移)是不变的,因此将曲线存储为曲率值表(不太可能具有良好的闭合形式),而不是控件的笛卡尔坐标点。

那是手势的模型。假设您有几个。

为了进行比较,首先需要拟合输入数据,然后评估曲率x次数,其中x在精度和性能之间取得了很好的折衷。

现在,遍历模型并减去曲率值(以弧长为单位,沿着相应曲线在同一点进行评估),并对差值求平方。产生的值称为残差。对所有残差求和。残差最小的模型是最佳拟合,也是您最有可能的手势。

比较我对@ Olie's的回答。它们基本上是相同的,尽管我们为手势选择了不同的模型,(建立带符号的曲率表并记录切线角度的变化几乎是相同的,我假设数据是通过平滑生成的曲线,但主要区别在于@Olie包括速度。

选择要包含在模型中的参数取决于情况和性能要求。请记住,向模型添加参数会增加尺寸。


4

从广义上讲,您可能希望将手势定义为一个方向,然后再定义[可能非常短]延迟,然后再定义另一个方向(以及方向之间的相对角度等),直到结束为止。

例如,用魔杖打个“ t”(别忘了有些人是左撇子,所以您的定义不应该依赖于手!)是垂直旋风,短延迟,反转弯曲,短延迟,反转朝水平,突然[近]停止。

读取手势时,您想查看读取的图案与图案描述的接近程度。

一般而言,您可以首先消除明显的不匹配(甚至无法正确开始,或者太长或太短的错配)来剔除定义字典,然后将手势“比对”剩余的定义。通过评估每个部分与定义的匹配程度(0-100%)和RMS-ing(对误差进行平方,求和,然后求和的平方根)来对手势评分。

使用RMS会突出较大的差异(导致较低的得分),而倾向于掩盖较小的差异(导致更好的匹配)。

这些东西有很多资料-Google手势识别。不用担心它是用于手写笔还是其他非Wii的东西,这些原理可以很好地适应。


0

我只用鼠标完成了此操作,但是我的解决方案确实运行良好。我创建了一个连接点的点状图案来表示手势-这是要绘制的形状。然后,我存储了光标移动时的路径。接下来,我缩放了此鼠标路径,以使其宽度和高度与目标图案相同。每次更新时,我都会遍历光标路径的所有点,以确保它们均在手势路径节点的一定距离内,并按顺序查看每个手势路径点。


0

我由AiLive的一位主要开发人员(在某些视频中曾在其中)教过Game AI,简而言之,就是尝试进行这些手势识别实在是太痛苦了,以致无法度过一生。我建议您走中间件路线,并获得AiLive的LiveMove套件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.