分享方式:


尋找然後開啟 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 參數則表示要開啟的裝置。 如果您只預期要連線單一裝置,您可以傳遞引數 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。 如果您只需要連線到單一預期的裝置,您可使用 K4A_DEVICE_DEFAULTindex 呼叫 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;
}

下一步