WisdomSoft - for your serial experiences.

デバイスの検出

複数の Kinect を同時に PC に接続して利用することができます。アプリケーションから Kinect を利用するには、Kinect の接続台数を調べ、操作する Kinect の番号を指定しなければなりません。C# のマネージコードで接続されている Kinect センサーの数を取得する方法を解説します。

接続されている 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 を制御できます。

Microsoft.Kinect.KinectSensor クラス
public sealed class KinectSensor : IDisposable

このクラスは PC に接続されている Kinect センサーを取得する静的な KinectSensors プロパティを公開しています。

Runtime クラス Kinects プロパティ
public static KinectSensorCollection KinectSensors { get; }

Kinects プロパティは、PC に接続されているすべての Kinect センサーを管理する Microsoft.Kinect.KinectSensorCollection クラスのオブジェクトを返します。このクラスは KinectSensor オブジェクトのコレクションを表します。

Microsoft.Kinect.KinectSensorCollection クラス
public sealed class KinectSensorCollection : ReadOnlyCollection<KinectSensor>, IDisposable

KinectSensorCollection クラスは、上記のように ReadOnlyCollection<KinectSensor> を継承しているため、ここから PC に接続されている Kinect センサーに紐づいた KinectSensor オブジェクトを得られます。このコレクションの Count プロパティが返す要素数をもって、PC に接続されている Kinect センサーの数を検出できます。

コード1
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);
    }
}
実行結果
コード2 実行結果

コード1は PC に接続されている Kinect センサーの数を出力するだけの単純なコンソールアプリケーションです。

関連文書