Share via


Gövde izleme sonuçlarını alma

Gövde İzleme SDK'sı, Azure Kinect DK'nin gövde izleme sonuçlarını yakalamasını ve oluşturmasını işlemek için bir gövde izleyici nesnesi kullanır. Ayrıca izleyicinin, işleme kuyruklarının ve çıkış kuyruğunun genel durumunu korur. Gövde izleyicisini kullanmanın üç adımı vardır:

  • İzleyici oluşturma
  • Azure Kinect DK kullanarak derinlik ve IR görüntülerini yakalama
  • Yakalamayı sıraya alın ve sonuçları açın.

İzleyici oluşturma

Vücut izleme kullanmanın ilk adımı bir izleyici oluşturmaktır ve sensör kalibrasyonu k4a_calibration_t yapısının geçirilmesini gerektirir. Algılayıcı kalibrasyonu, Azure Kinect Algılayıcı SDK'sı 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;
}

Derinlik ve IR görüntüleri yakalama

Azure Kinect DK kullanılarak görüntü yakalama, görüntüleri alma sayfasında 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. veya K4A_DEPTH_MODE_PASSIVE_IR modlarını K4A_DEPTH_MODE_OFF kullanmayın.

Desteklenen Azure Kinect DK modları, Azure Kinect DK donanım belirtimi ve k4a_depth_mode_t numaralandırmalarında açıklanmıştı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ın ve sonuçları açın

İzleyici, Azure Kinect DK yakalamalarını daha verimli bir şekilde zaman uyumsuz olarak işlemek için dahili olarak bir giriş kuyruğu ve bir çıkış kuyruğu tutar. Giriş kuyruğuna yeni bir yakalama eklemek için k4abt_tracker_enqueue_capture() işlevini kullanın. Çıkış kuyruğundan bir sonuç açmak için k4abt_tracker_pop_result() işlevini kullanın. Zaman aşımı değerinin kullanımı uygulamaya bağlıdır ve kuyruğa alma bekleme süresini denetler.

Bekleme İşlemi Yok

Anlık sonuçlara ihtiyaç duyan ve bırakılan çerçeveleri barındırabilen (örneğin, bir cihazdan canlı video görüntüleme) tek iş parçacıklı uygulamalar için bu düzeni kullanın. simple_3d_viewerGitHub Azure-Kinect-Samples'da bulunan örnek, bekleme işlemi yapılmadığını gösteren bir örnektir.

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
}

Bekleme işlemi

Her kare için sonuç gerektirmeyen uygulamalar için bu düzeni kullanın (örneğin, bir dosyadan video işleme). simple_sample.exeGitHub Azure-Kinect-Samples'da bulunan örnek, bekleme işleminin bir ö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

Sonraki adımlar