【发布时间】:2011-10-02 22:31:47
【问题描述】:
我正在为手机开发手势识别程序。我想要完成的是让用户绘制自己的“模式”,然后让这些模式做不同的事情。
存储模式 - 我称之为“模式保存”算法
当手势最初被绘制和记录时。这也是我用来抓取用户绘制的内容并用于比较的算法:
- 用户开始绘制他的图案。对于每 15 个像素,一个点被放置在一个称为“列表”的列表中。
- 图案绘制完成后,将从列表中删除第一个和最后一个点。
- 对于现在列表中的每个点,它们的连接被转换为一个方向枚举(包含 8 个方向),然后将其添加到一个列表中,现在称为“列表”。
- 过滤器 1 开始,一次通过列表中的 3 个方向。如果左方向与右方向相同,则去掉中间方向。
- 过滤器 2 开始,删除重复的路线。
- 过滤器 3 开始,去除假定的噪音。假设的噪声是通过反复出现的成对的重复方向来检测的。 (例如,“left upper-left left upper-left”正在变成“upper-left”或“left”)。
- 过滤器 4 开始,去除更多假设的噪音。假设噪声是通过(再次)一次比较列表中的 3 个方向来检测的,如步骤 4(过滤器 1)中所示,但是在未检查方向是否完全相等的情况下,仅几乎相等(例如,左侧是几乎等于“左上”和“左下”)。
路线列表现在存储在一个文件中。路线列表保存为手势本身,以供以后比较。
比较模式
一旦用户绘制了一个图案,“图案保存”算法也会用于该图案(但只是为了过滤掉噪音,而不是实际保存它,因为那会很愚蠢)。
然后将此过滤后的模式与手势列表中的所有当前模式进行比较。这种比较方法描述起来相当复杂,而且我的英语也没有我应该的那么好。
简而言之,它会遍历用户输入的手势,并针对该手势中的每个方向与所有其他手势方向进行比较。如果一个方向相似(如上面的算法所示),那没关系,它会继续检查下一个方向。如果连续 2 次不相似,则视为不匹配。
结论
所有这些都是我自己开发的,因为我喜欢做我所做的事情。我很想知道 Internet 上是否有任何地方可以找到与我正在做的事情类似的资源。
我不想要任何神经网络解决方案。可以说,我希望它“在控制之下”,无需任何培训。
如果您有任何方法可以让我更好地完成上述算法,一些反馈也会很好,并且也会起作用。
你看,它在某些情况下工作得很好。但是例如,当我制作一个“M”和一个倒置的“V”时,它无法识别出区别。
我们将不胜感激。哦,如果您认为我描述的一切都很好,请投票赞成这个问题!
【问题讨论】:
-
有问题吗?如果有任何代码,我会推荐codereview.stackexchange.com