Récupérer des données d’image Azure Kinect
Cette page fournit des informations détaillées sur la façon de récupérer des images à partir de l’appareil Azure Kinect. L’article montre comment capturer des images coordonnées et y accéder entre la couleur et la profondeur de l’appareil. Pour accéder aux images, vous devez commencer par ouvrir et configurer l’appareil. Vous pouvez ensuite capturer des images. Avant de configurer et de capturer une image, vous devez Rechercher et ouvrir un appareil.
Vous pouvez également consulter l’exemple de diffusion en continu du Kit de développement logiciel (SDK) qui montre comment utiliser les fonctions abordées dans cet article.
Voici les fonctions qui sont abordées ici :
k4a_device_start_cameras()
k4a_device_get_capture()
k4a_capture_get_depth_image()
k4a_image_get_buffer()
k4a_image_release()
k4a_capture_release()
k4a_device_stop_cameras()
Configurer et démarrer l’appareil
Les deux caméras disponibles sur votre appareil Kinect prennent en charge plusieurs modes, résolutions et formats de sortie. Pour obtenir une liste complète, reportez-vous au Kit de développement Azure Kinect Spécifications matérielles.
La configuration de la diffusion en continu est définie à l’aide de valeurs de la structure 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;
}
Une fois les caméras démarrées, elles continuent à capturer des données jusqu’à l’appel de la fonction k4a_device_stop_cameras()
ou à la fermeture de l’appareil.
Stabilisation
Lors du démarrage d’appareils à l’aide de la fonctionnalité de synchronisation d’appareils multiples, il est fortement recommandé de le faire à l’aide d’un paramètre à exposition fixe. Avec une exposition manuelle, jusqu’à huit captures de l’appareil peuvent être nécessaires avant la stabilisation des images et des taux de trames. Avec une exposition automatique, jusqu’à 20 captures avant que peuvent être nécessaires avant la stabilisation des images et des taux de trames.
Obtenir une capture à partir de l’appareil
Les images sont capturées à partir de l’appareil de manière corrélée. Chaque image capturée contient une image de profondeur, une image IR, une image en couleur ou une combinaison d’images.
Par défaut, l’API retourne une capture uniquement une fois qu’elle a reçu toutes les images demandées pour le mode de diffusion en continu. Vous pouvez configurer l’API de sorte qu’elle retourne des captures partielles avec uniquement des images de profondeur ou en couleurs dès qu’elles sont disponibles en désactivant le paramètre synchronized_images_only
de la fonction 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;
}
Une fois que l’API a correctement retourné une capture, vous devez appeler k4a_capture_release()
lorsque vous avez fini d’utiliser l’objet de capture.
Obtenir une image de la capture
Pour récupérer une image capturée, appelez la fonction appropriée pour chaque type d’image. Valeurs possibles :
Une fois que vous avez fini d’utiliser l’image, vous devez appeler la fonction k4a_image_release()
sur tout descripteur k4a_image_t
retourné par ces fonctions.
Accéder aux tampons d’image
k4a_image_t
possède de nombreuses fonctions d’accesseur pour l’extraction de propriétés de l’image.
Pour accéder à la mémoire tampon de l’image, utilisez k4a_image_get_buffer.
L’exemple suivant montre comment accéder à une image de profondeur capturée. Ce même principe s’applique à d’autres types d’images. Toutefois, veillez à remplacer la variable de type image par le type d’image correct, tel que IR ou Couleur.
// 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);
Étapes suivantes
Vous savez maintenant comment capturer et coordonner les images des caméras couleur et de profondeur à l’aide de votre appareil Azure Kinect. Vous pouvez également :