デバイスの検出
接続されている Kinect センサーの数を得る
Kinect SDK の各種センサー機能は Microsoft.Kinect. 名前空間で宣言されています。Kinect の機能を利用するソースコードでは、この名前空間を using ディレクティブでインポートしましょう。
アプリケーションから Kinect センサーを利用するには、実行している PC に Kinect が接続されているかどうかを調べる必要があります。Xbox 360 には 1 台の Kinect しか接続できませんが、PC には複数台の Kinect を接続できます。ただし、骨格情報を得られるのは 1 台からのみで、複数台から同時に骨格を取得することはできません。映像は、同時に取得できます。
正確には、複数台の Kinect が同一の USB コントローラに接続されている場合、そのうちの 1 台からのみ骨格を取得できます。複数の Kinect から同時に骨格を取得したい場合は、複数の USB コントローラを持つ PC で、それぞれの USB コントローラのポートに Kinect を接続させれば可能です。
PC に接続されている Kinect センサーの数を取得するには Microsoft.Kinect.KinectSensor クラスを使用します。この Runtime クラスのインスタンスが、PC に接続されている Kinect センサーを表し、このクラスを通じて Kinect を制御できます。
public sealed class KinectSensor : IDisposable
このクラスは PC に接続されている Kinect センサーを取得する静的な KinectSensors プロパティを公開しています。
public static KinectSensorCollection KinectSensors { get; }
Kinects プロパティは、PC に接続されているすべての Kinect センサーを管理する Microsoft.Kinect.KinectSensorCollection クラスのオブジェクトを返します。このクラスは KinectSensor オブジェクトのコレクションを表します。
public sealed class KinectSensorCollection : ReadOnlyCollection<KinectSensor>, IDisposable
KinectSensorCollection クラスは、上記のように ReadOnlyCollection<KinectSensor> を継承しているため、ここから PC に接続されている Kinect センサーに紐づいた KinectSensor オブジェクトを得られます。このコレクションの Count プロパティが返す要素数をもって、PC に接続されている Kinect センサーの数を検出できます。
using System; using Microsoft.Research.Kinect.Nui; class Sample { static void Main(string[] args) { int deviceCount = Runtime.Kinects.Count; if (deviceCount == 0) Console.WriteLine("Kinectが接続されていません"); else Console.WriteLine("Kinectが{0}台検出されました", deviceCount); } }
コード1は PC に接続されている Kinect センサーの数を出力するだけの単純なコンソールアプリケーションです。