كيف قمنا بتطوير جهاز لمراقبة انتباه السائقين. تجربة Yandex.Taxi



يجب أن تكون سيارات الأجرة مريحة وآمنة. وهذا لا يعتمد فقط على جودة السيارة والخدمة ، ولكن أيضًا على تركيز انتباه السائق ، الذي يقع أثناء العمل الزائد. لذلك ، على مستوى الخدمة ، نقوم بتحديد الوقت الذي يقضيه السائق في القيادة.

لكن في بعض الأحيان يكون السائقون متعبين بالفعل - على سبيل المثال ، كان الشخص مشغولا في وظيفة أخرى طوال اليوم ، وفي المساء قرر "التوجيه". ماذا تفعل حيال ذلك؟ كيف نفهم أن السائق يتدخل دون تغيير النوم؟ يمكنك ، على سبيل المثال ، محاولة تقييم مدى قربه من مراقبة الطريق وتحديد علامات التعب ، على سبيل المثال ، حسب طبيعة الوميض. هل هذا الصوت بسيط؟ كل شيء أكثر تعقيدًا مما يبدو.

اليوم ، سنخبر القراء في هبر أولاً كيف توصلنا إلى كاميرا طورناها للقيام بذلك.

لذلك ، يعطى: يعتمد تواتر ومدة الضوء الوامض على درجة التعب. عندما نتعب ، يكون الرأس أقل تنقلاً ، يتغير اتجاه نظراتنا بشكل متكرر ، ونمض في كثير من الأحيان ونترك أعيننا مغلقة لفترات طويلة من الزمن - يمكن قياس الفرق في كسور من الثانية أو عدة درجات من التناوب ، لكنه موجود. كانت مهمتنا هي تصميم جهاز يسمح لنا بتحليل الضوء الوامض ، وكذلك اتجاه نظرتنا وتثاؤبنا وحركات الرأس ، من أجل تقييم مستوى الاهتمام والتعب لدى السائق.

أولاً ، قررنا: دعونا نجعل تطبيق الكمبيوتر المحمول ، ونضعه على المتطوعين من بين الموظفين ، وهل يستخدم الكاميرا المدمجة لتتبع العلامات التي نحتاجها؟ لذلك سنقوم على الفور بجمع مجموعة كبيرة من المعلومات لتحليلها واختبار فرضياتنا بسرعة.

المفسد: لم يحدث شيء! بسرعة كبيرة أصبح من الواضح أن معظم الناس عند العمل على الكمبيوتر ينظرون باستمرار إلى لوحة المفاتيح ويميلوا رؤوسهم. أي أن العيون غير مرئية ، وليس من الواضح ما إذا كانت مغلقة أو مفتوحة ، يومض الشخص أو ينظر ببساطة من الشاشة إلى لوحة المفاتيح والعكس.



ثم أدركنا أنه حتى من أجل صنع نموذج أولي ، نحتاج إلى نوع من الجهاز. اشترينا أول كاميرا IP متاحة ، والتي تعمل في نطاق الأشعة تحت الحمراء.

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

للتجربة ، ظهرت كاميرا شعبية إلى حد ما من Xiaomi - CHUANGMI.



لقد اتضح أنها تطلق النار على تردد 15 لقطة في الثانية ، ونحن بحاجة إلى ضعف ذلك: الوامض يدوم من 30 إلى 150 مللي ثانية ، وعند 15 لقطة في الثانية ، خاطرنا بعدم رؤية وميض أقصر من 60 إلى 70 مللي ثانية. لذلك ، اضطررنا إلى تعديل البرنامج الثابت الخاص به من أجل تشغيل إضاءة IR بالقوة ، والوصول المباشر إلى دفق الفيديو والتقاط 30 إطارًا ضروريًا في الثانية. بعد توصيل الكاميرا بجهاز الكمبيوتر المحمول وتكوينها لتلقي دفق الفيديو عبر بروتوكول RTSP ، بدأنا في تسجيل مقاطع الفيديو الأولى. تم وضع الكاميرا أسفل كاميرا الكمبيوتر المحمول بحجم 15 سم ، مما مكن من "رؤية" عيون المستخدم بشكل أفضل.

