カスタムジェスチャー、Kinect + Unity。 パート1

こんにちは、今日はUnityアプリケーションでカスタムジェスチャを使用する方法を学びます。これはKinect'a v2で行います。 ジェスチャーは、ステージの移動、オブジェクトの管理、ユーザーインターフェイスの操作など、さまざまなタスクに使用できます。最初の部分ではジェスチャーを学習するプロセスを検討し、 2番目の部分ではUnityのトレーニングから取得したモデルを使用します。 また、考えられる問題と解決策についても学びます。









必要なもの:

1. Unity 5.0 Pro

2. Kinect v2 SDK

3. Kinect v2 Unityプラグイン



プレリュード Kinectチェック



Kinect SDKをダウンロードしてインストールしたら、すべてが機能することを確認する必要があります。 Kinect SDKブラウザーを開き、Bodyの基本的なWPFの例を実行します-Kinectが見る人のスケルトンが表示されます。 すべてが正常であれば、先に進みます。そうでない場合は、SDKブラウザーで最初のサンプルであるKinect構成検証ツールを開き、機能しないものを確認します。



トレーニングサンプル



この例は、上から下に手を振る個別のジェスチャーを教えることを中心に構築されます。 ここでの「離散」とは、訓練されたモデルによってジェスチャーの事実を検出できることを意味します(特定の時間にジェスチャーがあったかどうかの信頼度を返します)。 個別のものとは対照的に、連続的なジェスチャーを学習することが可能です。 ここでの主な違いは、連続ジェスチャでは、ジェスチャの初期フェーズと最終フェーズの間の相対位置を見つけることができることです。 長いジェスチャーはチュートリアルの範囲外です。



トレーニングビデオを記録するには、 Kinect Studio V2.0が必要です。 インターフェースを見てみましょう:







Kinectからの出力が表示されない場合は、ボタンをクリックしてください 左上隅に接続します。 左側には、記録されるストリームのリストが表示されます。 デフォルトでは、オーディオおよびカラーカメラストリームはオフになっています。これはトレーニングに必要ないため、私たちに適しています。 ビデオの録画を開始するには、ボタンをクリックします 記録のために。



ビデオの録画に関する推奨事項:ビデオには「ポジティブ」と「ネガ」の両方が含まれている必要があるため、最初にいくつかの正しく実行されたジェスチャを記録し、次にいくつかの誤ったジェスチャを記録するのが理にかなっています。 別の人でビデオを録画する方が良いです。そうでなければ、特定の人のジェスチャーを実行する方法を学ぶことができます



トレーニング用のサンプルムービー




トレーニング



最後に、トレーニングのためにいくつかのビデオを記録しました。教育目的のために3〜4本のビデオで十分です。 それでは、学習に移りましょう。 これを行うには、ユーティリティVisual Gesture Builderを使用します。 次のようになります。







先に進み、新しいソリューションを作成し、ファイル->新しいソリューション、フォルダーを選択して名前を指定します。

作成されたソリューションと「新規プロジェクトの作成」に従ってRMBを選択すると、ロジックはVisual Studioに似ています。1つのソリューションに複数のプロジェクトを含めることができ、各プロジェクトは特定のジェスチャーです。 プロジェクトのセットアップは非常に明確で、右手の個別のジェスチャーに興味があるため、ミラーリング(トレーニング中のデータの複製とミラーリング)を削除し、下半身(下半身を無視)と左手(左腕を無視)を無視します。 手が重要な場合は、[手の使用]設定を使用します。 ここで無視するということは、学習プロセスにおいてこれらの身体の部分を考慮に入れないことを意味します。







次に、ビデオをプロジェクトに追加します(ビデオをプロジェクトフォルダーにコピーすることをお勧めします)。





ビデオを選択します。このパネルに興味があります。







これは、ビデオをポジティブセクションとネガティブセクションにマークするためのパネルです。 管理:左右に移動-矢印を使用して、それを目立たせてシフトし、選択を負に設定します-スペース、正に入力します。

開始するには、すべてを選択して負の値に設定します。そのためには、カーソルをストリップの先頭に設定し、shift + end(タイムライン全体が強調表示されます)を押し、スペースバーを押します。 次に、ビデオの矢印を動かし、ジェスチャで瞬間を探し、ジェスチャの正しい実行をそれぞれ選択し(シフトを忘れずに)、Enterキーを押します。

レイアウトプロセスの例




すべての操作の後、次のようなものを取得する必要があります。







上の青が正の場合、この時点で正しいジェスチャーが行われていますが、下のすべては負であり、私たちのジェスチャーはありません



そして最後-ソリューションをビルドします(ソリューションを右クリック->ビルド)、クリップの数に応じてお茶を飲むことができ、プロセスを遅らせることができます。 拡張子が.gdbのファイルは、クリップを含むフォルダーの出力に表示されます(したがって、すべてが一緒になるようにクリップをプロジェクトフォルダーにコピーしました)。 このファイルは、今後使用するトレーニング済みモデルです。



確認する



私たちが教えたことを見てみましょう。 ビジュアルジェスチャビルダーを実行し、「O」を押して.gdbファイルを選択します。左側には深度カメラからの出力があり、右側にはジェスチャごとに1つのウィンドウ(1つあります)を実行すると、Kinectの前に立って、 「ヘリンボーン」のようなもの:







このグラフは、ジェスチャが特定の時点にあるという信頼度を示しています(横軸は時間であり、縦座標は信頼度です)

最初の部分はこれですべてです。 2番目のパートでは、Unityでトレーニング済みモデルを使用する方法を見ていきます。



備考



実際には、私たち( Singularis lab )は実際のプロジェクトでカスタムジェスチャを使用し、開発中にいくつかの問題に遭遇しました。



-Kinectはハードウェアに非常に負荷がかかります- すべての usb3コントローラーで動作ませ 。 さらに、あるマシンでは、「ドライバーを最新バージョンに更新する」という推奨にもかかわらず、コントローラーでドライバーを苦しめなければなりませんでしたが、最新のドライバーでは動作しませんでしたが、古いドライバーで起動しました。



-トレーニングサンプルを記録する場合、極端に急ぐ必要はありません。ジェスチャーを同じように作成し、可能な限り多様化しようとすることも同様に有害です。 ある段階では、多くの人々と同じジェスチャー(スワイプハンド)の非常に多様な実行を伴う多くのビデオがありました。その結果、トレーニング後に多くの誤検知がありました。 さらに、Kinectは相対的な位置と傾きに敏感です。つまり、高さ0.5メートルでビデオを撮影し、既に2メートルの高さのデバイスでトレーニング済みのモデルを使用すると、結果が不愉快な驚きになる可能性があります。



有用性



-Kinect v2を使用したマイクロソフトラーニングビデオ

-Microsoftエバンジェリストのブログ 、Peter Daukintis、Kinect全般に関する多くの記事、およびジェスチャートレーニングとUnityとの統合



All Articles