この記事では、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);
既定のデバイスを開く
ほとんどのアプリケーションでは、同じコンピューターに接続されている Azure Kinect DK は 1 つだけです。 必要なデバイスを 1 つだけ接続する必要がある場合は、index
のK4A_DEVICE_DEFAULT
を使用してk4a_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;
}