Gövde izleme sonuçlarını alma
Gövde Izleme SDK 'Sı, Azure Kinect DK yakalamalarını işlemek için bir gövde izleyici nesnesi kullanır ve gövde izleme sonuçları üretir. Ayrıca izleyici, işleme kuyrukları ve çıkış sırası genel durumunu da korur. Gövde izleyicisini kullanmanın üç adımı vardır:
- İzleyici oluşturma
- Azure Kinect DK kullanarak derinliği ve IR görüntülerini yakalama
- Yakalamayı sıraya al ve sonuçları aç.
İzleyici oluşturma
Gövde izlemeyi kullanmanın ilk adımı bir izleyici oluşturmaktır ve algılayıcı ayarlaması k4a_calibration_t yapısında geçirilmesi gerekir. Algılayıcı ayarlaması, Azure Kinect algılayıcı SDK k4a_device_get_calibration () işlevi kullanılarak sorgulanabilir.
k4a_calibration_t sensor_calibration;
if (K4A_RESULT_SUCCEEDED != k4a_device_get_calibration(device, device_config.depth_mode, K4A_COLOR_RESOLUTION_OFF, &sensor_calibration))
{
printf("Get depth camera calibration failed!\n");
return 0;
}
k4abt_tracker_t tracker = NULL;
k4abt_tracker_configuration_t tracker_config = K4ABT_TRACKER_CONFIG_DEFAULT;
if (K4A_RESULT_SUCCEEDED != k4abt_tracker_create(&sensor_calibration, tracker_config, &tracker))
{
printf("Body tracker initialization failed!\n");
return 0;
}
Derinliği ve IR görüntülerini yakala
Görüntüleri al sayfasında Azure KINECT dk kullanılarak görüntü yakalama ele alınmıştır.
Not
K4A_DEPTH_MODE_NFOV_UNBINNED veya K4A_DEPTH_MODE_WFOV_2X2BINNED modlar en iyi performans ve doğruluk için önerilir. K4A_DEPTH_MODE_OFFVeya K4A_DEPTH_MODE_PASSIVE_IR modlarını kullanmayın.
Desteklenen Azure Kinect DK modları, Azure Kinect DK donanım belirtiminde ve k4a_depth_mode_t numaralandırmalar bölümünde açıklanmaktadır.
// Capture a depth frame
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;
}
Yakalamayı sıraya al ve sonuçları aç
İzleyici, bir giriş kuyruğunu ve bir çıkış sırasını zaman uyumsuz olarak işlemek için Azure Kinect DK 'in daha verimli bir şekilde yakalamalarını sağlar. Giriş kuyruğuna yeni bir yakalama eklemek için k4abt_tracker_enqueue_capture () işlevini kullanın. K4abt_tracker_pop_result () işlevi, çıkış sırasından bir sonuç pop 'u kullanın. Zaman aşımı değeri kullanımı uygulamaya bağımlıdır ve sıraya alma bekleme süresini denetler.
Gerçek zamanlı işleme
Gerçek zamanlı sonuçlar gerektiren tek iş parçacıklı uygulamalar için bu stili kullanın ve bırakılan çerçevelere uyum sağlayabilir. simple_3d_viewer GitHub Azure-Kinect-Samples ' de bulunan örnek gerçek zamanlı işleme örneğidir.
k4a_wait_result_t queue_capture_result = k4abt_tracker_enqueue_capture(tracker, sensor_capture, 0);
k4a_capture_release(sensor_capture); // Remember to release the sensor capture once you finish using it
if (queue_capture_result == K4A_WAIT_RESULT_FAILED)
{
printf("Error! Adding capture to tracker process queue failed!\n");
break;
}
k4abt_frame_t body_frame = NULL;
k4a_wait_result_t pop_frame_result = k4abt_tracker_pop_result(tracker, &body_frame, 0);
if (pop_frame_result == K4A_WAIT_RESULT_SUCCEEDED)
{
// Successfully popped the body tracking result. Start your processing
...
k4abt_frame_release(body_frame); // Remember to release the body frame once you finish using it
}
Zaman uyumlu işleme
Gerçek zamanlı sonuçlar gerektirmeyen veya bırakılan çerçeveleri barındıramayan uygulamalar için bu stili kullanın.
İşleme verimlilik sınırlı olabilir.
simple_sample.exe GitHub Azure-Kinect-Samples içinde bulunan örnek, zaman uyumlu işleme örneğidir.
k4a_wait_result_t queue_capture_result = k4abt_tracker_enqueue_capture(tracker, sensor_capture, K4A_WAIT_INFINITE);
k4a_capture_release(sensor_capture); // Remember to release the sensor capture once you finish using it
if (queue_capture_result != K4A_WAIT_RESULT_SUCCEEDED)
{
// It should never hit timeout or error when K4A_WAIT_INFINITE is set.
printf("Error! Adding capture to tracker process queue failed!\n");
break;
}
k4abt_frame_t body_frame = NULL;
k4a_wait_result_t pop_frame_result = k4abt_tracker_pop_result(tracker, &body_frame, K4A_WAIT_INFINITE);
if (pop_frame_result != K4A_WAIT_RESULT_SUCCEEDED)
{
// It should never hit timeout or error when K4A_WAIT_INFINITE is set.
printf("Error! Popping body tracking result failed!\n");
break;
}
// Successfully popped the body tracking result. Start your processing
...
k4abt_frame_release(body_frame); // Remember to release the body frame once you finish using it