我目前正致力于手势识别应用程序,我正在使用HMM(通过Jahmm)。目前我有两个手势(上下),所以我建立了2个HMM,并提供了一些训练数据。
我使用BaumWelchLearner训练他们,我创建了一个从我的系统中获得的“样本”观察序列,我必须将其分类。
我认为我设法从我发现的小支持中完成了上述步骤。但目前我陷入了最后阶段,我正在尝试计算最符合当前序列的HMM,但我没有任何有用的输出(或者我可能无法理解它们)。这是我的示例代码,后跟输出。
//gesture classes
HmmUp up = new HmmUp();
HmmDown down = new HmmDown();
final Hmm<ObservationDiscrete<DirectionVector>> upLearnt;
final Hmm<ObservationDiscrete<DirectionVector>> downLearnt;
//train - should read TRAINED HMM OBJECTS in application
BaumWelchLearner bwl = new BaumWelchLearner();
bwl.setNbIterations(100);
upLearnt = bwl.learn(up, up.getTrainingMaterial());
downLearnt = bwl.learn(down, down.getTrainingMaterial());
ArrayList<Hmm<ObservationDiscrete<DirectionVector>>> trainedHmms = new ArrayList<Hmm<ObservationDiscrete<DirectionVector>>>(){{
add(upLearnt);
add(downLearnt);
}};
ArrayList<ObservationDiscrete<DirectionVector>> currentSequence = new ArrayList<ObservationDiscrete<DirectionVector>>(){{
add(new ObservationDiscrete<DirectionVector>(DirectionVector.NoMovement));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Down));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Up));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Up));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Up));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Up));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Up));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.UpLeft));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Null));
add(new ObservationDiscrete<DirectionVector>(DirectionVector.Null));
}};
//get the observation from the device (continuously feeding - 10 states always with nulls at the end?)
for (Hmm<ObservationDiscrete<DirectionVector>> hmm : trainedHmms) {
ViterbiCalculator vc = new ViterbiCalculator(currentSequence, hmm);
for (int i = 0; i < vc.stateSequence().length; i++)
{
System.out.println(vc.stateSequence()[i]);
}
System.out.println(vc.lnProbability()); //e to the ln(x) = x
}
这是我目前的输出,似乎是“空”状态序列和负概率?!!!
0 0 0 0 0 0 0 0 0 0 -1.7976931348623157E308
0 0 0 0 0 0 0 0 0 0 -56.294579216353064