آموزش رزبری پایپروژه رزبری پای

سیستم هشدار خواب آلودگی راننده با رزبری پای و OpenCV

رانندگان کامیون که بار و مواد سنگین را در مسافت های طولانی در طول شبانه روز حمل می کنند ، اغلب از کمبود خواب رنج می برند. خستگی و خواب آلودگی از دلایل عمده تصادفات در بزرگراه ها هستند. صنایع اتومبیل در حال کار بر روی برخی از فناوری ها هستند که می توانند خواب آلودگی را تشخیص داده و به راننده هشدار دهند.

در این پروژه ، ما قصد داریم یک سیستم هشدار خواب برای رانندگان با استفاده از ماژول دوربین ، رزبری پای و بسازیم. هدف اصلی این سیستم بررسی وضعیت صورت و حرکات چشم راننده است و اگر راننده احساس خواب آلودگی کند ، سیستم یک پیام هشدار دهنده را آغاز می کند.

قبل از شروع پروژه تشخیص خواب آلودگی راننده، ابتدا باید OpenCV ، imutils ، dlib ، Numpy و برخی دیگر از بسته ها را در این پروژه نصب کنیم. OpenCV در اینجا برای پردازش تصویر دیجیتال استفاده می شود که رایج ترین برنامه پردازش تصویر دیجیتال ، تشخیص شی object ، تشخیص چهره و … است.

پروژه های زیر ممکن است برای شما جالب باشند :

برای یادگیری آردوینو (برنامه نویسی، ساخت ربات، ارتباط با اندروید) روی دوره آموزش آردوینو کلیک کنید.
برای یادگیری کامل الکترونیک روی دوره آموزش الکترونیک کلیک کنید.

قطعات مورد نیاز این پروژه فقط دوربین رزبری پای، رزبری پای و یک بازر هستند.

نصب بسته های مورد نیاز

قبل از شروع برنامه نویسی پروژه هشدار خواب با رزبری پای، باید بسته های مورد نیاز را نصب کنیم. مهم ترین بسته OpenCV است که میتوانید نحوه نصب آن را در مقاله آموزش نصب OpenCV در رزبری پای مشاهده کنید.

حالا باید سایر بسته های مورد نیاز را نصب کنیم.

آموزش نصب dlib

dlib مجموعه مدرنی است که شامل الگوریتم ها و ابزارهای یادگیری ماشین برای مشکلات دنیای واقعی است. برای نصب dlib از دستور زیر استفاده کنید.

pip3 install dlib

آموزش نصب NumPy

NumPy کتابخانه اصلی محاسبات علمی است که شامل یک شی آرایه n بعدی قدرتمند است و ابزارهایی را برای ادغام C ، C ++ و غیره فراهم می کند.

Pip3 install numpy

نصب ماژول face_recognition

این کتابخانه برای شناسایی و دستکاری چهره ها از طریق پایتون یا خط فرمان استفاده می شود. برای نصب کتابخانه شناسایی چهره از دستور زیر استفاده کنید.

Pip3 install face_recognition

و در آخر ، کتابخانه eye_game را با استفاده از دستور زیر نصب کنید:

pip3 install eye-game

برنامه نویسی رزبری پای برای پروژه تشخیص خواب

کد کامل پروژه تشخیص خواب راننده با رزبری پای در انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی خواهیم کرد.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

طبق معمول ، کد را با درج کتابخانه های مورد نیاز شروع کنید.

import face_recognition
import cv2
import numpy as np
import time
import cv2
import RPi.GPIO as GPIO
import eye_game

پس از آن ، یک نمونه ایجاد کنید تا ویدئو را از دوربین pi بدست آورید. اگر از بیش از یک دوربین استفاده می کنید ، صفر را با یک عملکرد در cv2 جایگزین کنید.

video_capture = cv2.VideoCapture(0)

اکنون در خطوط بعدی نام پرونده و مسیر پرونده را وارد کنید. در مورد من ، کد و پرونده هر دو در یک پوشه هستند. سپس از رمزگذاری های صورت برای بدست آوردن موقعیت چهره در تصویر استفاده کنید.

