رؤية الكمبيوتر على خادم Intel OWT WebRTC مع تسريع الأجهزة


لقد تبسيط WebRTC (في معظم الأحيان) تلقي وإرسال تدفقات الفيديو في الوقت الحقيقي. لذا ، يمكنك الاستمتاع ببعضهم باستخدام التعلم الآلي. في الشهر الماضي ، عرضت كيفية تشغيل Computer Vision (CV) محليًا في متصفح . كما ذكرت ، محليًا ، بالطبع ، جيد ، ولكن في بعض الأحيان مطلوب أداء أعلى ، ولهذا نحتاج إلى خادم بعيد. في هذا المنشور سأتحدث عن كيفية تشغيل نماذج خادم OpenCV مع تسريع الأجهزة على شرائح Intel باستخدام Open WebRTC Toolkit (OWT) مع رمز مفتوح المصدر.

كنت أرغب في اللعب مع خادم OWT منذ أن أظهرت Intel ميزات رؤية الكمبيوتر لـ Kranky Geek ، والآن أنا محظوظ بما يكفي للعمل مع فريق التطوير الخاص بهم لاستكشاف قدرات الخادم. أدناه سوف أتحدث عن كيفية تثبيت OWT محليًا للاختبار السريع ، وكذلك شرح بعض النماذج.

فتح WebRTC Toolkit (OWT)


أصدرت شركة Intel مجموعة تعاونها من Intel لـ WebRTC في عام 2014 تقريبًا. تتألف هذه الحزمة من حزم SDK للخادم والعميل مصممة لاستخدام أجهزة Intel. واصلت الشركة توسيع هذه المجموعة من البرامج ، بإضافة ميزات جديدة وتحسين قدراتها. في وقت لاحق ، في عام 2018 ، فتحت Intel رمز المصدر للمشروع بالكامل تحت العلامة التجارية Open WebRTC Toolkit (OWT). ما زالوا يقترحون استخدام Collaborate Suite لـ WebRTC ، وفقًا لهم ، والفرق الوحيد هو في تجميع Intel QA إضافي (وهو أمر غير نادر في مشاريع مفتوحة المصدر تدعمها الشركات التجارية). في هذا المنشور ، سنركز على OWT مفتوح المصدر.


يمكنك الذهاب إلى الصفحة الرئيسية لـ OWT على: 01.org/open-webrtc-toolkit

ماذا يفعل خادم الوسائط


يمكن أن يعمل خادم وسائط OWT كخادم وحدة تحكم متعددة النقاط (MCU) ، حيث يتم فك ترميز ملفات الوسائط ومعالجتها وتحويلها قبل إرسالها إلى العملاء بالإضافة إلى طريقة وحدة إعادة التوجيه الانتقائية الأكثر شيوعًا (SFU). يُنظر إلى OWT من Intel على أنه معالج وسائط في الوقت الفعلي مع ميزات للتطبيقات التالية:

  • المؤتمرات متعددة النقاط - أثبتت SFUs أنها البنية السائدة لمؤتمرات WebRTC ، ولكن لا تزال هناك حاجة لوحدات MCU في السيناريوهات حيث تكون المعالجة من جانب العميل محدودة (على سبيل المثال ، على جهاز إنترنت الأشياء) ، أو بالاشتراك مع إحدى النقاط أدناه.
  • – MCU , .
  • – -WebRTC , , RTSP, RTMP, HLS, MPEG-DASH.
  • – .
  • SIP-gateway – WebRTC , VoIP-.
  • – ( ).

تم بناء الخادم على node.js مع MongoDB لقاعدة البيانات و RabbitMQ كوسيط رسائل. يتم تنفيذ الوظائف المدرجة في القائمة أعلاه ، بالإضافة إلى تلك غير المدرجة في القائمة ، كوكلاء مختلفين متصلين بهندسة OWT.

بالإضافة إلى ذلك ، يحتوي OWT على SDK عميل للتفاعل مع خادم وسائط. يمكن استخدامه أيضًا في وضع P2P.

