Kinect for Windows SensorとSDK - その2 - ベータ版との違い

さて、調子に乗って続け、ようっ!!

SDKのベータ版時代から、アプリを作っていた皆さんにとって、もっとも気になっているのが「APIどう変わったの?」という点でしょう。

Managed版は、かなり変わっています。…ま、かなり整理されて使いやすくなっているので、早く新しいAPIになじんでくださいね。順にベータの時と比較しながら、説明していきます。

1. 名前空間変わりました!!

ベータ版までは、名前空間が、”Microsoft.Research.Kinect”、だったのが、”Microsoft.Kinect”に変わっています。…正式版になったな…という感じですね。
それに伴い、参照設定のアセンブリ名も変わっているので、ベータ版対応版のアプリを移植する際には、一旦昔のアセンブリの参照を削除して、新しく、Microsoft.Kinectを選択して直してください。

これにより、プログラムの先頭は、

ベータ版
 using Microsoft.Research.Kinect;
正式版
 using Microsoft.Kinect;

に変更してください。

2. センサーオブジェクト

ご存知?の通り、Kinect for Windows SDKでは、複数のKinectセンサーを一台のPCにつないで操作可能です。ベータ版の時は”Runtime”というかなり無理やりな名前のクラスからセンサーオブジェクトを取り出すようになっていましたが、正式版では、”KinectSensor”という名前のクラスが用意されています。

取り出すコードは、以下の様になります。

ベータ版
 Runtime kinectSensor;if (Runtime.Kinects.Count > 0) {  kinectKinect = Runtime.Kinects[0];  
正式版
 KinectSensor kinectSensor;if (KinectSensor.KinectSensors.Count > 0){ kinectSensor = KinectSensor.KinectSensors[0]; 

3. 各種ストリームの初期化

センサーオブジェクトが取り出せたら、次は各種ストリームの、初期化です。

 // 実画像ストリーム kinectSensor.ColorStream.Enable(  ColorImageFormat.RgbResolution640x480Fps30);  // 深度画像ストリーム kinectSensor.DepthStream.Enable(  DepthImageFormat.Resolution320x240Fps30);  // スケルトンストリーム kinectSensor.SkeletonStream.Enable();  kinectSensor.DepthStream.Range = DepthRange.Near;  

 ベータ版までは、ストリームのOpenメソッドをコールして初期化をしていました。正式版では、指定する引数向け列挙子も併せて整理されて、Enable()というメソッドをコールするように変わっています。ベータ版のときに比べてだいぶすっきりしています。

最後にRangeというプロパティを設定しています。これが、40cmという至近距離からのセンスを有効にする為の設定です。このプロパティは、DepthRange.Defaultという値が初期値として入っているので、このプロパティを設定しなければ、逆に今までどおり80cmからのセンスが可能なようになっています。実画像は、ベータまでは、VideoStreamという名前だったのが、ColorStreamという名前に変更になっている点にも留意してください。

4. 計測の開始

後は、kinectSensorのDepthFrameReadyや、SkeletonFrameReady、ColorFrameReadyにイベントハンドラを登録して、Start()メソッドをコールすれば、計測が開始されます。

5. Kinectセンサーの抜き差し

他に、KinectSensor.KinectSensorsプロパティには、StatusChangedイベントが用意されています。このイベントにハンドラを登録しておけば、PCへの新たなKinectセンサー挿入を感知可能です。

以上、このポストはこれにて終了。深度やスケルトン、その他情報の取得の詳細は、後続のポストで。