- ส่วนประกอบที่จำเป็น
- การติดตั้ง OpenCV ใน Raspberry Pi
- การติดตั้งแพ็คเกจอื่น ๆ ที่จำเป็น
- การเขียนโปรแกรม Raspberry Pi
- การทดสอบระบบตรวจจับอาการง่วงนอนของผู้ขับขี่
คนขับรถบรรทุกที่ขนส่งสินค้าและวัสดุหนักเป็นระยะทางไกลในเวลากลางวันและกลางคืนมักจะนอนไม่หลับ ความเหนื่อยล้าและง่วงนอนเป็นสาเหตุสำคัญของอุบัติเหตุสำคัญบนทางหลวง อุตสาหกรรมรถยนต์กำลังดำเนินการกับเทคโนโลยีบางอย่างที่สามารถตรวจจับอาการง่วงนอนและแจ้งเตือนคนขับได้
ในโครงการนี้เราจะไปสร้างการนอนหลับการตรวจจับและแจ้งเตือนของระบบสำหรับไดร์เวอร์โดยใช้ราสเบอร์รี่ Pi, OpenCV และโมดูลกล้อง จุดประสงค์พื้นฐานของระบบนี้คือการติดตามสภาพใบหน้าและการเคลื่อนไหวของดวงตาของผู้ขับขี่และหากผู้ขับขี่รู้สึกง่วงระบบจะส่งข้อความเตือน นี่คือส่วนขยายของแอปพลิเคชันการตรวจจับจุดสังเกตใบหน้าและการจดจำใบหน้า
ส่วนประกอบที่จำเป็น
ส่วนประกอบฮาร์ดแวร์
- ราสเบอร์รี่ Pi 3
- โมดูลกล้อง Pi
- สายไมโคร USB
- Buzzer
ซอฟต์แวร์และบริการออนไลน์
- OpenCV
- Dlib
- Python3
ก่อนดำเนินการนี้ โครงการตรวจจับคนขับง่วงนอน, แรกเราจำเป็นต้องติดตั้ง OpenCV, imutils, dlib, Numpy และบางอ้างอิงอื่น ๆ ในโครงการนี้ OpenCV ใช้ที่นี่สำหรับการประมวลผลภาพดิจิทัล แอพพลิเคชั่นที่พบบ่อยที่สุดของ Digital Image Processing ได้แก่ การตรวจจับวัตถุการจดจำใบหน้าและตัวนับคน
ที่นี่เราใช้ Raspberry Pi, Pi Camera และ Buzzer เพื่อสร้างระบบตรวจจับการนอนหลับเท่านั้น
การติดตั้ง 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 - 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 เป็นชุดเครื่องมือสมัยใหม่ที่มีอัลกอริทึม Machine Learning และเครื่องมือสำหรับปัญหาในโลกแห่งความเป็นจริง ใช้คำสั่งด้านล่างเพื่อติดตั้ง dlib
pip3 ติดตั้ง dlib
การติดตั้ง NumPy: NumPy เป็นไลบรารีหลักสำหรับการคำนวณทางวิทยาศาสตร์ที่มีวัตถุอาร์เรย์ n มิติที่มีประสิทธิภาพมีเครื่องมือสำหรับการรวม C, C ++ และอื่น ๆ
pip3 ติดตั้ง numpy
การติดตั้งโมดูล face_recognition:ไลบรารีนี้ใช้เพื่อจดจำและจัดการใบหน้าจาก Python หรือบรรทัดรับคำสั่ง ใช้คำสั่งด้านล่างเพื่อติดตั้งไลบรารีการจดจำใบหน้า
Pip3 ติดตั้ง face_recognition
และสุดท้ายให้ติดตั้งไลบรารี eye_game โดยใช้คำสั่งด้านล่าง:
pip3 ติดตั้งเกมตา
การเขียนโปรแกรม Raspberry Pi
รหัสที่สมบูรณ์สำหรับเครื่องตรวจจับอาการง่วงนอนของคนขับโดยใช้ OpenCVจะได้รับที่ส่วนท้ายของหน้า เรากำลังอธิบายส่วนสำคัญบางส่วนของโค้ดเพื่อความเข้าใจที่ดีขึ้น
ดังนั้นตามปกติเริ่มต้นรหัสโดยรวมไลบรารีที่จำเป็นทั้งหมด
import face_recognition import cv2 import numpy เป็น np import time import cv2 import cv2 RPi.GPIO เป็น GPIO import 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 = True
ภายในฟังก์ชัน while จับภาพวิดีโอจากการสตรีมและปรับขนาดเฟรมให้มีขนาดเล็กลงและยังแปลงเฟรมที่ถ่ายเป็นสี RGB เพื่อจดจำใบหน้า
ret, frame = video_capture.read () small_frame = cv2.resize (เฟรม, (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)
หากใบหน้าที่จดจำได้ตรงกับใบหน้าในภาพให้เรียกใช้ ฟังก์ชัน 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 (file) print (direction)
หากรหัสตรวจไม่พบการเคลื่อนไหวของดวงตาเป็นเวลา 10 วินาทีรหัสดังกล่าวจะปลุกให้บุคคลนั้นตื่นขึ้น
else: count = 1 + จำนวนพิมพ์ (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 (เฟรม, ชื่อ, (ซ้าย + 6, ล่าง - 6), แบบอักษร, 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 และราสเบอร์รี่ Pi เลื่อนลงเพื่อดูวิดีโอและโค้ดที่ใช้งานได้