没有神经网络的手机触摸手势识别

时间:2011-10-02 22:31:48

标签: c# gesture-recognition

我正在为手机开发手势识别程序。我想要完成的是让用户绘制自己的“模式”,然后让这些模式做不同的事情。

存储模式 - 我称之为“模式保存”算法

当手势最初被绘制和记录时。这也是我用来抓取用户绘制内容并将其用于比较的算法:

  1. 用户开始绘制他的模式。对于每15个像素,一个点被放置在称为“列表”的列表中。
  2. 绘制完模式后,将从列表中删除第一个和最后一个点。
  3. 对于列表中现在的每个点,它们的连接将转换为方向枚举(包含8个方向),然后将其添加到列表中,现在称为“列表”。
  4. 过滤器1 开始,在列表中一次经过3个方向。如果左方向与右方向相同,则中间方向被移除。
  5. 过滤器2 开始,删除重复的路线。
  6. 过滤器3 开始,删除假定的噪音。通过一次又一次地发生的重复方向检测到假定的噪声。 (例如,“左上左左上”正在变成“左上”或“左”)。
  7. 过滤器4 开始,消除更多假设噪音。假设噪声是通过(再次)在列表中一次比较3个方向来检测到的,如步骤4(滤波器1)所示,但是在未检查方向完全相等的情况下,仅几乎相等(例如,左边是几乎等于“左上”和“左下”。)
  8. 方向列表现在存储在一个文件中。方向列表保存为手势本身,稍后用于比较。

    比较模式

    一旦用户绘制了一个模式,那么“模式保存”算法也会用在该模式上(但仅用于滤除噪声,而不是实际保存它,因为那样会很愚蠢)。

    然后将此过滤后的模式与手势列表中的所有当前模式进行比较。这种比较方法描述起来非常复杂,而且我对英语并不擅长。

    简而言之,它通过用户键入的手势,并且针对此手势中的每个方向,与所有其他手势方向进行比较。如果方向相似(如上面的算法所示),那没关系,并继续检查下一个方向。如果连续两次不相似,则认为不匹配。

    结论

    所有这些都是由我自己开发的,因为我喜欢做我做的事情。我很想知道互联网上是否有任何地方可以找到类似于我正在做的事情的资源。

    我不想要任何神经网络解决方案。我希望它能够“受到控制”,而不需要任何培训。

    如果您有任何方法可以更好地完成上述算法,那么一些反馈意见也会很好,也会有效。

    你知道,它在某些情况下运行良好。但是,例如,当我制作一个“M”和一个颠倒的“V”时,它无法识别出差异。

    帮助将不胜感激。哦,如果你认为我描述的一切都很好,那就投票了!

2 个答案:

答案 0 :(得分:2)

一般想法

  1. M和V看起来不一样,因为你破坏了第一个和最后一个点?由于你无论如何都在方向上操作,所以看到第一个和最后一个点似乎有点多余(三个点的列表已经导致只有两个方向的列表)。

  2. 另外,我建议只是这样的原型。你会发现你是否容易受到噪音的影响(我预计不会,因为“每15个像素”)。

  3. Re:比较阶段

    我认为通过阅读Peter Norvigs出色的16行拼写检查文章,你会得到一些更通用的想法来匹配“密切相关”的动作。 here

答案 1 :(得分:2)

您基本上使用基于手势方向的马尔可夫(ish)FSM来计算形状的“接近度”。你不应该。 M看起来是相同的,无论是从左到右还是从右到左。 (也许我误解了这个细节。)

您应该使用openCV等内容来比较形状。特别是cvMatchShapes()。此函数使用Hu moments(a well-established metric)来比较binary shapes的“亲密度”。 Hu时刻用于comparing protein binding sites,并作为更复杂的形状识别算法(如SURF)的一部分。它应该足够你想要做的事情。