النجاح؟ ومرة أخرى ، لا. بعد جمع مئات الفيديوهات ، أدركنا أنه لم يحدث شيء. يختلف سلوك مستخدم الكمبيوتر المحمول أثناء اليوم عن سلوك السائق: يمكن للشخص أن يستيقظ في أي وقت ، وينتقل لتناول الطعام ، ويمشي ويمارس عملية الاحماء ، بينما يقضي السائق وقتًا أطول في وضع الجلوس. لذلك ، هذه البيانات لا تناسبنا.

أصبح من الواضح أن الطريقة الوحيدة هي صنع أو شراء كاميرا مناسبة وتثبيتها في السيارة.

يبدو أن كل شيء أساسي: نشتري DVR ، وننتقل إلى السائق ، ونثبت في السيارة ، ونقوم مرة واحدة في الأسبوع بالتقاط بطاقات SD مع تسجيلات فيديو. ولكن هنا ، في الواقع ، تبين أن كل شيء ليس بهذه البساطة.

أولاً ، من الصعب للغاية العثور على DVR مع إضاءة الأشعة تحت الحمراء ، ونحن بحاجة إلى رؤية الوجه جيدًا ، لا سيما في الليل.

ثانياً ، تحتوي جميع مسجلات الفيديو الرقمية على عدسة بزاوية عريضة ، وبالتالي فإن المنطقة ذات وجه السائق تتحول إلى مساحة صغيرة جدًا ولا يمكنك تسجيل أي شيء في السجل. نعم ، والتشويه من العدسة يفسد إلى حد كبير تحليل موقف الرأس واتجاه الرؤية.

ثالثًا ، لا يتناسب هذا المشروع جيدًا مع عشرة أو مائة أو أكثر من الآلات. نحتاج إلى جمع الكثير من البيانات من برامج تشغيل مختلفة من أجل تحليلها واستخلاص النتائج. يعد تغيير بطاقات الذاكرة يدويًا على 100 جهاز كل أسبوع أو كل يوم مضيعة هائلة للوقت. حاولنا حتى العثور على كاميرا من شأنها تحميل مقاطع الفيديو على السحابة ، ولكن لم يكن هناك شيء مماثل في السوق.

كان هناك حتى فكرة لجعل "DVR الخاص بك" من Raspberry Pi ، وهي كاميرا مع إضاءة الأشعة تحت الحمراء ويتصاعد.



لم تكن النتيجة كما توقعنا تمامًا: مرهقة ، من المستحيل تثبيت الكاميرا بشكل منفصل عن الكمبيوتر. والحقيقة هي أنه مع طول الكابل الذي يزيد عن 50 سم ، بدأت مشاكل الإشارة ، وكابل CSI نفسه هش للغاية ، واسع للغاية ، وبالتالي فهو غير مناسب للتركيب في الجهاز.

يجب أن نذهب إلى هونغ كونغ ، قررنا. كان الغرض من الرحلة مجرّدًا تمامًا: لمعرفة ما يفعله مختلف المصنعين في مجال تحليل سلوك السائق ، وشراء عينات المنتج إذا وجدنا ، والبحث عن حلول / مكونات تقنية مناسبة يمكننا تثبيتها في السيارات.

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

نتيجة لذلك ، اشترينا عدة عينات من الكاميرات وأجهزة الكمبيوتر ذات اللوحة الواحدة. أصبح من الواضح أنه 1) لا توجد منتجات تامة الصنع مناسبة لنا ؛ 2) من الضروري فصل الكمبيوتر والكاميرا حتى لا تحجب رؤية السائق. لذلك ، أخذنا لوحة كاميرا مزودة بواجهة USB ، وكوحدة حوسبة ، حاسب Banana Pi أحادي اللوحة ، وفي الوقت نفسه العديد من مشغلات Android استنادًا إلى معالجات Amlogic.



"لماذا هم اللاعبون؟" - أنت تسأل. في الواقع ، تعتبر S912 وحتى S905 قوية للغاية من حيث الأداء ويمكنهما بسهولة سحب تسجيل الفيديو لأغراضنا حتى مع تحليل الصور في الحال. هناك حاجة إلى تحليل الصور في الموقع حتى لا يرسل دفق الفيديو بأكمله إلى الخادم.

