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センサー挿入を感知可能です。

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

 

 

 

Comments (0)

Skip to main content