التسريع


تم تصميم البنية لاستخدام أجهزة Intel. وهذا يشمل معظم معالجات Intel الحديثة ومعالجات أكثر تسارعًا مع رسومات مدمجة و CPLDs (FPGAs) ورؤية آلة المعالجات المتخصصة Intel (وحدة معالجة الرؤية - VPU) . (هذا هو المشروع الذي قمت بإنشائه باستخدام إحدى شرائح Movidius الخاصة بهم مع Google Vision Kit).


التحليلات ورؤية الكمبيوتر (السيرة الذاتية)


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

وكيل OWT Analytics هو وحدة لتلقي التنبؤات في الوقت الحقيقي على نماذج OpenVINO. يمكن لوكيل Analystics Agent إرسال بيانات تعريف الإخراج إلى السحابة ، أو يمكنك أنت بنفسك إعادة إرسالها إلى خادم الوسائط لإجراء ، على سبيل المثال ، تعليقات توضيحية للفيديو في الوقت الفعلي (سأعرضها بعد ذلك بقليل). يتم استخدام مكتبة GStreamer المعروفة لإدارة خطوط الأنابيب متعددة الوسائط.

هندسة معمارية



الرسم البياني أعلاه مأخوذ من دليل تحليلات الخادم . يبدو الأمر معقدًا ، ولكن عليك فقط أن تتذكر أن عامل Analytics يعمل كمشارك آخر في المؤتمر يمكنه الاشتراك في قناة الفيديو في هذا المؤتمر. بعد أن يتلقى دفق الفيديو ، يمكنك توجيه معالجة الدفق إلى مراحل مختلفة باستخدام خط أنابيب GStreamer. في معظم الحالات ، ستحتاج إلى إجراء التنبؤ والتصنيف قبل إعادة دفق الفيديو إلى MCU ، ولكن يمكنك أيضًا إرسال بيانات الدفق و / أو إخراج البيانات في مكان آخر.

تركيب عامل الميناء


سيستغرق التثبيت بعض الوقت ، حيث ستحتاج إلى تثبيت خادم OWT و Analytics Agent. لحسن الحظ ، لديهم تعليمات بناء Docker لسهولة التثبيت. إذا كنت تريد ، يمكنك تشغيل وكيل OWT + Analytics كأربع حاويات منفصلة للبيئات الموزعة. قررت ترك كل ما لدي في حاوية واحدة لتبسيط التقييم.

في الواقع ، أعطتني Intel في البداية صورة gst-owt-all:runللعمل ، حيث أنه في وقت كتابة مقالتي كانوا يقومون بتحديث الوثائق لتثبيت وكيل Analytics. المجموعة الجديدة مفهومة أكثر بكثير. ما زلت أوصي بأن تتعرف أولاً على تثبيت OWT القياسي لفهم مكوناته وخياراته.

بالإضافة إلى ذلك ، تحتاج إلى تجميع الكثير مع دول مجلس التعاون الخليجي. تأكد من أن لديك أحدث إصدار عن طريق تشغيل الأمر التالي: brew install gcc

في البداية ، لم يتم تجميع أي شيء بالنسبة لي ، ولكن بعد تشغيل هذا الأمر ، عمل كل شيء.
في النهاية ، بدأت في بناء كل شيء بمفردي. لإنشاء خادم OWT مع Analytics ، قم بتشغيل الأمر التالي:

git clone https://github.com/open-webrtc-toolkit/owt-server.git
 
cd owt-server
git branch gst-analytics
cd /owt-server/docker/gst
curl -o l_openvino_toolkit_p_2019.3.334.tgz http://registrationcenter-download.intel.com/akdlm/irc_nas/15944/l_openvino_toolkit_p_2019.3.334.tgz
http://registrationcenter-download.intel.com/akdlm/irc_nas/15944/l_openvino_toolkit_p_2019.3.334.tgz
docker build --target owt-run-all -t gst-owt-all:run \
  --build-arg http_proxy=${HTTP_PROXY} \
  --build-arg https_proxy=${HTTPS_PROXY} \
  .