دعنا نحسب: دقيقة من الفيديو المضغوط بدقة H.264 بدقة 640 × 480 (30 إطارًا في الثانية) تستغرق 5 ميغابايت على الأقل. لذلك ، في غضون ساعة سيكون هناك 300 ميغابايت ، وللتحول القياسي 8 ساعات - حوالي 2-3 غيغا بايت.

يعد تحميل 3 غيغابايت من الفيديو يوميًا بمساعدة مودم LTE "مكلفًا للغاية". لذلك ، قررنا تسجيل مقاطع فيديو مدتها 5 دقائق بشكل دوري ، وتحليل كل ما يحدث في السيارة هناك وتحميله على خوادمنا في شكل مجموعة من الأحداث التي تم تحليلها: مجموعة من نقاط الوجه ، وجهة نظر ، دورة رأسية ، إلخ.

عدنا من المعارض في مزاج جيد ، وجلبنا مجموعة من القمامة الضرورية (وغير الضرورية) وأدركنا كيف سنستمر في صنع النموذج الأولي.

كانت كاميرا USB التي وجدناها في هونغ كونغ مثالية لنا تقريبًا: مقاس 38 × 38 مم ، عدسات قياسية (12 مم) ، القدرة على لحام إضاءة الأشعة تحت الحمراء مباشرةً على اللوحة.



لذلك ، طلبنا على الفور من الشركة المصنعة أن تجعلنا نموذجًا أوليًا يحتوي على المكونات الضرورية. لقد فهمنا الآن: نحن بحاجة إلى كاميرا USB مزودة بإضاءة خلفية وجهاز كمبيوتر أحادي اللوحة لمعالجة الفيديو. قررنا تجربة كل ما تم تقديمه في السوق ، ورتبنا جلسة تسوق على AliExpress. اشترينا أربع كاميرات مختلفة ، وعشرات أجهزة الكمبيوتر أحادية اللوح ، ومشغلات أندرويد ، ومجموعة من العدسات 12 مم والعديد من الأجهزة الغريبة الأخرى.



تم حل المشكلة مع الجهاز. وماذا عن البرنامج؟

بسرعة كبيرة ، تمكنا من الحصول على نموذج أولي بسيط يعتمد على OpenCV ، الذي يكتب مقطع فيديو ، ويجد وجه السائق ، ويحلله ، ويحدد 68 نقطة أساسية على الوجه ، ويتعرف على الوميض ، والتثاؤب ، ولف الرأس ، إلخ.

كانت المهمة التالية هي جعل النموذج الأولي يعمل على جهاز كمبيوتر واحد. سقطت توت العليق على الفور: عدد قليل من النوى ، معالج ضعيف ، أكثر من سبعة إطارات في الثانية الواحدة لا يمكن سحبها منه. وحول كيفية كتابة مقطع فيديو في وقت واحد والتعرف على الوجه وتحليله ، لم يكن هناك سؤال. وللأسباب نفسها ، فإن أجهزة فك التشفير وأجهزة الكمبيوتر ذات اللوحة المفردة على Allwinner (H2 و H3 و H5) و Amlogic S905 و Rockchip RK3328 لم تكن مناسبة لنا ، على الرغم من أن الأخير كان قريبًا جدًا من الأداء المطلوب. نتيجة لذلك ، لا يزال لدينا نوعان من SoCs: Amlogic S912 و Rockchip RK3399.

في Amlogic ، كان اختيار الأجهزة صغيرًا: صندوق تلفزيون أو Khadas VIM2. كان كل شيء يعمل كما هو في مربع التلفزيون و Khadas ، لكن تبريد أجهزة فك التشفير ترك الكثير مما هو مرغوب فيه ، وغالبًا ما يكون إعداد نظام Linux عليها باهتًا: الحصول على Wi-Fi و BT للعمل وجعل نظام التشغيل يرى الذاكرة بالكامل ، - إنها طويلة وصعبة ولا يمكن التنبؤ بها. نتيجة لذلك ، اخترنا Khadas VIM2: يحتوي على مشعاع تبريد قياسي ، واللوحة مضغوطة بدرجة كافية لإخفائها خلف لوحة معلومات الماكينة.



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

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

من الواضح أن الكاميرا كانت بحاجة إلى جسم وجبل. لقد اشترينا طابعتين ثلاثي الأبعاد في وقت واحد لطباعة أجزاء ، وجعلنا المقاول أول نموذج بدائي لهذه العلبة.



