Leta upp och öppna Azure Kinect-enheten

I den här artikeln beskrivs hur du kan hitta och sedan öppna din Azure Kinect DK. Artikeln beskriver hur du hanterar det fall där det finns flera enheter anslutna till datorn.

Du kan också läsa SDK- uppräknings exemplet som visar hur du använder funktionerna i den här artikeln.

Följande funktioner beskrivs:

Identifiera antalet anslutna enheter

Börja med att hämta antalet för tillfället anslutna Azure Kinect-enheter med k4a_device_get_installed_count() .

uint32_t device_count = k4a_device_get_installed_count();

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

Öppna en enhet

Om du vill hämta information om en enhet eller läsa data från den måste du först öppna en referens till enheten med hjälp av 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);
}

indexParametern för k4a_device_open() anger vilken enhet som ska öppnas om det finns fler än en ansluten. Om du bara förväntar dig att en enda enhet ska ansluta kan du skicka ett argument till K4A_DEVICE_DEFAULT eller 0 för att ange den första enheten.

När som helst öppnar du en enhet som du behöver anropa k4a_device_close() när du är klar med referensen. Det går inte att öppna andra referenser till samma enhet förrän du har stängt referensen.

Identifiera en speciell enhet

Beställnings enheterna räknas upp efter indexet inte förrän enheterna är anslutna eller frånkopplade. För att identifiera en fysisk enhet bör du använda enhetens serie nummer.

Om du vill läsa serie numret från enheten använder k4a_device_get_serialnum() du funktionen när du har öppnat en referens.

Det här exemplet visar hur du allokerar rätt mängd minne för att lagra serie numret.

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

Öppna standardenheten

I de flesta program kommer det bara finnas en enda Azure Kinect DK som är kopplad till samma dator. Om du bara behöver ansluta till den enda förväntade enheten kan du anropa k4a_device_open() med index för K4A_DEVICE_DEFAULT att öppna den första enheten.

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

Nästa steg