Kinect for Windows SDK。 パート3.機能



人物の追跡


このような素晴らしい機能により、Kinectは人の姿と動きを認識することができます。 そして実際には、1つではなく6つです! 最大6人がセンサーの視野にいると判断するという意味では、収集できるのは2つの詳細情報のみです。 写真を見てください:



画像



個人的に、最初の質問は、「なぜ彼[Kinect]はこれら2つの唐辛子の完全な20ポイントスケルトンを構築し、残りはへそだけを示したのですか?」でした。詳細なスケルトンは2つの認識された図で構成され、残りは少なくとも気づいたという事実に満足しています。 MSDNには、たとえば 、センサーに最も近い人々の詳細なスケルトンを構築するために、この動作を変更する方法のもあります。



構築されたスケルトンのポイントはジョイントと呼ばれ、ジョイント、ジョイント、ノードとして変換できます。 結び目はより適切な翻訳であるように思われ、頭を関節と呼ぶことさえ、どういうわけかあまり良くありません。



したがって、フレーム内の数字に関する情報を取得するためにアプリケーションで最初に行う必要があるのは、目的のストリームを有効にすることです。



//          sensor.SkeletonFrameReady += SkeletonsReady; //   sensor.SkeletonStream.Enable();
      
      





2番目は、SkeletonFrameReadyイベントを処理することです。 あとは、フレームから関心のある人物に関する情報を抽出するだけです。 1つの図- スケルトンクラスの1つのオブジェクト。 オブジェクトは追跡の状態に関するデータを保存します-TrackingStateプロパティ(完全なスケルトンが構築されるか、フィギュアの位置についてのみ知られているかどうか)、フィギュアのノードに関するデータはJointsプロパティです。 これは基本的に、キーがJointType列挙の値である辞書です。 たとえば、左膝の位置を取得したい-これほど簡単なものはありません!



 Joint kneeLeft = skeleton.Joints[JointType.KneeLeft]; int x = kneeLeft.Position.X; int y = kneeLeft.Position.Y; int z = kneeLeft.Position.Z;
      
      





JointType列挙値は、元々ウィトルウィウス的人物の図に示されています。



画像



これらの行の前に、20ノードのスケルトンについて書きました。 常に可能とは限らないビルド。 そのため、着座骨格追跡と呼ばれる体制がありました。 このモードでは、センサーは完全な10ノードスケルトンを構築しません。



画像



Kinectがこのモードで図の認識を開始するには、ストリームの初期化中にSkeletonStreamオブジェクトのTrackingModeプロパティを設定するだけで十分です。



 kinect.SkeletonStream.TrackingMode = SkeletonTrackingMode.Seated;
      
      





座っている人物の追跡モードでは、センサーは最大6つの人物を認識し、2つの人物を追跡することもできます。 しかし、機能もあります。 たとえば、センサーが「通知」するには、動き回って手を振る必要がありますが、完全なスケルトン認識モードではセンサーの前に立つだけで十分です。 座った人物の追跡は、より多くのリソースを消費する操作であるため、FPSを削減する準備をしてください。



シリーズの別の記事-Kinectでキューブを再生します 。これは、人物の追跡のテーマに完全に専念しています。



音声認識


厳密に言えば、音声認識は追加のSDKを使用し、センサーはオーディオ信号ソースとして機能するため、Kinectの組み込み機能ではありません。 したがって、音声認識アプリケーションの開発には、 Microsoft Speech Platformのインストールが必要になります。 必要に応じて、異なる言語パックをインストールできます。クライアントマシンには、個別のパッケージ(音声プラットフォームランタイム)があります。



一般に、音声プラットフォームの使用例は次のとおりです。

  1. システムで利用可能なものから必要な言語の認識エンジンを選択します。
  2. 辞書を作成し、選択したハンドラーに渡します。 人間的に言えば、アプリケーションが認識できる単語を決定し、文字列の形で認識プロセッサに渡す必要があります(各単語の音でオーディオファイルを作成する必要はありません)。
  3. プロセッサのオーディオソースを設定します。 Kinect、マイク、オーディオファイルを使用できます。
  4. ハンドラーにコマンドを与えて認識を開始します。


その後、ハンドラーが単語を認識するたびに発生するイベントを処理するためだけに残ります。 このプラットフォームで作業する例は、記事Program、aport!にあります。



顔追跡


図の追跡とは異なり、顔の追跡は 、ビデオストリーム(カラーストリーム)およびレンジファインダーのデータストリーム(深度ストリーム)から取得したデータに基づいて、プログラムによって完全に実装されます。 したがって、クライアントコンピューターのリソースによって、トラッキングの動作速度が決まります。



顔追跡顔認識と同じではないことに注意してください。 おもしろいですが、いくつかの記事で、Kinectが顔認識機能を持っているという話に正確に会いました。 それでは、顔追跡とは何で、どこで役立つのでしょうか?



顔追跡とは、87個のノードの顔パターンの構造を使用して、フレーム内の人の顔を追跡することです。 MSDNによると、複数の人を監視することは可能ですが、上限については言われておらず、おそらく2人に相当します(非常に多くの人にとって、センサーはN節点スケルトンを構築できます)。 あなたのキャラクター(アバター)があなたの顔に表示される感情のパレット全体を伝えることができるように、機能はゲームで便利です。 あなたの気分に適応するアプリケーション(涙または遊び心); 顔認識アプリケーション、最終的に、または感情(Dr. Lightman?)



