Rechercher et ouvrir l’appareil Azure Kinect

Cet article décrit comment trouver, puis ouvrir votre Azure Kinect DK. Il article explique comment gérer le cas où plusieurs appareils sont connectés à votre ordinateur.

Vous pouvez également consulter l’exemple d’énumération du Kit de développement logiciel (SDK) qui montre comment utiliser les fonctions décrites dans cet article.

Voici les fonctions qui sont abordées ici :

Découvrir le nombre d’appareils connectés

Commencez par récupérer le nombre d’appareils Azure Kinect actuellement connectés en utilisant k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

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

Ouvrir un appareil

Pour obtenir des informations sur un appareil ou pour y lire des données, vous devez d’abord ouvrir un descripteur de l’appareil en utilisant 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);
}

Le paramètre index de k4a_device_open() indique l’appareil à ouvrir si plusieurs appareils sont connectés. Si vous vous attendez à ce qu’un seul appareil soit connecté, vous pouvez passer un argument K4A_DEVICE_DEFAULT ou 0 pour indiquer le premier appareil.

Chaque fois que vous ouvrez un appareil, vous devez appeler k4a_device_close() lorsque vous avez fini d’utiliser le descripteur. Vous ne pouvez ouvrir aucun autre descripteur sur le même appareil tant que vous n’avez pas fermé le descripteur ouvert.

Identifier un appareil spécifique

L’ordre d’énumération des appareils par index ne change pas tant que vous ne connectez ou ne déconnectez pas un appareil. Pour identifier un appareil physique, vous devez utiliser son numéro de série.

Pour lire le numéro de série de l’appareil, utilisez la fonction k4a_device_get_serialnum() après avoir ouvert un descripteur.

Cet exemple montre comment allouer la quantité de mémoire appropriée pour stocker le numéro de série.

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

Ouvrir l’appareil par défaut

Dans la plupart des applications, il n’y a qu’un seul appareil Azure Kinect DK connecté au même ordinateur. Si vous avez uniquement besoin de vous connecter au seul appareil attendu, vous pouvez appeler la fonction k4a_device_open() avec l’index de K4A_DEVICE_DEFAULT pour ouvrir le premier appareil.

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

Étapes suivantes