الحصول على نتائج تعقب النص الأساسي

يستخدم Body Tracking SDK عنصر تعقب الجسم لمعالجة تسجيل Azure Kinect DK وإنشاء نتائج تتبع الجسم. كما أنه يحافظ على الوضع العمومي للمتعقب وقوائم الانتظار المعالجة وقائمة انتظار الإخراج. هناك ثلاث خطوات لاستخدام متتبع الجسم:

  • إنشاء أداة تعقب
  • التقط العمق وصور الأشعة تحت الحمراء باستخدام Azure Kinect DK
  • اصطف التسجيل وافرق النتائج.

إنشاء أداة تعقب

تتمثل الخطوة الأولى في استخدام تتبع الجسم في إنشاء أداة تعقب وتتطلب التمرير في بنية معايرة أداة الاستشعار k4a_calibration_t. يمكن الاستعلام عن معايرة أداة الاستشعار باستخدام وظيفة Azure Kinect Sensor SDK k4a_device_get_calibration ().

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

تسجيل العمق وصور الأشعة تحت الحمراء

تتم تغطية تسجيل الصور باستخدام Azure Kinect DK في صفحة استرداد الصور.

ملاحظة

يوصى باستخدام الوضعين K4A_DEPTH_MODE_NFOV_UNBINNED أو K4A_DEPTH_MODE_WFOV_2X2BINNED للحصول على أفضل أداء ودقة. لا تستخدم الوضعين K4A_DEPTH_MODE_OFF أو K4A_DEPTH_MODE_PASSIVE_IR.

تم وصف أوضاع Azure Kinect DK المدعومة في تعداد Azure Kinect DK مواصفات الأجهزة وk4a_depth_mode_t.

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

أدرج اللقطة واجمع النتائج

يحتفظ جهاز التتبع داخلياً بقائمة إدخال وقائمة إخراج لمعالجة لقطات Azure Kinect DK بشكل أكثر كفاءة. استخدم الوظيفة k4abt_tracker_enqueue_capture() لإضافة تسجيل جديد إلى قائمة انتظار الإدخال. استخدم الوظيفة k4abt_tracker_pop_result() لإخراج نتيجة من قائمة انتظار الإخراج. يعتمد استخدام قيمة المهلة على التطبيق ويتحكم في وقت الانتظار في قائمة الانتظار.

معالجة بلا انتظار

استخدم هذا النمط للتطبيقات أحادية التسلسل التي تحتاج إلى نتائج فورية ويمكن أن تستوعب الإطارات التي تم إسقاطها (على سبيل المثال، مشاهدة فيديو مباشر من جهاز). تعد العينة simple_3d_viewer الموجودة في GitHub Azure-Kinect-Samples مثالاً على المعالجة بدون انتظار.

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
}

معالجة مع الانتظار

استخدم هذا النمط للتطبيقات التي لا تحتاج إلى نتائج لكل الإطارات (مثل معالجة فيديو من ملف). تعد العينة simple_sample.exe الموجودة في GitHub Azure-Kinect-Samples مثالاً على معالجة الانتظار.

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

الخطوات التالية