البحث عن جهاز Azure Kinect ثم فتحه

توضح هذه المقالة كيف يمكنك العثور على Azure Kinect DK ثم فتحه. تشرح المقالة كيفية التعامل مع الحالة حيث توجد عدة أجهزة متصلة بجهازك.

يمكنك أيضاً الرجوع إلى مثال تعداد SDK الذي يوضح كيفية استخدام الوظائف في هذه المقالة.

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

اكتشاف عدد الأجهزة المتصلة

احصل أولاً على عدد أجهزة Azure Kinect المتصلة حالياً باستخدام k4a_device_get_installed_count().

uint32_t device_count = k4a_device_get_installed_count();

printf("Found %d connected devices:\n", device_count);

فتح جهاز

للحصول على معلومات حول أحد الأجهزة، أو لقراءة البيانات منه، يلزمك أولاً فتح مؤشر للجهاز باستخدام k4a_device_open().

k4a_device_t device = NULL;

for (uint8_t deviceIndex = 0; deviceIndex < device_count; deviceIndex++)
{
    if (K4A_RESULT_SUCCEEDED != k4a_device_open(deviceIndex, &device))
    {
        printf("%d: Failed to open device\n", deviceIndex);
        continue;
    }

    ...

    k4a_device_close(device);
}

تشير المعلمة index الخاصة بـ k4a_device_open() إلى الجهاز الذي سيتم فتحه إذا كان هناك أكثر من جهاز متصل. إذا كنت تتوقع توصيل جهاز واحد فقط، فيمكنك تمرير وسيطة من K4A_DEVICE_DEFAULT أو 0 للإشارة إلى الجهاز الأول.

في أي وقت تفتح جهازاً تحتاج إلى الاتصال بـ k4a_device_close() عند الانتهاء من استخدام المؤشر. لا يمكن فتح مقابض أخرى على نفس الجهاز حتى تغلق المؤشر.

تحديد جهاز معين

لن يتغير ترتيب الأجهزة التي يتم تعدادها بالفهرس حتى يتم توصيل الأجهزة أو فصلها. لتحديد جهاز مادي، يجب عليك استخدام الرقم التسلسلي للجهاز.

لقراءة الرقم التسلسلي من الجهاز، استخدم الوظيفة k4a_device_get_serialnum() بعد فتح المؤشر.

يوضح هذا المثال كيفية تخصيص المقدار الصحيح من الذاكرة لتخزين الرقم التسلسلي.

char *serial_number = NULL;
size_t serial_number_length = 0;

if (K4A_BUFFER_RESULT_TOO_SMALL != k4a_device_get_serialnum(device, NULL, &serial_number_length))
{
    printf("%d: Failed to get serial number length\n", deviceIndex);
    k4a_device_close(device);
    device = NULL;
    continue;
}

serial_number = malloc(serial_number_length);
if (serial_number == NULL)
{
    printf("%d: Failed to allocate memory for serial number (%zu bytes)\n", deviceIndex, serial_number_length);
    k4a_device_close(device);
    device = NULL;
    continue;
}

if (K4A_BUFFER_RESULT_SUCCEEDED != k4a_device_get_serialnum(device, serial_number, &serial_number_length))
{
    printf("%d: Failed to get serial number\n", deviceIndex);
    free(serial_number);
    serial_number = NULL;
    k4a_device_close(device);
    device = NULL;
    continue;
}

printf("%d: Device \"%s\"\n", deviceIndex, serial_number);

فتح الجهاز الافتراضي

في معظم التطبيقات، لن يكون هناك سوى Azure Kinect DK واحد متصل بنفس الكمبيوتر. إذا كنت تحتاج فقط إلى الاتصال بالجهاز الوحيد المتوقع، فيمكنك الاتصال بـ k4a_device_open()index من K4A_DEVICE_DEFAULT لفتح الجهاز الأول.

k4a_device_t device = NULL;
uint32_t device_count = k4a_device_get_installed_count();

if (device_count != 1)
{
    printf("Unexpected number of devices found (%d)\n", device_count);
    goto Exit;
}

if (K4A_RESULT_SUCCEEDED != k4a_device_open(K4A_DEVICE_DEFAULT, &device))
{
    printf("Failed to open device\n");
    goto Exit;
}

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