Partilhar via


Localize e abra o dispositivo Kinect do Azure

Este artigo descreve como pode localizar e, em seguida, abrir o Azure Kinect DK. O artigo explica como lidar com o caso em que há vários dispositivos conectados à sua máquina.

Você também pode consultar o exemplo de enumeração do SDK que demonstra como usar as funções neste artigo.

São abrangidas as seguintes funções:

Descubra o número de dispositivos conectados

Primeiro, obtenha a contagem de dispositivos Kinect do Azure conectados atualmente usando k4a_device_get_installed_count()o .

uint32_t device_count = k4a_device_get_installed_count();

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

Abrir um dispositivo

Para obter informações sobre um dispositivo ou para ler dados dele, você precisa primeiro abrir uma alça para o dispositivo usando 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);
}

O index parâmetro de k4a_device_open() indica qual dispositivo abrir se houver mais de um conectado. Se você espera que apenas um único dispositivo seja conectado, você pode passar um argumento de K4A_DEVICE_DEFAULT ou 0 para indicar o primeiro dispositivo.

Sempre que você abrir um dispositivo, você precisa ligar k4a_device_close() quando terminar de usar a alça. Nenhuma outra alça pode ser aberta no mesmo dispositivo até que você tenha fechado a alça.

Identificar um dispositivo específico

Os dispositivos de ordem enumerados por índice não serão alterados até que os dispositivos sejam conectados ou separados. Para identificar um dispositivo físico, deve utilizar o número de série do dispositivo.

Para ler o número de série do dispositivo, use a k4a_device_get_serialnum() função depois de abrir uma alça.

Este exemplo demonstra como alocar a quantidade certa de memória para armazenar o número 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);

Abra o dispositivo padrão

Na maioria dos aplicativos, haverá apenas um único Azure Kinect DK conectado ao mesmo computador. Se você só precisa se conectar ao único dispositivo esperado, você pode ligar k4a_device_open() com index de K4A_DEVICE_DEFAULT para abrir o primeiro dispositivo.

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

Próximos passos