بعد إعداد خادم OWT الرئيسي وخدمة Analytics ، ستحتاج إلى تنزيل النماذج اللازمة من OpenCV Open Model Zoo وبناء خط أنابيب تحليلي لاستخدامها. بالنسبة للأمثلة المرفقة ، كل هذا يتضمن ببساطة تشغيل أمر التجميع في bash ونسخ بعض الملفات.

التحقق من الصحة على macOS


تكوين منافذ عامل الميناء


--net=hostلا يعمل خيار عامل الميناء على نظام macOS ، لذلك تحتاج إلى فتح المنافذ المقابلة للتشغيل المحلي:
ميناءالخدمات
8080منفذ إشارة مقبس الويب لـ WebRTC
3004خادم الويب لتنزيل الصفحة التجريبية
30000-30050منافذ UDP لـ WebRTC

إطلاق عامل الميناء


لقد قمت بتثبيت الحاوية الخاصة بي مثل هذا:

docker run -p 8080:8080 -p 3004:3004  -p 30000-30050:30000-30050/udp --name owtwebrtchacks --privileged -tid gst-owt-all:run bash

تحرير إعدادات OWT الافتراضية للتشغيل محليًا على MacOS


هنا يجب عليك تحرير الملف webrtc_agent/agent.tomlللتعرف على هذه المنافذ.

docker start owtwebrtchacks
docker exec -it owtwebrtchacks bash
vi /home/owt/webrtc_agent/agent.toml

ثم استبدلها 0acf7c0560d8باسم الحاوية أو معرفها. وتغيير ما يلي:


بعد ذلك ، تحتاج إلى إخبار مورد الويب بحيث يعرض المستعرض "localhost" بدلاً من جسر IP الداخلي للرسو (172.17.0.2):

vi /home/owt/portal/portal.toml


مرة أخرى ، على الأنظمة الأساسية الأخرى ، يمكنك استخدام التكوين الافتراضي إذا قمت بتشغيل الحاوية الخاصة بك مع الخيار --net=host.

بدء الخادم


الآن يمكنك بدء الخادم:

./home/start.sh

قد تتلقى هذه الأخطاء:

2020-03-31T01:47:20.814+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:21
exception: connect failed

هذا أمر طبيعي أثناء اتصال الخادم. ستفهم أن كل شيء يعمل إذا رأيت شيئًا مثل:

starting app, stdout -> /home/owt/logs/app.stdout
0 rooms in this service.
Created room: 5e82a13b402df00313685e3a
sampleRoom Id: 5e82a13b402df00313685e3a

اختبار في المتصفح


افتح https: // localhost: 3004 / في متصفح على الجهاز المحلي. ستحتاج إلى تمكين الشهادة ، حيث سيواجه المتصفح مشاكل معها.


وإلى جانب ذلك ، تحتاج إلى تمكين خادم websocket على localhost: 8080 . يمكنك القيام بذلك عن طريق النقر على الرابط " انقر فوق هذا لاختبار الشهادة والتحديث ". بدلاً من ذلك ، يمكنك أيضًا تعيين #allow-insecure-localhostإشارات chrome: // لتجنب مشكلات الإبلاغ في Chrome.


بمجرد القيام بذلك ، ارجع إلى https: // localhost: 3004 / واقبل دقة الكاميرا. حدد معرّف قناة الفيديو فورًا في القائمة المنسدلة "فيديو من" وانقر على "startAnalytics".


أخيرًا ، انتقل إلى القائمة المنسدلة "اشتراك الفيديو" ، وحدد خط الأنابيب الطويل + معرف الفيديو وانقر على اشتراك:


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


إضافة نماذج OpenCV


