デバイスの検出
接続されている Kinect デバイスの数を得る
Kinect のカメラやモーションに関連した機能は Microsoft.Research.Kinect.Nui 名前空間で宣言されています。Kinect の機能を利用するソースコードでは、この名前空間を using ディレクティブでインポートしましょう。
アプリケーションから Kinect デバイスを利用するには、実行している PC に Kinect が接続されているかどうかを調べる必要があります。Xbox 360 には 1 台の Kinect しか接続できませんが、PC には複数台の Kinect を接続できます。ただし、骨格情報を得られるのは 1 台からのみで、複数台から同時に骨格を取得することはできません。映像は、同時に取得できます。
正確には、複数台の Kinect が同一の USB コントローラに接続されている場合、そのうちの 1 台からのみ骨格を取得できます。複数の Kinect から同時に骨格を取得したい場合は、複数の USB コントローラを持つ PC で、それぞれの USB コントローラのポートに Kinect を接続させれば可能です。
PC に接続されている Kinect デバイスの数を取得するには Microsoft.Kinect.Nui.Runtime クラスを使用します。この Runtime クラスのインスタンスが、PC に接続されている Kinect デバイスを表し、このクラスを通じて Kinect を制御できます。
public sealed class Runtime
このクラスは PC に接続されている Kinect デバイスを取得する静的な Kinects プロパティを公開しています。
public static KinectDeviceCollection Kinects { get; }
Kinects プロパティは、PC に接続されているすべての Kinect デバイスを管理する Microsoft.Kinect.Nui.KinectDeviceCollection クラスのオブジェクトを返します。このクラスは Runtime オブジェクトのコレクションを表します。
public class KinectDeviceCollection : System.Collections.ObjectModel.ReadOnlyCollection<Runtime>
KinectDeviceCollection クラスは、上記のように ReadOnlyCollection<Runtime> を継承しているため、ここから PC に接続されている Kinect デバイスに紐づいた Runtime オブジェクトを得られます。このコレクションの 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 デバイスの数を出力するだけの単純なコンソールアプリケーションです。