Inicio rápido: Creación de la primera aplicación de Azure Kinect

¿Desea una introducción a Azure Kinect DK? Este inicio rápido le ayudará a empezar a usar el dispositivo.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Se explican las siguientes funciones:

Requisitos previos

  1. Configure el dispositivo Azure Kinect DK.
  2. Descargue el SDK de Sensor de Azure Kinect e instálelo.

Encabezados

Solo va a necesitar un encabezado, k4a.h. Asegúrese de que el compilador que ha elegido está configurado con las carpetas lib y include del SDK. También necesitará los archivos k4a.lib y k4a.dll vinculados. Si lo desea, puede consultar el artículo en que se explica cómo agregar la biblioteca de Azure Kinect a un proyecto.

#include <k4a/k4a.h>

Búsqueda de un dispositivo Azure Kinect DK

Se pueden conectar varios dispositivos Azure Kinect DK a un equipo. En primer lugar, averiguaremos cuántos se van a conectar, para lo que es preciso usar la función k4a_device_get_installed_count(). Esta función debería funcionar de inmediato, sin ninguna configuración adicional.

uint32_t count = k4a_device_get_installed_count();

Una vez que haya determinado que hay un dispositivo conectado al equipo, puede abrirlo mediante k4a_device_open(). Puede especificar el índice del dispositivo que desea abrir, o bien simplemente usar K4A_DEVICE_DEFAULT para el primero.

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

Como sucede con la mayoría de las cosas de la biblioteca de Azure Kinect, cuando se abre algo, también debe cerrarse al terminar de usarlo. Cuando esté apagando, no olvide realizar una llamada a k4a_device_close().

k4a_device_close(device);

Una vez que el dispositivo esté abierto, se puede realizar una prueba para tener la certeza de que funciona. Por tanto, vamos a leer el número de serie del dispositivo.

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

Inicio de las cámaras

Una vez que se haya abierto el dispositivo, será preciso que configurar la cámara con un objeto k4a_device_configuration_t. La configuración de la cámara tiene varias opciones diferentes. Elija la configuración que mejor se adapte a su propio escenario.

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

Control de errores

Por brevedad y claridad, no se muestra el control de errores en algunos de los ejemplos en línea. Sin embargo, el control de errores siempre es importante. Muchas funciones devolverán un tipo general de éxito o error k4a_result_t, o bien una variante más específica con información detallada como k4a_wait_result_t. Compruebe los documentos o IntelliSense en cada función para ver los mensajes de error que debería esperar ver en él.

Puede usar las macros K4A_SUCCEEDED y K4A_FAILED para comprobar el resultado de una función. Por consiguiente, en lugar de simplemente abrir un dispositivo Azure Kinect DK, podríamos proteger la llamada de la función de la siguiente manera:

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

Origen completo

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

Pasos siguientes

Aprenda a buscar y abrir un dispositivo Azure Kinect DK mediante el SDK de Sensor