Kinectを使ってPythonでジェスチャー認識をしたいです。
いくつかの理論を読んだ後、最善の方法の 1 つは、既知のジェスチャ データを使用した Hidden Markov Model (HMM) (baum welch または一部の EM メソッド) を使用した教師なし学習であり、訓練された HMM のセット (ジェスチャごとに 1 つ) を達成することだと思います。認識したい)。
次に、観測されたデータの最大対数尤度 (ビタビを使用) をトレーニング済みセットの HMM と一致させる認識を行います。
たとえば、データ (右手の座標 x、y、z) を kinect デバイスでいくつかのジェスチャー (挨拶、パンチを蹴る、手で円を描く) で記録して、いくつかのトレーニングを行います。
# training
known_datas = [
tuple( load_data('punch.mat'), 'PUNCH' ),
tuple( load_data('say_hello.mat'), 'HELLO' ),
tuple( load_data('do_circle_with_hands.mat'), 'CIRCLE' )
]
gestures = set()
for x, name in known_datas:
m = HMM()
m.baumWelch(x)
gestures.add(m)
次に、最大 loglik を実行して観測された新しいデータの認識を実行し、訓練された各 HMM の最大 loglik を持つ前に保存されたジェスチャを選択します。
# recognition
observed = load_data('new_data.mat')
logliks = [m.viterbi(observed) for m in gestures]
print 'observed data is ', gestures[logliks.index(max(logliks))]
私の質問は次のとおりです。
- これはまったくばかげたことですか?
- 実際のケースに設定されたトレーニングの数は?
- 各 HMM の状態数は?
- リアルタイムでそれを行うことは可能ですか?