لقد نشأت الآن مهمة الاختيار الصعبة: حيث يتم تركيب الكاميرا في السيارة للحصول على صورة جيدة ، ولكن ليس لإخفاء رؤية السائق. كان هناك ثلاثة خيارات بالضبط:

  1. في منتصف الزجاج الأمامي.
  2. في الرف الأيسر.
  3. على مرآة الرؤية الخلفية.



في تلك اللحظة ، بدا لنا أنه من الأفضل توصيل الكاميرا مباشرة بمرآة الرؤية الخلفية: يتم توجيهها دائمًا في وجه السائق ، لذلك ستقوم الكاميرا بتصوير ما نحتاجه بالضبط. لسوء الحظ ، لم يتأكد مصنعو مرايا الرؤية الخلفية من إمكانية ربط شيء ما بهم بشكل مريح وموثوق. الكاميرات لم تمسك بشكل جيد وسقطت وأغلقت المراجعة.



ومع ذلك ، قمنا بتجهيز العديد من الآلات وبدأنا في جمع البيانات منها. أصبح من الواضح أن التصميم كان غير كامل ، والمشاكل المتعلقة بالأداء والتدفئة ارتفعت أثناء تسجيل الوجه وتحليله في وقت واحد.

ثم قررنا تركيب الكاميرا على مستوى العين في الحامل الأيسر: أغلق المراجعة أقل ولدينا زاوية جيدة للكاميرا بحيث يمكن رؤية السائق. كان لا بد من إعادة تشكيل العلبة ، حيث ثبت أن السحابات المزودة بمفصلات غير موثوقة للغاية: فهي تنفصل عند الاهتزاز والكسر ، وتتفكك أكواب الشفط من الزجاج.



قررنا أنه بالنسبة للنموذج الأولي وجمع البيانات ، من الأفضل أن تلتصق الكاميرات بحزم بالزجاج حتى لا تتمكن أي آثار اهتزاز أو تأثيرات خارجية من تغيير موقعها. قمنا بتعديل الحالة قليلاً وفي نفس الوقت قمنا بإجراء اختبار الحمل للتثبيت باستخدام شريط خاص على الوجهين. للاختبار ، تم استخدام معدات معقدة وعالية الدقة.



نظرًا لمشكلات الأداء ، قررنا تغيير SoC إلى أكثر قوة ، لذلك اخترنا الكمبيوتر الشخصي أحادي اللوحة NanoPI M4 على معالج Rockchip RK3399.

بالمقارنة مع Khadas VIM2 ، فهو يمثل حوالي ثلث أكثر إنتاجية ، ويحتوي على ضغط الأجهزة وفك تشفير الفيديو ، ويتصرف بشكل أكثر استقرارًا في ظروف درجات الحرارة الصعبة. نعم ، حاولنا تشغيل الكاميرات ولوحات الدوائر في الفريزر وتسخينها في الفرن وإجراء العديد من الاختبارات اللاإنسانية الأخرى.



نظرًا لأننا نسجّل الفيديو ليس هكذا فحسب ، ولكن في الديناميات طوال اليوم ، كان من المهم أن يكون وقت النظام على الجهاز دقيقًا. لسوء الحظ ، فإن معظم أجهزة الكمبيوتر ذات اللوحة الفردية غير مجهزة بساعة ذاتية التشغيل. كنا محظوظين لأن لدينا NanoPI موصل البطارية.

اضطررت إلى تصميم علبة لجهاز كمبيوتر يحميها جسديًا ويعمل كحامل لهوائيات WiFi و BT. هناك قدمنا ​​أيضًا مكانًا لتركيب بطارية الساعة مع حامل.



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

في الوقت نفسه ، أصبح من الواضح لنا أن حساباتنا وخوارزمياتنا ستعمل بشكل أفضل مع تحليل الوجه الأساسي الأكثر دقة. في النماذج الأولية الأولى ، استخدمنا كاشف الوجه المدمج في OpenCV استنادًا إلى نموذج haar المتتالي ونموذج لتمييز 68 نقطة وجها استنادًا إلى مكتبة dlib . حسبنا موضع الرأس بأنفسنا عن طريق حساب إسقاط نقاط الوجه على المستوى البؤري. تعمل الحلول مفتوحة المصدر للتعرف على الوجوه ووضع علامات عليها بشكل جيد على الإطارات حيث يتم تصوير الوجه في المقدمة أو في ملف التعريف ، ولكن في الحالات المتوسطة غالبًا ما يكون مخطئًا.

