我有一个保存为这种格式的Python坐标列表:[(34,55),(44,66)....]
。这个列表表示屏幕上手绘的一条线。现在我需要检查这条线/形状是否与预先保存的一些基本形状列表(如正方形、圆形、三角形等)匹配。(基本上我需要识别用户的手势。)请建议一些机器学习技术来实现这一点。如果这是重复的问题,请提供链接。(我更喜欢Python解决方案。)
附注:用户输入的形状来自摄像头/视频。这是通过OpenCV跟踪的对象所经过的路径。现在我需要通过在摄像头前挥动对象来识别用户绘制的形状。
回答:
这听起来与我在本科论文中做的关于“在线识别手写数学符号”非常相似。
你可以用神经网络来识别这些模式。插值线条,将线上的点标准化到固定数量,以(x,y)坐标作为输入特征,以形状类型作为输出节点(一个节点代表圆形,一个节点代表三角形,…)。
你可以用TensorFlow创建这样的网络。这里是我对TensorFlow的两点看法。
动态时间规整
这是一种模式匹配方法。请参阅我的本科论文或维基百科。
机器学习的替代方案
如果你想要更简单的方法,并且只有很少的类别(例如< 30),那么你可能也可以手工设计一个算法。我建议查看Douglas-Peucker算法来找到最重要的点。我在本科论文中描述过它。当你访问这个交互式预处理页面时,你可以对这个算法有一个感觉(你可以在write-math.com上绘制一些东西,点击画布下方的“绘图”,点击“预处理”,通过勾选复选框来应用它)