يحتوي وكيل Analytics على بنية المكون الإضافي OpenCV GStreamer Video Analytics (GVA) . تتضمن GVA مجموعة متنوعة من الوحدات التي تسمح لك باستخدام مخططات التنبؤ المختلفة ، مثل الكشف والتصنيف والتعرف ، بالإضافة إلى وحدات الإدخال والإخراج لإرسال الفيديو إلى المستخدمين (في هذه الحالة ، العودة إلى OWT) ، وتوفير تراكب الصور أو دفق البيانات عبر مقت.

خط الأنابيب


من الناحية العملية ، يتم تنفيذ خطوط الأنابيب هذه عن طريق تغيير بعض كود C ++. على سبيل المثال ، إذا نظرنا إليها /home/owt/analytics_agent/plugins/samples/cpu_pipeline/mypipeline.cc، فسوف نرى عناصر مختلفة لخطوط الأنابيب:

 source = gst_element_factory_make("appsrc", "appsource");
 h264parse = gst_element_factory_make("h264parse","parse");
 decodebin = gst_element_factory_make("avdec_h264","decode");
 postproc = gst_element_factory_make("videoconvert","postproc");
 detect = gst_element_factory_make("gvadetect","detect");
 classify = gst_element_factory_make("gvaclassify","classify");
 watermark = gst_element_factory_make("gvawatermark","rate");
 converter = gst_element_factory_make("videoconvert","convert");
 encoder = gst_element_factory_make("x264enc","encoder");
 outsink = gst_element_factory_make("appsink","appsink");x

وتقع خطوط الأنابيب هذه في تسلسل معين:

gst_bin_add_many(GST_BIN (pipeline), source,decodebin,watermark,postproc,h264parse,detect,classify,converter, encoder,outsink, NULL);

إذا كنت ترغب في تغيير أي من عناصرها ، فستحتاج إلى إعادة ترجمة خط الأنابيب باستخدام الأمر:

./home/owt/analytics_agent/plugins/samples/build_samples.sh

ثم فقط قم بنسخ المكتبات المترجمة أعلى المكتبة الحالية المستخدمة في /home/owt/analytics_agent/lib/.

الحصول على نماذج أخرى


هناك مجموعة ضخمة من النماذج المستضافة تحت OpenCV Open Model Zoo على GitHub . بالإضافة إلى جميع نماذج السيرة الذاتية العامة الشائعة ، مثل mobilenet و resnet و squeezenet و vgg وغيرها الكثير ، تدعم Intel أيضًا مجموعة تشتمل على مجموعة كبيرة من النماذج المفيدة للكشف عن الأشياء ، وللمركبات غير المأهولة ومعالجة الإجراءات البشرية:
الاعتراف بالعملتقدير وضع الرأسشخص كشف-عمل-التعرف على المعلمالتجزئة الدلالي
التعرف على العمر والجنستقدير وضع الإنسانكشف شخص aslدقة صورة واحدة فائقة
الاعتراف بلغة الإشارةاسترجاع الصورالتعرف على الأشخاص - التعرف على اليدكشف النص
سائق العمل الاعترافتجزئة المثيل - الأمنكشف شخصدقة صورة نصية فائقة
التعرف على العواطفالانحدار المعالمإعادة تعريف الشخصالتعرف على النص
الكشف عن الوجهحاجز التعرف على لوحة الترخيصشخص-مركبة-دراجة-كشف مفترق طرقاكتشاف النص
إعادة تحديد الوجهكاشف المشاة والمركباتكشف المنتجحاجز التعرف على سمات السيارة
معالم الوجه -35كشف المشاةresnet18-xnor-binary-onnxكشف المركبات
تقدير نظرةشخص سمات الاعتراف مفترق طرقresnet50 ثنائيكشف المركبات ثنائي
التعرف على درجات بخط اليدالتعرف على الشخص - عمل - التعرفتجزئة الطريقحاجز كشف رخصة السيارة

لدى Intel مزيد من المعلومات حول هذا هنا .

إضافة نماذج إلى وكيل التحليلات OWT