だから、スキーム。 実際には、ここにあります(私の夢のスキーム):



画像



これらの87のノードに加えて、目、鼻、唇の角、頭の境界など、さらに13の座標を取得できます。 SDKは、次の図に示すように、3Dフェイスマスクを作成することもできます。



画像



これで、Face Tracking SDKによって実装された顔追跡の一般的な理解を身に付けたので、今度は彼についてより深く知る時間です。 Face Tracking SDKは、Developer Toolkitに含まれているCOMライブラリ(FaceTrackLib.dll)です。 管理されたプロジェクトで安全に使用できるMicrosoft ラッパープロジェクト(ラッパー) Microsoft.Kinect.Toolkit.FaceTrackingもあります 。 残念ながら、提供されているリンクを除いて、ラッパーの説明を見つけることはできませんでした(アクティブな開発が進行中で、Face Tracking SDKがKinect SDKに含まれていない間は、MSDNにヘルプが表示されることしか期待できません)。



いくつかのクラスのみに焦点を当てます。 目玉FaceTrackerクラスで、奇妙なことに十分です。 彼のタスクには、追跡エンジン(エンジン)の初期化と、フレーム内の人の動きの追跡が含まれます。 オーバーロードされたTrackメソッドを使用すると、ビデオカメラと距離計のデータを使用して人を検索できます。 このメソッドのオーバーロードの1つは人間の姿、 スケルトンを取ります。これは検索の速度と品質にプラスの影響を与えます。 FaceModelクラスは、3Dモデルの構築、およびモデルのカメラ座標系への変換を支援します。 Microsoft.Kinect.Toolkit.FaceTrackingプロジェクトでは、ラッパークラスに加えて、よりシンプルですが、それほど有用ではないタイプを見つけることができます。 たとえば、 FeaturePoint列挙は、顔の輪郭のすべてのノードを記述します(上記の87ポイントの図を参照)。



一般に、追跡を使用するアルゴリズムは次のようになります。

  1. センサーを選択し、ビデオストリーム(カラーストリーム) 、レンジファインダーのデータストリーム(深度ストリーム) 、および図形追跡ストリーム(スケルトンストリーム)を有効にします。
  2. AllFramesReadyセンサーイベントハンドラーを追加します。これは、すべてのスレッドのフレームが使用可能になったときに発生します。
  3. イベントハンドラーでFaceTrackerを初期化し(まだ実行されていない場合)、フレーム内で見つかった形状を調べて、構築された顔パターンを収集します。
  4. 顔のパターンを処理します(たとえば、構築された3Dマスクを表示したり、フレーム内の人々の感情を判断したりします)。


私は意図的にコード例を提供しないことに注意したい 数行で例を挙げることはできませんが、巨大な複数行のリストで記事をオーバーロードしたくありません。



フレーム内の顔の品質は、頭部までの距離とその位置(傾斜)の両方に依存することに注意してください。 センサーの許容ヘッドチルトは、上下±20°、左右±45°、側面傾斜±45°と見なされます。 最適な値は、上下、左右、および横向きの傾きに対してそれぞれ±10°、±30°、および±45°です( 3Dヘッドポーズを参照)。



Kinectスタジオ


Kinectに初めて何かを書き込もうとすると、何かが欠けているという感覚がすぐに消えません。 そして、特定のジェスチャーで正確に機能するように100回目のブレークポイントを設定し、カメラの前で100回目のジェスチャーを行うと、実際に何が欠けているのかがわかります! シンプルなエミュレータ。 必要なジェスチャーを記録し、落ち着いて座ってデバッグできるようにします。 奇妙なことに、Kinectの開発を経験した世界中の開発者から寄せられた善の光線が目標を達成しました。 Developer Toolkitには、 Kinect Studioと呼ばれるツールが含まれています。



Kinectスタジオ



Kinect Studioは、デバッガーまたはエミュレーターと考えることができます。 その役割は非常にシンプルで、センサーから受信したデータを記録してアプリケーションに送信するのに役立ちます。 記録したデータを何度も再生できます。必要に応じてファイルに保存し、しばらくしてからデバッグに戻ります。



Kinect Studioを開始するには、アプリケーションに接続してセンサーを選択します。 これで、センサーデータの記録を開始するか保存したデータを挿入する準備がすべて整いました。



画像



あとがき


レビュー記事は、計画されていませんでしたが、作業中に複数の変更が行われましたが、結果として3つの部分に分割されました。 それらの中では、World Wide Webの広がりで見つけた資料を集めようとしました。 それでも、MSDNはこれまでも現在も主な知識源です。 現在、Kinectは、ただの楽しみのためだけでなく知覚できる製品よりも、ただクロールすることを学んでいる子猫のようです。 私自身も、ある種の懐疑心をもって彼を扱っています。 しかし、明日何が起こるか誰が知っています。 現在、Kinectはゲーム業界で良い結果を示しており、Kinect for Windowsは世界中の開発者に創造性の範囲を開きます。



All Articles