Azure Kinect デバイスを検索して開く

この記事では、Azure Kinect DK を検索して開く方法について説明します。 この記事では、コンピューターに複数のデバイスが接続されているケースを処理する方法について説明します。

また、この記事にある関数を使用する方法を示す SDK の列挙の例を参照することもできます。

次の関数を扱っています。

接続されているデバイスの数を検出する

まず、k4a_device_get_installed_count() を使用して、現在接続されている Azure Kinect デバイスの数を取得します。

uint32_t device_count = k4a_device_get_installed_count();

printf("Found %d connected devices:\n", device_count);

デバイスを開く

デバイスに関する情報を取得するか、またはそこからデータを読み取るには、まず k4a_device_open() を使用して、そのデバイスへのハンドルを開く必要があります。

k4a_device_t device = NULL;

for (uint8_t deviceIndex = 0; deviceIndex < device_count; deviceIndex++)
{
    if (K4A_RESULT_SUCCEEDED != k4a_device_open(deviceIndex, &device))
    {
        printf("%d: Failed to open device\n", deviceIndex);
        continue;
    }

    ...

    k4a_device_close(device);
}

k4a_device_open()index パラメーターは、複数が接続されている場合にどのデバイスを開くかを示します。 1 台のデバイスしか接続されていないことが予測される場合は、K4A_DEVICE_DEFAULT または 0 の引数を渡して最初のデバイスを示すことができます。

デバイスを開いたときは常に、そのハンドルの使用を完了したら k4a_device_close() を呼び出す必要があります。 そのハンドルを閉じるまで、同じデバイスへの他のハンドルを開くことはできません。

特定のデバイスを識別する

デバイスがインデックスで列挙される順序は、デバイスが接続または切断されるまで変更されません。 物理デバイスを識別するには、そのデバイスのシリアル番号を使用する必要があります。

デバイスからシリアル番号を読み取るには、ハンドルを開いた後に k4a_device_get_serialnum() 関数を使用します。

この例は、シリアル番号を格納するための適切な量のメモリを割り当てる方法を示しています。

char *serial_number = NULL;
size_t serial_number_length = 0;

if (K4A_BUFFER_RESULT_TOO_SMALL != k4a_device_get_serialnum(device, NULL, &serial_number_length))
{
    printf("%d: Failed to get serial number length\n", deviceIndex);
    k4a_device_close(device);
    device = NULL;
    continue;
}

serial_number = malloc(serial_number_length);
if (serial_number == NULL)
{
    printf("%d: Failed to allocate memory for serial number (%zu bytes)\n", deviceIndex, serial_number_length);
    k4a_device_close(device);
    device = NULL;
    continue;
}

if (K4A_BUFFER_RESULT_SUCCEEDED != k4a_device_get_serialnum(device, serial_number, &serial_number_length))
{
    printf("%d: Failed to get serial number\n", deviceIndex);
    free(serial_number);
    serial_number = NULL;
    k4a_device_close(device);
    device = NULL;
    continue;
}

printf("%d: Device \"%s\"\n", deviceIndex, serial_number);

既定のデバイスを開く

ほとんどのアプリケーションでは、同じコンピューターに 1 台の Azure Kinect DK だけが接続されます。 1 台の予測されるデバイスにしか接続する必要がない場合は、K4A_DEVICE_DEFAULTindexk4a_device_open() を呼び出して最初のデバイスを開くことができます。

k4a_device_t device = NULL;
uint32_t device_count = k4a_device_get_installed_count();

if (device_count != 1)
{
    printf("Unexpected number of devices found (%d)\n", device_count);
    goto Exit;
}

if (K4A_RESULT_SUCCEEDED != k4a_device_open(K4A_DEVICE_DEFAULT, &device))
{
    printf("Failed to open device\n");
    goto Exit;
}

次のステップ