Përmbajtje:

Sistemi i alarmit për përgjumje: 3 hapa
Sistemi i alarmit për përgjumje: 3 hapa

Video: Sistemi i alarmit për përgjumje: 3 hapa

Video: Sistemi i alarmit për përgjumje: 3 hapa
Video: [Door Sensor] Popular independent door magnetic alarm on Aliexpress 2024, Korrik
Anonim
Sistemi i alarmit për përgjumje
Sistemi i alarmit për përgjumje

Çdo vit shumë njerëz humbasin jetën për shkak të aksidenteve fatale rrugore në të gjithë botën dhe ngasja e përgjumur është një nga shkaqet kryesore të aksidenteve rrugore dhe vdekjeve. Lodhja dhe gjumi mikro në kontrollet e drejtimit janë shpesh shkaku kryesor i aksidenteve serioze. Sidoqoftë, shenjat fillestare të lodhjes mund të zbulohen para se të krijohet një situatë kritike dhe për këtë arsye, zbulimi i lodhjes së shoferit dhe tregimi i tij është temë kërkimore e vazhdueshme. Shumica e metodave tradicionale për të zbuluar përgjumjen bazohen në aspekte të sjelljes, ndërsa disa janë ndërhyrës dhe mund të shpërqendrojnë drejtuesit, ndërsa disa kërkojnë sensorë të shtrenjtë. Prandaj, në këtë punim, një sistem i lehtë për zbulimin e përgjumjes së shoferit në kohë reale është zhvilluar dhe zbatuar në aplikacionin Android. Sistemi regjistron videot dhe zbulon fytyrën e shoferit në çdo kornizë duke përdorur teknika të përpunimit të imazhit. Sistemi është i aftë të zbulojë pikat referuese të fytyrës, llogarit raportin e aspektit të syrit (EAR) dhe raportin e mbylljes së syve (ECR) për të zbuluar përgjumjen e shoferit bazuar në pragun adaptues. Algoritmet e mësimit të makinerisë janë përdorur për të testuar efikasitetin e qasjes së propozuar. Rezultatet empirike demonstrojnë se modeli i propozuar është në gjendje të arrijë saktësinë prej 84% duke përdorur klasifikuesin pyjor të rastit.

Hapi 1: Gjërat që ju nevojiten

1. MJEDRS PI

2. WEBCAM (C270 HD WEB CAM P FORR REZULTATET MET T MIRA)

Versioni i kompjuterit mund të ketë nevojë për disa ndryshime në kod

Hapi 2: Kodi Python Me Sytë Shape Predictor Dataset (Version PC)

për të zbuluar sytë në mënyrë shumë efektive në një video në kohë reale, ne mund ta përdorim këtë skedar.dat më poshtë.

drive.google.com/open?id=1UiSHe72L4TeN14VK…

Shkarkoni skedarin.dat nga lidhja e mësipërme dhe drejtoni kodin python më poshtë

Kodi Python

nga scipy. distanca e importit hapësinor nga imutils import face_utils import imutils import dlib import cv2

def eye_aspect_ratio (sy):

A = distanca.euklidiane (sy [1], sy [5]) B = distancë.euklidiane (sy [2], sy [4]) C = distancë.euclidean (sy [0], sy [3]) vesh = (A + B) / (2.0 * C) pragu i veshit të kthimit = 0.25 frame_check = 20 dete = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Skedari i të dhënave është thelbi i kodit

(lStart, fund) = face_utils. FACIAL_LANDMARKS_68_IDXS ["left_eye"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) gri = cv2.cvtColor (kornizë, cv2. COLOR_BGR2GRAY) subjekte = zbulo (gri, 0) për subjektin në lëndë: formë = parashiko (gri, subjekt) formë = face_utils.shape_to_np (formë)#konvertim në NumPy Array leftEye = formë [lStart: lEnd] rightEye = formë [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) vesh = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull drawContours (kornizë, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) nëse veshi = frame_check: cv2.putText (kuadër, "*************** ALERT! ****************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (kuadër, "*************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ") tjetër: flamur = 0 cv2.imshow (" Frame ", frame) kyç = cv2.waitKey (1) & 0xFF nëse kyçi == ord (" q "): thyen cv2.destroyAllWindows () cap.stop ()

Hapi 3: Versioni i mjedrës Pi

Versioni i mjedrës Pi
Versioni i mjedrës Pi
Versioni i mjedrës Pi
Versioni i mjedrës Pi

kur personat mbyllin sytë e tij/saj, atëherë mjedra pi do t'ju japë alarmin

LIDHni zilen tuaj në pin 23 (shihni foton)

nga scipy.distanca e importit hapësinor

importoni RPi. GPIO si GPIO

nga koha import gjumi

GPIO.setwarnings (False)

GPIO.setmode (GPIO. BCM)

nga imutils import face_utils

import imutils import dlib import cv2

zile = 23

GPIO.setup (zile, GPIO. OUT)

def eye_aspect_ratio (sy):

A = distanca.euklidiane (sy [1], sy [5]) B = distancë.euklidiane (sy [2], sy [4]) C = distancë.euclidean (sy [0], sy [3]) vesh = (A + B) / (2.0 * C) pragu i veshit të kthimit = 0.25 frame_check = 20 dete = dlib.get_frontal_face_detector () predict = dlib.shape_predictor (". / Shape_predictor_68_face_landmarks.dat")# Skedari i të dhënave është thelbi i kodit

(lStart, fund) = face_utils. FACIAL_LANDMARKS_68_IDXS ["left_eye"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) flag = 0 while True: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) gri = cv2.cvtColor (kornizë, cv2. COLOR_BGR2GRAY) subjekte = zbulo (gri, 0) për subjektin në lëndë: formë = parashiko (gri, subjekt) formë = face_utils.shape_to_np (formë)#konvertim në NumPy Array leftEye = formë [lStart: lEnd] rightEye = forma [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull drawContours (kornizë, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (frame, [rightEyeHull], -1, (0, 255, 0), 1) nëse veshi = frame_check: cv2.putText (kuadër, "*************** ALERT! ***************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (kuadër, "*************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro zemer ")

GPIO.putput (zile, GPIO. HIGHT)

tjetër: flamur = 0

GPIO.putput (zile, GPIO. LOW)

cv2.imshow ("Frame", frame) çelësi = cv2.waitKey (1) & 0xFF nëse çelësi == ord ("q"): thyeni cv2.destroyAllWindows () cap.stop ()

Recommended: