Démarrage rapide : Créer votre première application Azure Kinect

Vous débutez avec Azure Kinect DK ? Ce guide de démarrage rapide va vous aider à devenir opérationnel avec l’appareil.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Voici les fonctions qui sont abordées ici :

Prérequis

  1. Configurer l’appareil Azure Kinect DK.
  2. Télécharger et installer le SDK Capteur d’Azure Kinect.

En-têtes

Le seul en-tête dont vous avez besoin est k4a.h. Veillez à ce que le compilateur que vous avez choisi est configuré avec les dossiers lib et include du SDK. Vous devez aussi lier les fichiers k4a.lib et k4a.dll. Consultez éventuellement Ajouter la bibliothèque Azure Kinect à votre projet.

#include <k4a/k4a.h>

Rechercher un appareil Azure Kinect DK

Plusieurs appareils Azure Kinect DK peuvent être connectés à votre ordinateur. Nous allons commencer par déterminer leur nombre, si tant est qu’il y en ait, à l’aide de la fonction k4a_device_get_installed_count(). Cette fonction doit en principe fonctionner directement, sans étapes de configuration supplémentaires.

uint32_t count = k4a_device_get_installed_count();

Dès lors que vous avez déterminé qu’un appareil est connecté à l’ordinateur, vous pouvez l’ouvrir avec k4a_device_open(). Vous pouvez fournir l’index de l’appareil à ouvrir ou utiliser simplement K4A_DEVICE_DEFAULT pour le premier.

// Open the first plugged in Kinect device
k4a_device_t device = NULL;
k4a_device_open(K4A_DEVICE_DEFAULT, &device);

Comme c’est généralement le cas avec la bibliothèque Azure Kinect, quand vous ouvrez un de ses composants, vous devez aussi le refermer après l’avoir utilisé. Pour cela, pensez à appeler k4a_device_close().

k4a_device_close(device);

Une fois l’appareil ouvert, vous pouvez le tester pour vérifier qu’il fonctionne. C’est le cas si vous pouvez lire le numéro de série de l’appareil.

// Get the size of the serial number
size_t serial_size = 0;
k4a_device_get_serialnum(device, NULL, &serial_size);

// Allocate memory for the serial, then acquire it
char *serial = (char*)(malloc(serial_size));
k4a_device_get_serialnum(device, serial, &serial_size);
printf("Opened device: %s\n", serial);
free(serial);

Démarrer les caméras

Une fois que vous avez ouvert l’appareil, vous devez configurer la caméra avec un objet k4a_device_configuration_t. Il existe différentes options de configuration de la caméra. Choisissez les paramètres qui correspondent le mieux à votre propre scénario.

// Configure a stream of 4096x3072 BRGA color data at 15 frames per second
k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.camera_fps       = K4A_FRAMES_PER_SECOND_15;
config.color_format     = K4A_IMAGE_FORMAT_COLOR_BGRA32;
config.color_resolution = K4A_COLOR_RESOLUTION_3072P;

// Start the camera with the given configuration
k4a_device_start_cameras(device, &config);

// ...Camera capture and application specific code would go here...

// Shut down the camera when finished with application logic
k4a_device_stop_cameras(device);

Gestion des erreurs

Dans un souci de clarté et de concision, la gestion des erreurs n’apparaît pas dans les exemples fournis. Cependant, la gestion des erreurs est toujours importante ! De nombreuses fonctions peuvent retourner un type de réussite/échec général k4a_result_t ou une variante plus spécifiques avec des informations détaillées comme k4a_wait_result_t. Consultez la documentation ou IntelliSense pour chaque fonction de façon à vous faire une idée des messages d’erreur que vous êtes susceptible de rencontrer.

Vous pouvez utiliser les macros K4A_SUCCEEDED et K4A_FAILED pour vérifier le résultat d’une fonction. Au lieu d’ouvrir simplement un appareil Azure Kinect DK, vous pouvez protéger l’appel de fonction comme ceci :

// Open the first plugged in Kinect device
k4a_device_t device = NULL;
if ( K4A_FAILED( k4a_device_open(K4A_DEVICE_DEFAULT, &device) ) )
{
    printf("Failed to open k4a device!\n");
    return;
}

Source complète

#pragma comment(lib, "k4a.lib")
#include <k4a/k4a.h>

#include <stdio.h>
#include <stdlib.h>

int main()
{
    uint32_t count = k4a_device_get_installed_count();
    if (count == 0)
    {
        printf("No k4a devices attached!\n");
        return 1;
    }

    // Open the first plugged in Kinect device
    k4a_device_t device = NULL;
    if (K4A_FAILED(k4a_device_open(K4A_DEVICE_DEFAULT, &device)))
    {
        printf("Failed to open k4a device!\n");
        return 1;
    }

    // Get the size of the serial number
    size_t serial_size = 0;
    k4a_device_get_serialnum(device, NULL, &serial_size);

    // Allocate memory for the serial, then acquire it
    char *serial = (char*)(malloc(serial_size));
    k4a_device_get_serialnum(device, serial, &serial_size);
    printf("Opened device: %s\n", serial);
    free(serial);

    // Configure a stream of 4096x3072 BRGA color data at 15 frames per second
    k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
    config.camera_fps       = K4A_FRAMES_PER_SECOND_15;
    config.color_format     = K4A_IMAGE_FORMAT_COLOR_BGRA32;
    config.color_resolution = K4A_COLOR_RESOLUTION_3072P;

    // Start the camera with the given configuration
    if (K4A_FAILED(k4a_device_start_cameras(device, &config)))
    {
        printf("Failed to start cameras!\n");
        k4a_device_close(device);
        return 1;
    }

    // Camera capture and application specific code would go here

    // Shut down the camera when finished with application logic
    k4a_device_stop_cameras(device);
    k4a_device_close(device);

    return 0;
}

Étapes suivantes

Découvrir comment rechercher et ouvrir un appareil Azure Kinect DK à l’aide du SDK Capteur