Kinect for Windows SDK。 パート2.データストリーム



Kinectの機能については引き続きご紹介します。 前回 、Kinectのいくつかの機能の概要を説明しましたが、それぞれが間違いなく個別の記事に値することは間違いありません。 センサーがどのような形式でデータを送信するのか疑問に思ったことはありませんか? このストリームまたはデータストリームとは何ですか? ある日、月のない夜の暗い路地で、マニアックな人が忍び寄って、「Kinectのデータストリームの数はいくらですか?」、ためらうことなく、「3つ!」 ビデオストリーム(カラーストリーム)オーディオストリーム(オーディオストリーム) 、レンジファインダーデータ(深度ストリーム) 。 SDKはこれらのスレッド上に構築されます。 それらから始めます。

画像



Kinectの機能を使用するという目標を設定したら、最初に行うことは、目的のセンサーを選択し、必要なデータストリームを初期化することです。 最大4つのセンサーを同時にコンピューターに接続できることを覚えていますか? KinectSensorクラスを使用すること 、それらすべてを分類するのに大したことではありません。 ドキュメントには、最初に接続されたセンサーを選択して有効にする方法があります。



KinectSensor kinect = KinectSensor.KinectSensors.Where(s => s.Status == KinectStatus.Connected).FirstOrDefault(); kinect.Start();
      
      







その後、選択したセンサーに必要なストリームを構成して有効にすることができます。 そして、センサーから受信したデータの3つのストリーム上に、少しだけ滞在します。



センサーストリーム


MSDNを注意深く読んだ後、このスレッドに関する有用な情報を見つけることができます。 たとえば、開発者はビデオストリームを初期化するときに品質レベルと画像形式を自由に設定できます。 センサーから送信されるデータの量と速度は、USB 2.0帯域幅によって制限され、品質レベルに直接依存します。 したがって、1280x960の解像度の画像の場合、1秒あたりのフレーム数は12になり、640x480-30の解像度の画像の場合、画像形式はカラーモデルによって決定され、RGBまたはYUVのいずれかになります。



品質レベルと画像形式の組み合わせは、 ColorImageFormat列挙によって表されます。 RgbResolution1280x960Fps12RgbResolution640x480Fps30およびYuvResolution640x480Fps15 、および4番目の16ビットRawYuvResolution640x480Fps15の 3つの値は、各画像ピクセルの32ビットエンコーディングを決定します。 大きな驚きはYuvResolution640x480Fps15です。 MSDNは( ここここで )YUVがRGB32に変換されていることを明確に述べていますが、それにもかかわらず、YUVのままです...



センサーからのビデオストリームの受信を開始するには、この同じストリームを初期化する必要があります。



 //      RGB   640x480(30fps) kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30); //      ,         kinect.ColorFrameReady +=SensorColorFrameReady;
      
      







もう少し詳細なは、MSDNで見つけることができます。



センサー音声ストリーム


Kinectには、24ビットのアナログ/デジタルコンバーターを使用した4つのマイクの組み込みセットがあり、組み込みのオーディオプロセッサにはエコーキャンセレーションとノイズリダクションが含まれていることを既に知っています。 各マイクはわずかに焦点が合うように設定されています。 エコーまたはノイズリダクションが関係するかどうかは、開発者、つまり これらのオプションは、オーディオストリームの初期化段階で設定されます。 スピーカーとセンサー間の最適な距離は1〜3メートルです。



Kinectのオーディオ機能は、高品質のオーディオキャプチャ、オーディオ信号の位置決め、音声認識など、さまざまな方法で使用できます。 音声認識については後で説明しますが、Kinectの1つの機能について説明したいと思います。Kinectの説明は、ドキュメントでは見つかりませんでした(検索が不十分でしたか?)。 オーディオストリームの初期化には4秒弱かかります。 これを考慮する必要があります。たとえば、センサーのStart()メソッドを呼び出した後、オーディオストリームパラメーター-KinectSensor.AudioSourceを設定する前に4秒の遅延を作成します。 サウンドの方向決定する例は 、MSDNで見つけることができます。



センサー距離計データストリーム


最も興味深いストリームでなければなりません。 そして、それは主に、人物の追跡(骨格追跡)についてもっと知りたい人にとって興味深いものです。



このストリームは、各ピクセルがカメラの視野の特定の座標でセンサーの平面から最も近いオブジェクトまでの距離(ミリメートル単位)を含むフレームから形成されます。 ビデオストリームの場合と同様に、データレンジファインダーデータストリームに対して、1フレームの解像度を設定できます。これは、 DepthImageFormat列挙によって決定されます。 1秒あたり30のフレームレートで、開発者は解像度80x60( Resolution80x60Fps30 )、320x240( Resolution320x240Fps30 )および640x480( Resolution640x480Fps30 )を自由に選択できます。 また、前の部分で既に述べたように、「ワーキング」距離には2つの範囲があります。デフォルト範囲と近距離で、 DepthRange列挙によって定義されます。



 //    kinect.DepthStream.Range = DepthRange.Near; //       640x480(30fps) kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
      
      







しかし、それだけではありません。 実際には、各ピクセルの距離値は13ビットのみでエンコードされており、3ビットは人を識別するためのものです。 オブジェクトまでの距離が動作範囲外の場合(デフォルト範囲と近距離範囲を覚えていますか?)、ゼロまたは特定の定数が13ビットで返されます。 センサーの初期化時に人物の追跡を有効にすると、検出された人物のシリアル番号(1または2)が3ビットで返されます(この時点で人物が見つかった場合は0が返されます)。



 kinect.SkeletonStream.Enable();
      
      







それで、あなたと私は、最初に検討するKinectの機能、つまり人体の追跡(骨格追跡)に近づきました。



All Articles