البدء السريع: إنشاء أول تطبيق Azure Kinect

هل بدأت باستخدام Azure Kinect DK؟ ستساعدك هذه البداية السريعة على العمل مع الجهاز!

إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.

يتم تغطية الوظائف التالية:

المتطلبات الأساسية

  1. ⁩إعداد جهاز Azure Kinect DK⁧⁩.
  2. ⁩نزِّل⁧⁩ وثبِّت Azure Kinect DK.

الرؤوس

هناك رأس واحد فقط ستحتاج إليه، وهو ⁧k4a.h⁩. تأكد من إعداد برنامج التحويل البرمجي الذي تختاره باستخدام مكتبة SDK وتضمين المجلدات. ستحتاج أيضًا إلى ربط الملفين ⁧k4a.lib⁩ و⁧k4a.dll⁩. قد تحتاج إلى الرجوع إلى ⁧⁩إضافة مكتبة Azure Kinect إلى المشروع الخاص بك⁧⁩.

#include <k4a/k4a.h>

العثور على جهاز Azure Kinect DK

يمكن توصيل العديد من أجهزة Azure Kinect DK بالكمبيوتر. سنبدأ أولاً بمعرفة عدد الأشخاص، أو إذا كان هناك أي منهم متصل على الإطلاق باستخدام الوظيفة ⁧⁩⁧k4a_device_get_installed_count()⁩⁧⁩. يجب أن تعمل هذه الدالة على الفور، دون أي إعداد إضافي.

uint32_t count = k4a_device_get_installed_count();

بمجرد تحديد وجود جهاز متصل بالكمبيوتر، يمكنك فتحه باستخدام ⁧⁩⁧k4a_device_open()⁩⁧⁩. ويمكنك توفير فهرس الجهاز الذي تريد فتحه، أو يمكنك استخدام ⁧K4A_DEVICE_DEFAULT⁩ فقط للجهاز الأول وحسب.

// Open the first plugged in Kinect device
k4a_device_t device = NULL;
k4a_device_open(K4A_DEVICE_DEFAULT, &device);

كما هو الحال مع معظم الأشياء في مكتبة Azure Kinect، عند فتح أحدها، يجب عليك إغلاقه أيضًا عند الانتهاء منه! وعندما تقوم بإيقاف التشغيل، تذكر تنفيذ استدعاء ⁧⁩⁧k4a_device_close()⁩⁧⁩.

k4a_device_close(device);

وبمجرد فتح الجهاز، يمكننا إجراء اختبار للتأكد من أنه يعمل. لذلك دعونا نقرأ الرقم التسلسلي للجهاز!

// Get the size of the serial number
size_t serial_size = 0;
k4a_device_get_serialnum(device, NULL, &serial_size);

// Allocate memory for the serial, then acquire it
char *serial = (char*)(malloc(serial_size));
k4a_device_get_serialnum(device, serial, &serial_size);
printf("Opened device: %s\n", serial);
free(serial);

بدء تشغيل الكاميرات

بعد فتح الجهاز، ستحتاج إلى تكوين الكاميرا باستخدام كائن ⁧⁩⁧k4a_device_configuration_t⁩⁧⁩. يحتوي تكوين الكاميرا على عدد من الخيارات المختلفة. اختر الإعدادات التي تناسب السيناريو الخاص بك.

// Configure a stream of 4096x3072 BRGA color data at 15 frames per second
k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.camera_fps       = K4A_FRAMES_PER_SECOND_15;
config.color_format     = K4A_IMAGE_FORMAT_COLOR_BGRA32;
config.color_resolution = K4A_COLOR_RESOLUTION_3072P;

// Start the camera with the given configuration
k4a_device_start_cameras(device, &config);

// ...Camera capture and application specific code would go here...

// Shut down the camera when finished with application logic
k4a_device_stop_cameras(device);

معالجة الأخطاء

من أجل الإيجاز والإيضاح، إننا لا نعرض معالجة الأخطاء في بعض الأمثلة المضمنة. ومع ذلك، تعد معالجة الأخطاء أمرًا مهمًا دائمًا! قد تقوم العديد من الوظائف بإرجاع نوع نجاح/ فشل عام ⁧⁩⁧k4a_result_t⁩⁧⁩، أو متغير أكثر تحديدًا بمعلومات مفصلة مثل ⁧⁩⁧⁩⁧k4a_wait_result_t⁩. تحقق من الوثائق أو IntelliSense لكل وظيفة لمعرفة رسائل الخطأ التي من المفترض رؤيتها بها!

يمكنك استخدام وحدات الماكرو ⁧⁩⁧K4A_SUCCEEDED⁩⁧⁩ و⁧⁩⁧⁩⁧K4A_FAILED⁩ والتحقق من نتيجة الدالة. لذا بدلاً من مجرد فتح جهاز Azure Kinect DK، قد نحرس استدعاء الدالة على النحو التالي:

// Open the first plugged in Kinect device
k4a_device_t device = NULL;
if ( K4A_FAILED( k4a_device_open(K4A_DEVICE_DEFAULT, &device) ) )
{
    printf("Failed to open k4a device!\n");
    return;
}

المصدر الكامل

#pragma comment(lib, "k4a.lib")
#include <k4a/k4a.h>

#include <stdio.h>
#include <stdlib.h>

int main()
{
    uint32_t count = k4a_device_get_installed_count();
    if (count == 0)
    {
        printf("No k4a devices attached!\n");
        return 1;
    }

    // Open the first plugged in Kinect device
    k4a_device_t device = NULL;
    if (K4A_FAILED(k4a_device_open(K4A_DEVICE_DEFAULT, &device)))
    {
        printf("Failed to open k4a device!\n");
        return 1;
    }

    // Get the size of the serial number
    size_t serial_size = 0;
    k4a_device_get_serialnum(device, NULL, &serial_size);

    // Allocate memory for the serial, then acquire it
    char *serial = (char*)(malloc(serial_size));
    k4a_device_get_serialnum(device, serial, &serial_size);
    printf("Opened device: %s\n", serial);
    free(serial);

    // Configure a stream of 4096x3072 BRGA color data at 15 frames per second
    k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
    config.camera_fps       = K4A_FRAMES_PER_SECOND_15;
    config.color_format     = K4A_IMAGE_FORMAT_COLOR_BGRA32;
    config.color_resolution = K4A_COLOR_RESOLUTION_3072P;

    // Start the camera with the given configuration
    if (K4A_FAILED(k4a_device_start_cameras(device, &config)))
    {
        printf("Failed to start cameras!\n");
        k4a_device_close(device);
        return 1;
    }

    // Camera capture and application specific code would go here

    // Shut down the camera when finished with application logic
    k4a_device_stop_cameras(device);
    k4a_device_close(device);

    return 0;
}

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

تعرف على كيفية العثور على جهاز Azure Kinect DK وفتحه باستخدام Sensor SDK