Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无神经网络的手机触摸手势识别_C#_Gesture Recognition - Fatal编程技术网

C# 无神经网络的手机触摸手势识别

C# 无神经网络的手机触摸手势识别,c#,gesture-recognition,C#,Gesture Recognition,我正在为手机开发一个手势识别程序。我试图完成的是让用户绘制他们自己的“模式”,然后让这些模式做不同的事情 存储模式——我称之为“模式保存”算法 这是在最初绘制和记录手势时发生的。这也是我用来抓取用户所画内容并用于比较的算法: 用户开始绘制其图案。对于每15个像素,将在称为“列表”的列表中放置一个点 绘制图案后,第一个和最后一个点将从列表中删除 对于现在列表中的每个点,它们的连接将转换为方向枚举(包含8个方向),然后该枚举也将添加到列表中,现在称为“列表” 过滤器1开始,在列表中一次通过3个方向。

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

存储模式——我称之为“模式保存”算法 这是在最初绘制和记录手势时发生的。这也是我用来抓取用户所画内容并用于比较的算法:

  • 用户开始绘制其图案。对于每15个像素,将在称为“列表”的列表中放置一个点
  • 绘制图案后,第一个和最后一个点将从列表中删除
  • 对于现在列表中的每个点,它们的连接将转换为方向枚举(包含8个方向),然后该枚举也将添加到列表中,现在称为“列表”
  • 过滤器1开始,在列表中一次通过3个方向。如果左方向与右方向相同,则删除中间方向
  • 过滤器2开始,删除重复方向
  • 过滤器3开始,去除假定的噪声。假设的噪声是通过一对重复方向反复出现来检测的。(例如,“左上左上”变为“左上”或“左”)
  • 过滤器4开始,去除更多假定的噪声。假设此时通过(再次)在列表中一次比较3个方向来检测噪声,如步骤4(滤波器1)所示,但如果未检查方向是否完全相等,则仅几乎相等(例如,左几乎等于“左上”和“左下”)
  • 方向列表现在存储在一个文件中。方向列表保存为手势本身,用于以后比较

    比较模式 一旦用户绘制了一个模式,“模式保存”算法也被用于该模式(但只用于过滤噪声,而不是实际保存噪声,因为这样做很愚蠢)

    然后将此过滤模式与手势列表中的所有当前模式进行比较。这种比较法描述起来相当复杂,而且我的英语也不如我应该的那么好

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

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

    我不想要任何神经网络解决方案。可以说,我希望它处于“控制之下”,不需要任何培训

    一些反馈也会很好,也会很有效,如果你有任何方法,我可以把上面的算法做得更好

    你看,它在某些情况下运行良好。但举例来说,当我做一个“M”和一个倒置的“V”时,它无法识别出区别

    我们将不胜感激。哦,如果你认为我把每件事都描述得很好的话,那就投票支持这个问题吧

    总体思路
  • M和V不会因为你丢弃了第一个点和最后一个点而看起来相同吗?废弃第一个和最后一个点似乎有点多余,因为你无论如何都要按方向操作(三个点的列表已经导致只有两个方向的列表)

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

  • Re:比较阶段
    我想,通过阅读彼得·诺维格斯(Peter Norvigs)优秀的16行拼写检查器文章,你会对匹配“密切相关”的动作有一些更一般的想法

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


    您应该使用类似的方法比较形状。特别是。此函数使用(a)来比较的“接近度”。Hu矩用于更复杂的形状识别算法,如SURF,并作为其一部分。对于您要做的事情,它应该足够好。

    有问题吗?如果有任何代码,我建议删除第一点和最后一点的原因是由于Windows Phone上触摸的性质。在手机上运行时,第一点和最后一点通常显示为噪音。很有趣,但我不希望使用第三方组件。