Obter dados de imagem do Azure Kinect

Esta página fornece detalhes sobre como obter imagens do Azure Kinect. O artigo demonstra como capturar e aceder a imagens coordenadas entre a cor e a profundidade do dispositivo. Para aceder às imagens, primeiro tem de abrir e configurar o dispositivo e, em seguida, pode capturar imagens. Antes de configurar e capturar uma imagem, tem de Localizar e abrir o dispositivo.

Também pode consultar o Exemplo de Transmissão em Fluxo do SDK que demonstra como utilizar as funções neste artigo.

As seguintes funções são abrangidas:

Configurar e iniciar o dispositivo

As duas câmaras disponíveis no seu dispositivo Kinect suportam vários modos, resoluções e formatos de saída. Para obter uma lista completa, veja as especificações de hardware do Azure Kinect Development Kit.

A configuração de transmissão em fluxo é definida com valores na k4a_device_configuration_t estrutura.

k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
config.color_format = K4A_IMAGE_FORMAT_COLOR_MJPG;
config.color_resolution = K4A_COLOR_RESOLUTION_2160P;
config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;

if (K4A_RESULT_SUCCEEDED != k4a_device_start_cameras(device, &config))
{
    printf("Failed to start device\n");
    goto Exit;
}

Assim que as câmaras forem iniciadas, continuarão a capturar dados até k4a_device_stop_cameras() serem chamados ou o dispositivo ser fechado.

Estabilização

Ao iniciar dispositivos com a funcionalidade de sincronização de vários dispositivos, recomenda-se vivamente que o faça através de uma definição de exposição fixa. Com um conjunto de exposição manual, pode demorar até oito capturas do dispositivo antes de as imagens e a taxa de fotogramas estabilizarem. Com a exposição automática, pode demorar até 20 capturas antes de as imagens e a taxa de fotogramas estabilizarem.

Obter uma captura do dispositivo

As imagens são capturadas do dispositivo de forma correlacionada. Cada imagem capturada contém uma imagem de profundidade, uma imagem de IR, uma imagem de cor ou uma combinação de imagens.

Por predefinição, a API só devolverá uma captura depois de receber todas as imagens pedidas para o modo de transmissão em fluxo. Pode configurar a API para devolver capturas parciais com apenas imagens de profundidade ou cores assim que estiverem disponíveis ao limpar o synchronized_images_only parâmetro do k4a_device_configuration_t.

// Capture a depth frame
k4a_capture_t capture = NULL;
switch (k4a_device_get_capture(device, &capture, TIMEOUT_IN_MS))
{
case K4A_WAIT_RESULT_SUCCEEDED:
    break;
case K4A_WAIT_RESULT_TIMEOUT:
    printf("Timed out waiting for a capture\n");
    continue;
    break;
case K4A_WAIT_RESULT_FAILED:
    printf("Failed to read a capture\n");
    goto Exit;
}

Assim que a API tiver devolvido uma captura com êxito, tem de ligar k4a_capture_release() quando tiver concluído a utilização do objeto de captura.

Obter uma imagem da captura

Para obter uma imagem capturada, chame a função adequada para cada tipo de imagem. Um dos seguintes:

Tem de chamar k4a_image_release() qualquer k4a_image_t alça devolvida por estas funções assim que terminar de utilizar a imagem.

Memórias intermédias de imagens do Access

k4a_image_t tem muitas funções de acessório para obter propriedades da imagem.

Para aceder à memória intermédia da imagem, utilize k4a_image_get_buffer.

O exemplo seguinte demonstra como aceder a uma imagem de profundidade capturada. Este mesmo princípio aplica-se a outros tipos de imagem. No entanto, certifique-se de que substitui a variável de tipo de imagem pelo tipo de imagem correto, como IR ou cor.

// Access the depth16 image
k4a_image_t image = k4a_capture_get_depth_image(capture);
if (image != NULL)
{
    printf(" | Depth16 res:%4dx%4d stride:%5d\n",
            k4a_image_get_height_pixels(image),
            k4a_image_get_width_pixels(image),
            k4a_image_get_stride_bytes(image));

    // Release the image
    k4a_image_release(image);
}

// Release the capture
k4a_capture_release(capture);

Passos seguintes

Agora já sabe como capturar e coordenar as imagens das câmaras entre a cor e a profundidade, utilizando o seu dispositivo Azure Kinect. Também pode: