How to Open specific Azure Kinect device

複数のAzure Kinectを利用するシーンでは、特定の場所に配置した任意のデバイスを指定して開きたくなります。
しかし、Azure Kinect Sensor SDKにはインデックスを指定してデバイスを開く方法しか用意されていません。
このインデックスが示すデバイスは動作環境によって不定であり、任意のデバイスを指定することができません。
そこで、デバイスごとに振られているシリアルナンバーを活用して任意のデバイスを開く方法を紹介します。

Sample Program

サンプルプログラムはこちらにあります。
各言語用のユーティリティをダウンロードして読み込んでください。

・Query Serial-Number from All Connected Devices

接続されているすべてのデバイスのシリアルナンバーを取得します。 ここで取得したリストに接続したいデバイスのシリアルナンバーが含まれているか確認できます。 リストにシリアルナンバーが含まれていない場合、そのデバイスは接続されていません。

// Query serial numbers from all connected devices
std::vector<std::string> serial_numbers = k4a::device_query();
if( serial_numbers.empty() ){
    throw k4a::error( "serial_numbers is empty!" );
}
// Query serial numbers from all connected devices
var serial_numbers = K4A.Utility.Device.Query();
if (!serial_numbers.Any())
{
    throw new K4A.AzureKinectException("devices not found!");
}

・Open Device by specify Serial-Number

シリアルナンバーを指定して任意のデバイスを開きます。
このとき、指定したシリアルナンバーに合致するデバイスが見つからない場合、取得したデバイスは無効です。

// Open device by specify serial number
k4a::device device = k4a::device_open( serial_number[0] ); // Specify string retrieved from k4a::device_query()
//k4a::device device = k4a::device_open( "000000000000" ); // Specify 12-digits string directly
if( !device.is_valid() ){
    throw k4a::error( "failed open device!" );
}
// Open device by specify serial number
var device = K4A.Utility.Device.Open(serial_numbers[0]); // Specify string retrieved from Device.Query()
//var device = K4A.Utility.Device.Open("000000000000"); // Specify 12-digits string directly
if (device == null)
{
    throw new K4A.AzureKinectException("failed open device!");
}

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です