لإضافة نماذج ، يجب استنساخ المستودع ، ثم الحصول على النماذج المقابلة باستخدام أداة Open Model Zoo Downloader . بعد ذلك ، تحتاج إلى التأكد من أن خط الأنابيب الخاص بك يحتوي على العناصر المناسبة (التصنيف والكشف وتحديد الهوية) وتكوين الملف /home/owt/analytics_agent/plugin.cfgباستخدام المعلمات المناسبة.

اختبار البرنامج المساعد


جربت عدة نماذج للتعرف على الوجه والعاطفة.

النقاط المرجعية للوجه


نظرًا لأنني لعبت بالفعل مع الكشف عن اللمسات على الوجه ، فقد قررت التحقق من نموذج الوجه-المعالم-35-adas-0002 . يكتشف هذا النموذج 35 نقطة مرجعية للوجه.


في تطبيق مراقبة لمس وجهي ، يمكنني إضافة تدفق MQTT إلى خط الأنابيب باستخدام ناشر البيانات الوصفية العامة gstreamer لالتقاط نقاط الربط ومعالجتها. على سبيل المثال ، يمكنني أن أرى ما إذا كانت النقاط حول العين والأنف والفم مظلمة ، أو حتى دمج كل هذا مع نموذج لتقييم وضع الشخص .

التعرف على الانفعالات


هذا شيء رائع آخر. يستخدم نموذج العواطف-التعرف-التجزئة-0003 شبكة تلافيفية للتعرف على التعبيرات المحايدة والسعيدة والحزينة والمفاجئة والغاضبة.


يبدو أن تعابير وجهي لا يُنظر إليها على أنها محايدة ، لكنها محزنة - ربما مثل هذه الإقامة الطويلة في عزلة تبدأ في إستيعابي: (

تحسين التسريع


للاستفادة من قدرات تسريع أجهزة OWT ، تأكد من تثبيت الجهاز المناسب في /home/owt/analytics_agent/plugin.cfg- أي اكتب:

device = "MULTI:HDDL,GPU,CPU"

لسوء الحظ ، لم يكن لدي الوقت الكافي لاختبار هذا ، ولكن بالإضافة إلى تسريع وحدة المعالجة المركزية ووحدة معالجة الرسومات ، يمكنك أيضًا الاستفادة من أجهزة معالج رؤية الجهاز المختلفة (VPU). هذه شرائح متخصصة للتشغيل الفعال للشبكات العصبية. لقد اشتريت بطاقة Intel Neural Computing Card (NCS) قبل عامين لإطلاق نماذج سيرة ذاتية أكثر تقدمًا على Raspberry Pi 3.

بالطبع ، يمكنك دائمًا إيجاد حل وسط بين قوة المعالجة ومعدل / دقة الإطار.

التوصيات


لدى OpenCV تاريخ طويل مع مجتمع ضخم من المطورين ، فقد احتلت المرتبة الرابعة من بين جميع مشاريع التعلم الآلي المفتوحة المصدر في وقت تحليل شعبي في منتصف 2018 . وبالمثل ، فإن gstreamer هو مشروع آخر موجود منذ العصور. يُعد وكيل Intel OWT Analytics في وضع مثالي لمساعدة هذه المجتمعات على إضافة تحليل التدفق في الوقت الفعلي إلى مشاريعها من خلال WebRTC. يجب أن يكونوا قادرين على أخذ نماذج GST الحالية وتشغيلها في البث في الوقت الحقيقي باستخدام OWT.

إذا كنت قد بدأت للتو في تجربة رؤية الكمبيوتر وتريد تشغيل النماذج على خادم OWT ، فإنني أوصي بالبدء بمزيد من دروس OpenCV الأساسية. ثم يمكنك الوصول إلى مكونات GVA الإضافية.. ستحتاج إلى الكثير من الجهد إذا كنت قد بدأت للتو في العمل مع OpenCV ، ولكن في وقت لاحق لن تواجه مشكلة في تغيير وكيل Analytics لتشغيله. يمكنك تحسين المكدس للعمل مع النظام الأساسي المستهدف واستخدام خيارات تسريع أجهزة Intel المتنوعة لتحسين الأداء.

All Articles