たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

HoloLens と Kinect v2 を連携させる -その3- (かめはめ波を撃ってみる)

こんにちは、たるこすです。
前回に引き続き、 HoloLens と Kinect v2 の連携を行います。

前回のブログはこちらです。

今回はジェスチャ認識を行い、かめはめ波を撃てるようになりたいと思います。

Kinect v2 を接続した PC で動かす Unity アプリケーションでジェスチャ認識を行い、認識結果を UNET で HoloLens に送ります。
その1 で紹介した Body(骨格) 情報を送るコードを変更し、Body とジェスチャの認識結果を送るように変更しました。
HoloLens に送信する仕組みはほぼ同じですので、このページでは Unity アプリケーションでジェスチャ認識を行う方法を紹介します。

Unity + Kinect v2 でジェスチャ認識

まずは、認識させたいジェスチャの正解データとそれを使った学習済みモデルを作成します。

以下のサイトを参考にさせていただきました。
参考: Kinect V2 SDK付属のVisual Gesture Builderの使い方 gbdファイルの作成方法

Kinect のデータの保存には Kinect Studio、ジェスチャの学習には Visual Gesture Builder を利用します。
両者とも Kinect v2 の SDK をインストールした際にインストールされています。

Kinect Studio でデータの保存

はじめに、Kinect Studio で Kinect のデータを保存します。

Kinect Studio を起動し、Record タブを開きます。
左上のケーブルのアイコンをクリックし、 Connected の状態にします。
赤丸の録画開始ボタンを押すと、データの保存が開始されます。

認識させたいジェスチャを何度か行ったら、録画を停止します。

今回は、かめはめ波の構えの動作とかめはめ波を放つ動作を行いました。

Visual Gesture Builder でジェスチャの学習

次に、Visual Gesture Builder を使ってジェスチャの学習を行います。

Visual Gesture Builder を起動したら、 File > New Solution から、新しいソリューションを作成します。

次に、Help > Gesture Wizard から Gesture Wizard を実行します。
Gesture Wizard では、認識させたいジェスチャの設定を行います。

ジェスチャの名前を設定します。

下半身の情報を使うかどうかを設定します。
今回は下半身の動きに関係なく認識してほしかったので、「No」を選択しています。

手の状態(グー、チョキ、パー)を認識に利用するかを選択します。 今回は手の状態が正しく認識されていなくても、ジェスチャ認識がされてほしかったので「No」を選択しています。

体のどの部位を認識に使うかを選択します。
今回は両手を利用します。

左右を区別するかどうかを選択します。
今回は右側に構える場合左側に構える場合を区別するため「Yes」を選択しました。
ただ、いま思うと区別する必要はなかったので「No」でも良かったです。

あるジェスチャに遷移している状態を認識したいかどうかを選択します。
今回はジェスチャを行っている状態が認識できればよかったので、「No」を選択しました。

以上でジェスチャの設定は終わりです。

左右を区別する設定にしたため、Kamehameha_Left と Kamehameha_Right が作成されましたが Kamehameha_Left は後で削除しました。

Kamehameha_Right を右クリックし、 Add Clip から先ほど保存した Kinect のデータを選択します。

下のほうに表示されるタイムラインを操作し、Kamehameha_Right として認識させたいモーションを行っている時間帯を探します。
認識させたい時間帯を Shift + → キーを押して選択し、↑ キーを押します。

同様に構えのモーションについてもジェスチャの設定とモーションを行っている時間帯の設定を行いました。

最後にソリューションを右クリックし、Build をクリックします。

Build が成功し、 gdb ファイルが作成されれば完了です。

Unity でジェスチャ認識

Unity でのジェスチャ認識は、以下のページを参考にしました。

Assets フォルダの中に StreamingAssets フォルダを作成し、先ほど作成した gdb ファイルをインポートします。

次に、空のゲームオブジェクトを作成します。
それに以下のスクリプトをアタッチし、Inspector で gdb ファイルの名前と BodyManager を設定します。

VisualGestureBuilderManager.cs

これで、GestureFrameArrived メソッド内で認識結果を取得できます。
Gesture をキー、DiscreteGestureResult を値とした辞書型で結果を取得でき、 DiscreteGestureResult の Detected が認識されたかどうか、Confidence が認識の信頼性(0~1)を表しています。

HoloLens + Kinect v2 でかめはめ波を撃ってみる

ジェスチャ認識結果を HoloLens 側の Unity アプリケーションに送ります。
構えのジェスチャが認識されればエネルギー玉を大きくし、かめはめ波のジェスチャが認識されればかめはめ波のエフェクトを表示するようにしました。

Kamehameha by HoloLens + Kinect v2


今回はかめはめ波を撃つということを目標に Kinect のジェスチャ認識を HoloLens で利用してみましたが、他にもいろいろと応用できそうです。
例えば、映画に出てきそうな空中ディスプレイを手で操作する UI を作ってみるのも面白そうです。