Vyhledejte a otevřete zařízení Azure Kinect.

Tento článek popisuje, jak najít a otevřít Azure Kinect DK. Tento článek vysvětluje, jak řešit případ, kdy je k vašemu počítači připojeno více zařízení.

Můžete se také podívat na příklad výčtu sady SDK , který ukazuje, jak používat funkce v tomto článku.

Probírané jsou následující funkce:

Zjištění počtu připojených zařízení

Nejprve pomocí získejte počet aktuálně připojených zařízení Azure Kinect.k4a_device_get_installed_count()

uint32_t device_count = k4a_device_get_installed_count();

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

Otevření zařízení

Pokud chcete získat informace o zařízení nebo z něj číst data, musíte nejprve otevřít popisovač zařízení pomocí 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);
}

Parametr index určuje, které zařízení se má otevřít, pokud je připojených k4a_device_open() více než jedno zařízení. Pokud očekáváte, že bude připojeno pouze jedno zařízení, můžete předat argument K4A_DEVICE_DEFAULT nebo 0, který označí první zařízení.

Kdykoli otevřete zařízení, budete muset volat k4a_device_close() , až budete hotovi pomocí úchytu. Žádné další úchyty nelze otevřít pro stejné zařízení, dokud úchyt nezavřete.

Identifikace konkrétního zařízení

Pořadí zařízení ve výčtu podle indexu se nezmění, dokud zařízení nepřipojíte nebo neodpojíte. K identifikaci fyzického zařízení byste měli použít sériové číslo zařízení.

Pokud chcete přečíst sériové číslo ze zařízení, použijte k4a_device_get_serialnum() funkci po otevření úchytu.

Tento příklad ukazuje, jak přidělit správné množství paměti pro uložení sériového čísla.

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);

Otevření výchozího zařízení

Ve většině aplikací bude ke stejnému počítači připojen pouze jeden Azure Kinect DK. Pokud se potřebujete připojit pouze k jedinému očekávanému zařízení, můžete zavolat k4a_device_open() přes index z a K4A_DEVICE_DEFAULT otevřít první zařízení.

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;
}

Další kroky