- المكونات مطلوبة
- تثبيت OpenCV في Raspberry Pi
- تثبيت الحزم الأخرى المطلوبة
- برمجة Raspberry Pi
- اختبار نظام الكشف عن نعاس السائق
سائقي الشاحنات الذين ينقلون البضائع والمواد الثقيلة لمسافات طويلة خلال النهار والليل ، غالبًا ما يعانون من قلة النوم. يعتبر التعب والنعاس من الأسباب الرئيسية للحوادث الكبرى على الطرق السريعة. تعمل صناعات السيارات على بعض التقنيات التي يمكنها اكتشاف النعاس وتنبيه السائق بشأنه.
في هذا المشروع ، سنقوم ببناء نظام استشعار وتنبيه للنوم للسائقين باستخدام وحدة الكاميرا Raspberry Pi و OpenCV و Pi. الغرض الأساسي من هذا النظام هو تتبع حالة وجه السائق وحركات عينيه ، وإذا كان السائق يشعر بالنعاس ، فسيقوم النظام بإصدار رسالة تحذير. هذا هو امتداد لتطبيقنا السابق لاكتشاف معالم الوجه والتعرف على الوجه.
المكونات مطلوبة
مكونات الأجهزة
- Raspberry Pi 3
- وحدة الكاميرا Pi
- كابل Micro USB
- صفارة
البرامج والخدمات عبر الإنترنت
- OpenCV
- دليب
- بايثون 3
قبل الشروع في هذا المشروع كشف السائق النعاس ، أولا، نحن بحاجة إلى تثبيت مكتبة برمجية مفتوحة للرؤية الحاسوبية، imutils، dlib، نمباي، وبعض تبعيات أخرى في هذا المشروع. يتم استخدام OpenCV هنا لمعالجة الصور الرقمية. أكثر تطبيقات معالجة الصور الرقمية شيوعًا هي اكتشاف الكائنات والتعرف على الوجوه وعداد الأشخاص.
نحن هنا نستخدم Raspberry Pi و Pi Camera و الجرس فقط لبناء نظام اكتشاف النوم.
تثبيت OpenCV في Raspberry Pi
قبل تثبيت OpenCV والاعتمادات الأخرى ، يجب تحديث Raspberry Pi بالكامل. استخدم الأوامر التالية لتحديث Raspberry Pi إلى أحدث إصدار:
sudo apt-get update
ثم استخدم الأوامر التالية لتثبيت التبعيات المطلوبة لتثبيت OpenCV على Raspberry Pi الخاص بك.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get install libqt4-test –y
أخيرًا ، قم بتثبيت OpenCV على Raspberry Pi باستخدام الأوامر أدناه.
تثبيت pip3 opencv-Contrib-python == 4.1.0.25
إذا كنت جديدًا على OpenCV ، فتحقق من دروس OpenCV السابقة مع Raspberry Pi:
- تثبيت OpenCV على Raspberry Pi باستخدام CMake
- التعرف على الوجوه في الوقت الحقيقي باستخدام Raspberry Pi و OpenCV
- التعرف على لوحة الترخيص باستخدام Raspberry Pi و OpenCV
- تقدير حجم الحشد باستخدام OpenCV و Raspberry Pi
لقد أنشأنا أيضًا سلسلة من دروس OpenCV التعليمية بدءًا من مستوى المبتدئين.
تثبيت الحزم الأخرى المطلوبة
قبل برمجة Raspberry Pi لجهاز كشف النعاس ، دعنا نثبت الحزم الأخرى المطلوبة.
تثبيت dlib: dlib هو مجموعة الأدوات الحديثة التي تحتوي على خوارزميات وأدوات التعلم الآلي لمشاكل العالم الحقيقي. استخدم الأمر أدناه لتثبيت dlib.
pip3 تثبيت dlib
تثبيت NumPy: NumPy هي المكتبة الأساسية للحوسبة العلمية التي تحتوي على كائن مصفوفة قوية ذات أبعاد n ، وتوفر أدوات لدمج C ، C ++ ، إلخ.
تثبيت pip3 numpy
تثبيت وحدة التعرف على الوجه: تُستخدم هذه المكتبة للتعرف على الوجوه ومعالجتها من Python أو سطر الأوامر. استخدم الأمر أدناه لتثبيت مكتبة التعرف على الوجوه.
ثبت Pip3 face_recognition
وفي النهاية ، قم بتثبيت مكتبة eye_game باستخدام الأمر التالي:
pip3 تثبيت لعبة العين
برمجة Raspberry Pi
يتم تقديم الرمز الكامل لـ Driver Drowsiness Detector باستخدام OpenCV في نهاية الصفحة. نوضح هنا بعض الأجزاء المهمة من الكود من أجل فهم أفضل.
لذا ، كالعادة ، ابدأ الكود بتضمين جميع المكتبات المطلوبة.
استيراد face_recognition استيراد cv2 استيراد numpy كـ np وقت الاستيراد استيراد cv2 استيراد RPi.GPIO كـ GPIO استيراد eye_game
بعد ذلك ، قم بإنشاء مثيل للحصول على موجز الفيديو من كاميرا pi. إذا كنت تستخدم أكثر من كاميرا ، فاستبدل الصفر بواحدة في وظيفة cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
الآن في الأسطر التالية ، أدخل اسم الملف ومسار الملف. في حالتي ، يوجد كل من الرمز والملف في نفس المجلد. ثم استخدم ترميزات الوجه للحصول على موقع الوجه في الصورة.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
بعد ذلك قم بإنشاء صفيفين لحفظ الوجوه وأسمائهم. أنا أستخدم صورة واحدة فقط ؛ يمكنك إضافة المزيد من الصور ومساراتها في الكود.
known_face_encodings = known_face_names =
ثم قم بإنشاء بعض المتغيرات لتخزين مواقع أجزاء الوجه وأسماء الوجوه والتشفيرات.
face_locations = face_encodings = face_names = process_this_frame = صحيح
داخل وظيفة while ، التقط إطارات الفيديو من الدفق وقم بتغيير حجم الإطارات إلى حجم أصغر وقم أيضًا بتحويل الإطار الملتقط إلى لون RGB للتعرف على الوجوه.
ret، frame = video_capture.read () small_frame = cv2.resize (frame، (0، 0)، fx = 0.25، fy = 0.25) rgb_small_frame = small_frame
بعد ذلك ، قم بتشغيل عملية التعرف على الوجوه لمقارنة الوجوه في الفيديو بالصورة. وأيضًا احصل على مواقع أجزاء الوجه.
if process_this_frame: face_locations = face_recognition.face_locations (rgb_small_frame) face_encodings = face_recognition.face_encodings (rgb_small_frame، face_locations) cv2.imwrite (ملف ، small_frame)
إذا كان الوجه الذي تم التعرف عليه يتطابق مع الوجه في الصورة ، فاتصل بوظيفة لعبة eyegame لتتبع حركات العين. سيتعقب الرمز بشكل متكرر موضع العين ومقلة العين.
face_distances = face_recognition.face_distance (known_face_encodings، face_encoding) best_match_index = np.argmin (face_distances) إذا كانت التطابقات: name = known_face_names direction = eye_game.get_eyeball_direction (ملف) طباعة (اتجاه)
إذا لم يكتشف الرمز أي حركة للعين لمدة 10 ثوانٍ ، فسيؤدي ذلك إلى إطلاق المنبه لإيقاظ الشخص.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER، GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER، GPIO.LOW) طباعة ("تنبيه! ! تنبيه !! تم اكتشاف نعاس السائق ")
ثم استخدم وظائف OpenCV لرسم مستطيل حول الوجه ووضع نص عليه. أيضًا ، اعرض إطارات الفيديو باستخدام وظيفة cv2.imshow .
cv2.rectangle (إطار ، (يسار ، أعلى) ، (يمين ، أسفل) ، (0 ، 255 ، 0) ، 2) cv2.rectangle (إطار ، (يسار ، أسفل - 35) ، (يمين ، أسفل) ، (0 ، 255، 0)، cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (frame، name، (left + 6، bottom - 6)، font، 1.0، (0، 0، 255)، 1) cv2.imshow ("فيديو" ، إطار) اضبط المفتاح "S" لإيقاف الرمز. إذا كان cv2.waitKey (1) & 0xFF == ord ('s'): break
اختبار نظام الكشف عن نعاس السائق
بمجرد أن يصبح الرمز جاهزًا ، قم بتوصيل كاميرا Pi والجرس بـ Raspberry Pi وقم بتشغيل الكود. بعد حوالي 10 ثوانٍ ، ستظهر نافذة مع البث المباشر من كاميرا Raspberry Pi. عندما يتعرف الجهاز على الوجه ، سيطبع اسمك على الإطار ويبدأ في تتبع حركة العين. الآن أغلق عينيك لمدة 7 إلى 8 ثوانٍ لاختبار المنبه. عندما يصبح العد أكثر من 10 ، فإنه سيطلق إنذارًا ينبهك إلى الموقف.
هذه هي الطريقة التي يمكنك بها بناء كاشف النعاس باستخدام OpenCV و Raspberry Pi. قم بالتمرير لأسفل للحصول على فيديو العمل والرمز.