我有一个概念问题。我正在创建一个使用Kinect进行手势识别的程序。我有一些手势数据分为类别(圆圈,滑动等)。现在我只分析一只手。我记录了所有帧(30fps)。
(*)为了使我的数据离散且位置无关,我计算连续点之间的角度。
现在我想为每种手势类型创建hidden Markov models
。
现在我需要为HMM
确定一些状态。怎么做?我想找到最长的手势(及时)。例如。我有3个手势,第一个1,2s
,第二个1,4s
和第三个1,5s
。所以1,5s
是最长的。现在我想每250毫秒(每秒4个样本)为每个帧应用(*)。因为我的最长手势是1,5s
长,所以NumberOfStatesForHMM = 1500ms / 250ms = 6 states
- 这应该是非常理想的?
我不确定如何定义HMM
的状态:/如果我的想法是正确的,那么当有(例如)6个状态和一个手势在{{1}之后结束时如何计算转移概率所以我分析了4个状态(状态4到5和5到6的转换概率等于0?)。
我读过THIS论文,但我不太确定如何解决我的问题...
答案 0 :(得分:1)
我参与了一个类似的动态手势识别项目(虽然使用更简单的网络摄像头而不是Kinect)。在我的例子中,我将我的手势分类为左,右,圆 - 顺时针,圆 - 反时钟等等。由于您将考虑连续点之间的角度,这将是您的观察序列。至于各州,你的国家和观察之间可能不一定总是存在逻辑关系。我正在做8个手势。现在,每个输入模式我有大约12个观察符号但是没有。每个班级的州都不同。例如: 左:2个国家 右:3个国家 顺时针旋转:4个国家等。
优势在于我从Viterbi algo获得的State Sequence输出,我可以直接获得最大状态数,因此我的Class。此外,在学习阶段,我的Baum-Welch实现会根据编号自动学习课程。国家。您可以参考我的博客文章[其中描述了我使用HMM识别手势的方法,就像我在项目中所做的那样]以获取附加信息。我希望它对你有所帮助。