没有神经网络的手机触摸手势识别
本文关键字:触摸 手势识别 手机 神经网络 | 更新日期: 2023-09-27 18:10:11
我正在为手机开发一个手势识别程序。我试图完成的是让用户绘制自己的"图案",然后让这些图案做不同的事情。
存储模式- "pattern save"我称之为算法
当手势最初被绘制和记录时。这也是我用来抓取用户绘制的内容并将其用于比较的算法:
- 用户开始绘制图案。对于每15个像素,一个点被放置在一个名为"列表"的列表中。
- 一旦图案绘制完成,第一个和最后一个点将从列表中删除。
- 对于现在列表中的每个点,它们的连接被转换成一个方向枚举(包含8个方向),然后也添加到一个列表中,现在称为"列表"。
- 过滤器1开始,在列表中一次经过3个方向。如果左方向与右方向相同,则移除中间方向。
- 过滤器2开始,删除重复方向
- 过滤器3开始,去除假设的噪声。假设噪声是通过反复出现的重复方向对来检测的。(例如:"left upper-left left - upper-left"正在变成"左上角"或"left"。
- 过滤器4开始,去除更多的假设噪声。假设这次噪声是通过(再次)在步骤4(过滤器1)中一次比较列表中的3个方向来检测的,但是方向不检查是否完全相等,只检查是否几乎相等(例如,左几乎等于左上角);和"lower-left"。
指示列表现在存储在一个文件中。方向列表被保存为手势本身,用于以后的比较。
比较模式
一旦用户绘制了图案,"图案保存"算法也用于该模式(但只是过滤掉噪声,而不是实际保存,因为这将是愚蠢的)。
然后将此过滤模式与手势列表中的所有当前模式进行比较。这种比较方法描述起来很复杂,而且我的英语不太好。简而言之,它遍历用户输入的手势,并将该手势中的每个方向与所有其他手势的方向进行比较。如果方向相似(如上面的算法所示),则没关系,它会继续检查下一个方向。如果连续两次不相似,则认为不匹配。
结论所有这些都是我自己开发的,因为我喜欢做我做的事情。我很想知道在互联网上是否有什么地方可以找到与我正在做的事情类似的资源。
我不想要任何神经网络解决方案。我希望它"在控制之下"。可以说,不需要任何培训。
如果你有任何方法可以让我把上面的算法做得更好,一些反馈也会很好,也会很好。
你看,它在某些情况下工作得很好。但举例来说,当我做"M"和一个上下颠倒的"v"字,它无法分辨出两者的区别。
请帮忙。哦,如果你认为我描述得很好,请投票!
总体思路
-
M和V看起来不一样吗,因为你把第一个点和最后一个点都去掉了?丢弃第一个和最后一个点似乎有点多余,因为你是在操作方向(三个点的列表已经导致只有两个方向的列表)。
-
此外,我建议只是原型这样的东西。你会发现你是否会受到噪音的影响(我希望不会,因为"每15个像素")。
Re:比较阶段
我认为通过阅读Peter Norvigs优秀的16行拼写检查器文章,你会得到一些更通用的匹配"密切相关"动作的想法。
你基本上是在使用基于手势方向的马尔可夫FSM来计算形状的"接近度"。你不应该。无论是从左到右还是从右到左,M
看起来都是一样的。(也许我误解了这个细节。)
你应该使用像openCV这样的工具来比较形状。特别是cvMatchShapes()
。这个函数使用Hu矩(一个公认的度量)来比较二元形状的"接近度"。Hu矩用于比较蛋白质结合位点,并作为SURF等更复杂的形状识别算法的一部分。对于你想要做的事情,它应该足够好了。