- רכיבים נדרשים
- התקנת OpenCV ב- Raspberry Pi
- התקנת חבילות נדרשות אחרות
- תכנות ה- Raspberry Pi
- בדיקת מערכת איתור הנמנום של הנהג
נהגי משאיות המעבירים את המטען והחומרים הכבדים למרחקים ארוכים במהלך היום והלילה, הם סובלים לעיתים קרובות מחוסר שינה. עייפות ונמנום הם מהגורמים העיקריים לתאונות קשות בכבישים מהירים. תעשיות הרכב עובדות על כמה טכנולוגיות שיכולות לזהות את הנמנום ולהתריע בפני הנהג על כך.
בפרויקט זה אנו הולכים לבנות מערכת חישת שינה והתראה לנהגים המשתמשים במודול המצלמה Raspberry Pi, OpenCV ו- Pi. המטרה הבסיסית של מערכת זו היא לעקוב אחר מצב פניו של הנהג ותנועות העיניים שלו ואם הנהג מרגיש מנומנם, המערכת תפעיל הודעת אזהרה. זהו הרחבה של אפליקציית זיהוי הפנים שלנו וזיהוי פנים קודמים.
רכיבים נדרשים
רכיבי חומרה
- פטל פי 3
- מודול מצלמת פי
- כבל מיקרו USB
- זַמזָם
תוכנה ושירותים מקוונים
- OpenCV
- דליב
- פייתון 3
לפני שתמשיך בפרויקט איתור ישנוניות זה של הנהג , ראשית, עלינו להתקין בפרויקט זה OpenCV, imutils, dlib, Numpy ועוד כמה תלות. OpenCV משמש כאן לעיבוד תמונה דיגיטלית. היישומים הנפוצים ביותר של עיבוד תמונה דיגיטלי הם זיהוי אובייקטים, זיהוי פנים ומונה אנשים.
כאן אנו משתמשים רק ב- Raspberry Pi, במצלמת Pi ובזמזם לבניית מערכת גילוי שינה זו.
התקנת OpenCV ב- Raspberry Pi
לפני התקנת ה- OpenCV ותלות אחרות, יש לעדכן את Raspberry Pi לחלוטין. השתמש בפקודות שלמטה כדי לעדכן את ה- Raspberry Pi לגרסתו האחרונה:
עדכון sudo apt-get
לאחר מכן השתמש בפקודות הבאות כדי להתקין את התלות הנדרשת להתקנת 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 for Detective Sleep Detector, נתקין את החבילות הנדרשות האחרות.
התקנת dlib: dlib הוא ערכת הכלים המודרנית המכילה אלגוריתמים של Machine Learning וכלים לבעיות בעולם האמיתי. השתמש בפקודה הבאה כדי להתקין את ה- dlib.
pip3 להתקין dlib
התקנת NumPy: NumPy היא ספריית הליבה למחשוב מדעי המכילה אובייקט רב עוצמה של מערך n, מספק כלים לשילוב C, C ++ וכו '.
pip3 להתקין קהה
התקנת מודול face_recognition: ספרייה זו משמשת לזיהוי וטיפול בפנים מ- Python או משורת הפקודה. השתמש בפקודה הבאה כדי להתקין את ספריית זיהוי הפנים.
Pip3 התקן face_recognition
ובאחרון , התקן את ספריית eye_game באמצעות הפקודה הבאה:
pip3 להתקין משחק-העין
תכנות ה- Raspberry Pi
הקוד המלא לגלאי ישנוניות הנהג באמצעות 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)
לאחר מכן צור שני מערכים לשמירת הפרצופים ושמותיהם. אני משתמש רק בתמונה אחת; תוכל להוסיף תמונות נוספות ונתיביהן בקוד.
ידוע_פנים_קידודים = ידועים_פנים_שמות =
לאחר מכן צור כמה משתנים לאחסון מיקומי חלקי הפנים, שמות הפנים והקידודים.
face_locations = face_encodings = face_names = process_this_frame = True
בתוך פונקציית 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
לאחר מכן, הפעל את תהליך זיהוי הפנים כדי להשוות את הפרצופים בסרטון לתמונה. וגם קבל את מיקומי חלקי הפנים.
אם 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 (file, small_frame)
אם הפנים המוכרות תואמות את הפנים בתמונה, אז התקשר לפונקציית משחק העין כדי לעקוב אחר תנועות העיניים. הקוד יעקוב שוב ושוב אחר מיקום העין וגלגל העין.
מרחקי פנים = פנים_הכרה.פנים_התמודדות (ידועים_קידודים, פנים קידוד) best_match_index = np.argmin (מרחקי פנים) אם תואם: שם = כיוון שם פנים ידוע = eye_game.get_eyeball_direction (קובץ) הדפס (כיוון)
אם הקוד לא מזהה שום תנועת עיניים במשך 10 שניות, הוא יפעיל את האזעקה להעיר את האדם.
אחר: ספירה = 1 + ספירת הדפסה (ספירה) אם (ספירה> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) הדפס ("התראה! ! התראה !! זוהה נמנום ")
ואז השתמש בפונקציות OpenCV כדי לצייר מלבן סביב הפנים ולשים עליו טקסט. כמו כן, הראה את מסגרות הווידאו באמצעות הפונקציה cv2.imshow .
cv2.rectangle (frame, (left, top), (right, bottom), (0, 255, 0), 2) cv2.rangle (frame, (left, bottom - 35), (right, bottom), (0, 255, 0), cv2.FILLED) גופן = cv2.FONT_HERSHEY_DUPLEX cv2.putText (מסגרת, שם, (שמאל + 6, תחתון - 6), גופן, 1.0, (0, 0, 255), 1) cv2.imshow ('וידאו', מסגרת) הגדר את מקש 'S' כדי לעצור את הקוד. אם cv2.waitKey (1) & 0xFF == ord ('s'): הפסקה
בדיקת מערכת איתור הנמנום של הנהג
לאחר שהקוד מוכן, חבר את מצלמת ה- Pi והזמזם ל- Raspberry Pi והפעל את הקוד. לאחר כ -10 שניות, יופיע חלון עם הזרמת השידור ממצלמת ה- Raspberry Pi שלך. כאשר המכשיר מזהה את הפנים, הוא ידפיס את שמך על המסגרת ויתחיל לעקוב אחר תנועת העין. עכשיו עצום את העיניים במשך 7 עד 8 שניות כדי לבדוק את האזעקה. כאשר הספירה תהפוך ליותר מ -10, היא תפעיל אזעקה שתתריע בפניך על המצב.
כך ניתן לבנות גלאי נמנום באמצעות OpenCV ו- Raspberry Pi. גלול מטה לסרטון העבודה ולקוד.