img_image = face_recognition.load_image_file("img.jpg")
img_face_encoding = face_recognition.face_encodings(img_image)[0]

پس از آن دو آرایه برای ذخیره چهره ها و نام آنها ایجاد کنید. من فقط از یک تصویر استفاده می کنم. می توانید تصاویر و مسیر های بیشتری را در کد اضافه کنید.

known_face_encodings = [
    img_face_encoding ]
known_face_names = [
    "Ashish"
]

سپس چند متغیر برای ذخیره قسمت های صورت ، نام چهره و رمزگذاری ایجاد کنید.

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[:, :, ::-1]

پس از آن ، فرایند تشخیص چهره را برای مقایسه چهره های موجود در ویدیو با تصویر اجرا کنید. و همچنین قسمت های صورت را دریافت کنید.

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(file, small_frame)

اگر چهره شناسایی شده با صورت موجود در تصویر مطابقت دارد ، برای پیگیری حرکات چشم ، عملکرد Eyegame را فرا بگیرید. کد به طور مکرر موقعیت چشم و کره چشم را ردیابی می کند.

face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
            best_match_index = np.argmin(face_distances)
            if matches[best_match_index]:
                name = known_face_names[best_match_index]
                direction= eye_game.get_eyeball_direction(file)
                print(direction)

اگر این کد به مدت 10 ثانیه هیچ حرکتی از چشم را تشخیص ندهد ، هشدار باعث می شود فرد بیدار شود.

else:
                    count=1+count
                    print(count)
                    if (count>=10):
                       GPIO.output(BUZZER, GPIO.HIGH)
                       time.sleep(2)
                       GPIO.output(BUZZER, GPIO.LOW)
                       print("Alert!! Alert!! Driver Drowsiness Detected ")

سپس با استفاده از توابع OpenCV یک مستطیل دور صورت بکشید و متن را روی آن قرار دهید. همچنین ، با استفاده از عملکرد cv2.imshow فریم های ویدئویی را نشان دهید.

cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
 cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (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('Video', frame)
Set the Key ‘S’ to stop the code.
if cv2.waitKey(1) & 0xFF == ord('s'):
        break

پس از آماده شدن کد ، دوربین Pi و بازر را به رزبری پای متصل کرده و کد را اجرا کنید. پس از حدود 10 ثانیه ، پنجره ای با پخش مستقیم از دوربین Raspberry Pi شما ظاهر می شود. وقتی دستگاه صورت را تشخیص داد ، نام شما را روی قاب چاپ می کند و حرکت چشم را ردیابی می کند. اکنون 7 تا 8 ثانیه چشم های خود را ببندید تا زنگ هشدار را آزمایش کنید. هنگامی که شمارش بیش از 10 شود ، هشدار ایجاد می شود، و شما را در مورد وضعیت هشدار می دهد. به این ترتیب می توانید با استفاده از OpenCV و Raspberry Pi سیستم تشخیص خواب آلودگی را بسازید.

همچنین پیشنهاد میکنم پروژه شناسایی چهره با رزبری پای را مشاهده کنید.

موارد موجود در فایل : سورس کامل

دانلود فایل های پروژه

میخواهید برنامه نویسی STM32 را یاد بگیرید؟

دوره آموزش STM32

میخواهید الکترونیک را یاد بگیرید؟

دوره آموزش الکترونیک
دوره آموزش آردوینو

میخواهید آردوینو را به صورت پروژه محور یاد بگیرید؟ برای مشاهده توضیحات روی دوره مورد نظر کلیک کنید

برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام آیرنکس عضو شوید.

محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید) سعی میکنم تمام نظرات را پاسخ دهم.

2 نظر

  1. تو ده ثانیه راننده با بارش به چخ می‌ره
    زمان باید خیلی کمتر باشه

    1. سلام جناب. پروژه صنعتی و تجاری نیست. هدف پروژه ها آموزش هست و برای اهداف آموزشی 10 ثانیه سرعت مناسبی هست.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *