重量挙げの動作検出はそれぞれの姿勢をKinectで捉えることで実現することにしました。
ご存知のとおり、Kinectは三次元の位置と向きとを持つ関節点の集まり(スケルトン。ボーンとも呼ばれるが厳密には異なる)としてプレイヤーの姿勢をリアルタイムに取り込むことができます。このスケルトンが、定められた姿勢と一致しているか調べるのが判定の基本となります。
ただし本件においては、プレイヤーの姿勢にかなりのバラツキが予想されます。なぜならプレイヤーは専門の選手ではなく、不特定多数の一般人だから。バーベルを頭上に持ち上げるくらいが共通の理解で、具体的な姿勢のイメージはさまざまでしょう。私もよく知りませんでした。また、気軽に体験してほしいので個々人のキャリブレーションなども行いません。
とるべきポーズや指標を画面に示す手もありますが、それはできません。スポーツを陰から演出するのがこの研究の主旨であり、ゲームのようにシステムへの注意をプレイヤーに求めるのは狙いに反するからです。
というわけで、姿勢判定に幅を持たせる必要が生じました。どのようなアプローチがあるでしょうか。
- 既存の判定モジュールを用いる
- たくさんの姿勢を学習させ統計学的に判定する(機械学習)
- 姿勢の一致判定を甘くする
あまり思いつきませんでしたが、これでなんとかなるでしょう。
1はうまくはまればラクチンかつ信頼性が期待できます。ただ今回は構成的に使えないようだったのでパス(勉強不足の可能性あり)。
2は正攻法かもしれませんが、学習リソースがなく今回はパス。自分ひとりの体型とクセで学習させても精度が上がるか疑問。テストするのも自分だし、なにより時間がない…。でも本格的に多くの姿勢を見分けたい場合にはよい方法だと思います。ここでは瞬間的な姿勢を問題にしてますが、連続的な運動(ジェスチャー)判定にも使えます。
けっきょく、もっとも安直な3の方法をとることに。