Dela via


Leta upp och öppna sedan Azure Kinect-enheten

Den här artikeln beskriver hur du hittar och öppnar sedan din Azure Kinect DK. Artikeln beskriver hur du hanterar fallet där det finns flera enheter som är anslutna till datorn.

Du kan också referera till SDK-uppräkningsexemplet som visar hur du använder funktionerna i den här artikeln.

Följande funktioner beskrivs:

Identifiera antalet anslutna enheter

Hämta först antalet anslutna Azure Kinect-enheter med hjälp av 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

För att få information om en enhet eller för att läsa data från den måste du först öppna ett handtag 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);
}

Parametern index k4a_device_open() för anger vilken enhet som ska öppnas om det finns fler än en ansluten. Om du bara förväntar dig att en enskild enhet ska vara ansluten kan du skicka ett argument på K4A_DEVICE_DEFAULT eller 0 för att ange den första enheten.

När du öppnar en enhet måste du anropa k4a_device_close() när du är klar med handtaget. Inga andra referenser kan öppnas på samma enhet förrän du har stängt handtaget.

Identifiera en specifik enhet

Orderenheterna som räknas upp efter index ändras inte förrän enheterna är anslutna eller frånkopplade. Om du vill identifiera en fysisk enhet bör du använda enhetens serienummer.

Om du vill läsa serienumret från enheten använder k4a_device_get_serialnum() du funktionen när du har öppnat ett handtag.

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

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 att finnas en enda Azure Kinect DK ansluten 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