我对隐马尔可夫模型
有疑问。我正在用 C#
在 Kinect
上编写一个用于手势识别的应用程序(简单的手势,如滑动、波浪、圆圈等)。我写了一个手势记录系统,之后我创建了一个特征提取器来计算点之间的速度,我还计算方向(点对之间的角度)——我认为这是一种简单的矢量量化方法,因为我创建了一个带有代码字的代码本1-18。码字是每 20 度的角度间隔(例如角度 12dg 是码字 1,45dg = 码字 3 等)。
现在我想我需要创建一个HMM
并使用一些Forward-Backward
算法来学习。然后一些Bayes
分类方法并完成。
我的问题:
- 我的步骤错了吗?
- 如何创建 HMM?谁能以编程方式描述它应该是什么样子?
- 如何为测试执行实时手势匹配?
最佳答案
免责声明:我是我将要列出的一些教程/软件的作者。
您的步骤看起来不错。它们非常相似,例如,Lee and Kim 使用的方法。 (减去阈值模型部分)。
也许你可以关注this guide on HMMs in C# .它是我写的,有一些关于如何执行手势识别的例子。但是,该指南创建连续密度 HMM 而不是离散 HMM。您的矢量量化使您的特征离散,所以我想您会对使用离散密度 HMM 更感兴趣。要使其适用于离散模型,您唯一需要做的更改是删除模型创建/学习中的通用参数。
要执行实时手势,您可以使用某种特定标记来指示手势的开始和结束,或者您可以使用类似于 Lee 和 Kim 的阈值模型的技术。上述指南中描述的框架支持这些。
我曾使用相同的技术从事过一个类似的项目,我可以说 HMM 非常适合这项任务。
关于algorithm - 从数据构建 HMM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875221/