لذلك ، قررنا أن نمنح ترخيصًا جيدًا للتعرف على الوجه ووضع العلامات - VisionLabs SDK. بالمقارنة مع الخوارزميات السابقة ، فهي أكثر كثافة في استخدام الموارد ، ولكنها تعطي زيادة ملحوظة في جودة التعرف على الوجه ووضع العلامات ، مما يؤدي إلى استخراج أكثر دقة لعوامل التعلم الآلي. بمساعدة الزملاء من VisionLabs ، تمكنا من التبديل بسرعة إلى SDK الخاصة بهم والحصول على الأداء الذي نحتاجه: 30 لقطة / ثانية. بدقة 640 × 480.

يستخدم VisionLabs SDK الشبكات العصبية للتعرف على الوجوه. تقوم التقنية بمعالجة كل إطار ، وتجد وجه السائق عليه وتعطي إحداثيات العينين والأنف والفم وغيرها من النقاط الرئيسية. تُستخدم البيانات التي تم الحصول عليها لإنشاء إطار عادي بحجم 250 × 250 ، حيث يوجد الوجه بدقة في الوسط. يمكن بالفعل استخدام هذا الإطار لحساب موضع الرأس بدرجات على ثلاثة محاور: الانحراف والانعراج واللف. لتتبع حالة عيون السائق ، يقوم النظام بتحليل صورة العين ولكل عين تقرر ما إذا كانت مغلقة أم مفتوحة. يستطيع النظام تحديد استخدام تقنية IR Liveness ما إذا كان شخصًا حيًا أمام الكاميرا أم أن السائق قد أرفق صورة. للتحليل ، يتم استخدام إطار عادي ، وفي الناتج نحصل على النتيجة حية أو مشهورة.

استنتاج


أثناء قيامنا بإعادة كتابة البرامج وتصحيحها ، قامت الطابعات ثلاثية الأبعاد الخاصة بنا بطباعة الحالات الخاصة بالكاميرات وأجهزة الكمبيوتر أحادية اللوحة ليلًا ونهارًا. استغرقت طباعة المجموعة (كاميرا جسم + علبة كمبيوتر) حوالي 3-4 ساعات من تشغيل الطابعة ، لذلك كان علينا زيادة طاقات الإنتاج: استخدمنا أربع طابعات. لكننا تمكنا من القيام بكل شيء في الموعد المحدد.



في غضون أسبوعين ، قمنا بتجهيز المئات من السيارات بالكامل في العديد من أساطيل سيارات الأجرة - شركاء Yandex.Taxi. الآن ، بمساعدتهم ، نقوم بتجميع مقاطع الفيديو ، وتحليل سلوك السائق ، وعلامات التعب ، وتحسين الخوارزميات ، وتدريب النماذج التي تقيم مستوى الانتباه والتعب. وبعد ذلك فقط (مع مراعاة جميع البيانات والتعليقات من السائقين والركاب) ، سنكون مستعدين للانتقال إلى المرحلة التالية - الإنتاج الضخم والتنفيذ.

لسوء الحظ ، لتوسيع نطاق إلى عدة آلاف أو عشرات الآلاف من المنشآت ، والحل الفني الحالي ليست مناسبة للغاية لعدد من الأسباب. كل ما تحدثنا عنه في هذه المقالة هو تجربة سريعة ، كان الغرض منها هو معرفة كيفية جمع البيانات مباشرةً من الأجهزة لتدريب النماذج. المرحلة الكبيرة التالية بالنسبة لنا هي تطوير وبدء إنتاج جهاز من نفس الأبعاد ، ولكن يتألف من وحدة واحدة: الكاميرا ، وأجهزة الاستشعار ، والمودم ستكون موجودة في علبة صغيرة واحدة ، والتي سنقوم بتثبيتها على نطاق واسع في الآلات.

Source: https://habr.com/ru/post/ar461137/


All Articles