Recuperar dados de imagem do Azure Kinect

Esta página contém instruções para a recuperação de imagens do Azure Kinect. O artigo demonstra como capturar e acessar imagens coordenadas entre a cor e a profundidade do dispositivo. Para acessar e capturar imagens, você deve primeiro abrir e configurar o dispositivo. Para configurar e capturar uma imagem, você deve encontrar e abrir o dispositivo.

Confira também o exemplo de streaming de SDK que demonstra o uso das funções no artigo.

As seguintes funções são cobertas:

Configurar e iniciar o dispositivo

As duas câmeras do dispositivo Kinect dão suporte para vários modos, resoluções e formatos de saída. Veja a lista completa nas especificações de hardware do Kit de Desenvolvimento do Azure Kinect.

Você define a configuração de streaming por meio de valores na estrutura k4a_device_configuration_t.

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

Depois de serem iniciadas, as câmeras continuam capturando dados até que k4a_device_stop_cameras() seja chamado ou o dispositivo seja fechado.

Estabilização

Para iniciar dispositivos com o recurso de sincronização de vários dispositivos, recomendamos usar a configuração de exposição fixa. Com um conjunto de exposição manual, podem ser necessárias até oito capturas para a estabilização das imagens e da taxa de quadros. Com a exposição automática, podem ser necessárias até 20 capturas para a estabilização das imagens e da taxa de quadros.

Obter uma captura do dispositivo

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

Por padrão, a API só retorna a captura depois de receber todas as imagens solicitadas no modo de streaming. Para que a API retorne capturas parciais com apenas imagens de profundidade ou de cor assim que estiverem disponíveis, apague o parâmetro synchronized_images_only de 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;
}

Depois que a API retorna uma captura, você deve chamar k4a_capture_release() quando termina de usar o objeto de captura.

Obter uma imagem da captura

Para recuperar uma imagem capturada, chame a função apropriada para cada tipo de imagem. Um destes:

Você deve chamar k4a_image_release() com o identificador k4a_image_t retornado por essas funções quando termina de usar a imagem.

Acessar buffers de imagem

k4a_image_t tem muitas funções de acessador para obter propriedades da imagem.

Para acessar o buffer de memória da imagem, use k4a_image_get_buffer.

O exemplo a seguir demonstra como acessar uma imagem de profundidade capturada. O mesmo princípio se aplica a outros tipos de imagem. No entanto, substitua a variável de tipo de imagem pelo tipo 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);

Próximas etapas

Agora você sabe como capturar e coordenar as imagens das câmeras entre a cor e a profundidade, usando um dispositivo Azure Kinect. Você também pode: