كيفية تحويل إطارات ImageFrames وGpuBuffers
تعمل الحاسبات ImageFrameToGpuBufferCalculator
وGpuBufferToImageFrameCalculator
على التحويل ذهابًا وإيابًا بين حزم البيانات من النوع ImageFrame
وGpuBuffer
. تشير العلامة ImageFrame
إلى بيانات الصورة في ذاكرة وحدة المعالجة المركزية (CPU)
في أي عدد من تنسيقات الصور النقطية. يشير الرمز GpuBuffer
إلى
بيانات الصورة في ذاكرة وحدة معالجة الرسومات. يمكنك العثور على مزيد من التفاصيل في قسم "Frame Concepts" (مفاهيم إطار العمل)
GpuBuffer to ImageFrame
Converters. يمكنك الاطّلاع على مثال في:
كيفية تصور نتائج التصور
تسمح علامة التبويب AnnotationOverlayCalculator
بتركيب نتائج التصور، مثل مربّعات الحدود والأسهم والأشكال البيضاوية، على إطارات الفيديو التي تتم محاذاتها مع العناصر التي تم التعرّف عليها. يمكن عرض النتائج في نافذة تشخيص عند تشغيلها على محطة عمل، أو في إطار مزخرف عند التشغيل على الجهاز. يمكنك الاطّلاع على مثال على استخدام AnnotationOverlayCalculator
في:
كيفية تشغيل الآلات الحاسبة بالتوازي
ضمن الرسم البياني للآلة الحاسبة، يشغّل MediaPipe بشكل روتيني عقد حاسبة منفصلة بالتوازي. تحتفظ MediaPipe بمجموعة من السلاسل، وتشغل كل آلة حاسبة بمجرد توفر سلسلة التعليمات وتصبح جميع إدخالاتها جاهزة. يتم تشغيل كل مثيل للآلة الحاسبة لمجموعة واحدة من الإدخالات في كل مرة، لذلك تحتاج معظم الحاسبات إلى أن تكون متوافقة مع سلسلة المحادثات وليس متوافقة مع سلسلة المحادثات.
لتمكين حاسبة واحدة من معالجة إدخالات متعددة بالتوازي، هناك طريقتان محتملتان:
- تحديد العديد من عقد الآلة الحاسبة وإرسال حزم الإدخال إلى جميع العُقد.
- عليك جعل الآلة الحاسبة آمنة لسلسلة المحادثات وضبط إعداد
max_in_flight
لها.
يمكن اتّباع النهج الأول باستخدام الحاسبات المصمّمة لتوزيع
الحزم على الحاسبات الأخرى، مثل RoundRobinDemuxCalculator
. يمكن لعنصر RoundRobinDemuxCalculator
واحد توزيع حِزم متتالية على عدة عُقد ScaleImageCalculator
تم ضبطها بشكل متطابق.
يتيح الأسلوب الثاني ما يصل إلى max_in_flight
من استدعاءات طريقة CalculatorBase::Process
على عقدة الآلة الحاسبة نفسها. يتم ترتيب حِزم الإخراج من CalculatorBase::Process
تلقائيًا حسب الطابع الزمني قبل تمريرها إلى الآلات الحاسبة للانتقال.
عند الوصول إلى أي من النهجين، يجب أن تدرك أن الآلة الحاسبة التي تعمل بالتوازي لا يمكنها الحفاظ على الحالة الداخلية بالطريقة نفسها مثل الآلة الحاسبة التسلسلية العادية.
إخراج الطوابع الزمنية عند استخدام ImmediateInputStreamHandler
تسلُّم ImmediateInputStreamHandler
كل حزمة فور وصولها إلى مصدر الإدخال. ونتيجة لذلك، يمكنه إرسال حزمة ذات طابع زمني أعلى من مصدر إدخال واحد قبل إرسال حزمة ذات طابع زمني أقل من مصدر إدخال مختلف. إذا تم استخدام كل من الطوابع الزمنية للإدخال للحزم المرسلة
إلى مصدر إخراج واحد، سيقدم بث الإخراج هذا شكوى من أن الطوابع الزمنية
لن تتزايد بشكل منتظم. لمعالجة ذلك، يجب أن تحرص الآلة الحاسبة
على إخراج حزمة فقط بعد اكتمال المعالجة للطابع الزمني.
يمكن تحقيق ذلك من خلال الانتظار إلى أن يتم تلقّي حِزم الإدخال من جميع مصادر الإدخال لهذا الطابع الزمني، أو من خلال تجاهل الحزمة التي تصل ذات طابع زمني سبق وتمت معالجته.
كيفية تغيير الإعدادات في وقت التشغيل
هناك طريقتان رئيسيتان لتغيير إعدادات الرسم البياني للآلة الحاسبة أثناء تشغيل التطبيق:
- أعِد تشغيل الرسم البياني للآلة الحاسبة مع تعديل
CalculatorGraphConfig
. - يمكنك إرسال خيارات حاسبة جديدة من خلال الحُزم في عمليات بث إدخال الرسم البياني.
يتميّز النهج الأول بالاستفادة من أدوات معالجة CalculatorGraphConfig
، مثل "البيانات الفرعية". يتميز النهج الثاني بالسماح للآلات الحاسبة والحزم النشطة
بالبقاء أثناء الطيران أثناء تغيير الإعدادات. يبحث المساهمون في Mediatube حاليًا عن
أساليب بديلة لتحقيق كلتا الميزتين.
كيفية معالجة مجموعات بث الإدخال في الوقت الفعلي
يمكن استخدام إطار عمل Mediape لمعالجة مصادر البيانات إما عبر الإنترنت أو بلا اتصال بالإنترنت. لإجراء المعالجة بلا اتصال بالإنترنت، يتم إرسال الحُزم إلى الرسم البياني حالما تصبح الحاسبات جاهزة لمعالجة هذه الحزم. للمعالجة عبر الإنترنت، يتم دفع حزمة واحدة لكل إطار إلى الرسم البياني أثناء تسجيل هذا الإطار.
لا يتطلب إطار عمل MediaPipe سوى تعيين طوابع زمنية متزايدة بشكل منتظم
للحزم المتتالية. وحسب الاصطلاح، تستخدم الآلات الحاسبة والرسومات البيانية وقت التسجيل أو وقت العرض كطابع زمني لكل
حزمة، حيث يمثّل كل طابع زمني بالميكرو ثانية منذ
Jan/1/1970:00:00:00
. يسمح ذلك بمعالجة الحزم من مصادر مختلفة بترتيب عام.
عادةً ما بالنسبة للمعالجة بلا اتصال بالإنترنت، تتم معالجة كل حزمة إدخال وتستمر المعالجة طوال فترة المعالجة. للمعالجة عبر الإنترنت، غالبًا ما يكون من الضروري إسقاط حزم الإدخال من أجل مواكبة وصول إطارات بيانات الإدخال.
عند وصول الإدخالات بشكل متكرر جدًا، يتمثّل الأسلوب الموصى به لإسقاط الحزم في استخدام الحاسبات MediaPipe المصممة خصيصًا لهذا الغرض، مثل FlowLimiterCalculator
وPacketClonerCalculator
.
وللمعالجة على الإنترنت، من الضروري أيضًا تحديد متى يمكن متابعة المعالجة على الفور. يدعم MediaPipe ذلك من خلال نشر حدود الطابع الزمني
بين الحاسبات. تشير حدود الطابع الزمني إلى الفواصل الزمنية للطوابع الزمنية التي
لا تحتوي على حزم إدخال، وتسمح للآلات الحاسبة ببدء معالجة تلك
الطوابع الزمنية على الفور. يجب أن تحسب الحاسبات المصممة للمعالجة في الوقت الفعلي حدود الطوابع الزمنية بعناية من أجل بدء المعالجة بأسرع ما يمكن. على سبيل المثال، تستخدم MakePairCalculator
واجهة برمجة التطبيقات SetOffset
(API) لنشر حدود الطابع الزمني من مصادر الإدخال إلى أحداث بث المخرجات.
هل يمكنني تشغيل MediaPipe على نظام التشغيل MS Windows؟
تتوافق ميزة نقل الوسائط MediaPipe حاليًا مع أنظمة التشغيل Debian Linux وUbuntu Linux وMacOS وAndroid وiOS. يتمثل جوهر إطار عمل MediaPipe في مكتبة C++ التي تتوافق مع معيار C++11، لذا من السهل نسبيًا المنفذ إلى أنظمة أساسية إضافية.