Turinys:

Įspėjimo apie mieguistumą sistema: 3 žingsniai
Įspėjimo apie mieguistumą sistema: 3 žingsniai

Video: Įspėjimo apie mieguistumą sistema: 3 žingsniai

Video: Įspėjimo apie mieguistumą sistema: 3 žingsniai
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Gruodis
Anonim
Įspėjimo apie mieguistumą sistema
Įspėjimo apie mieguistumą sistema

Kiekvienais metais daugelis žmonių miršta dėl mirtinų kelių eismo įvykių visame pasaulyje, o apsnūdęs vairavimas yra viena pagrindinių eismo įvykių ir mirčių priežasčių. Nuovargis ir mikro miegas prie vairavimo valdymo dažnai yra rimtų avarijų priežastis. Tačiau pradinius nuovargio požymius galima aptikti dar prieš susiklosčius kritinei situacijai, todėl vairuotojo nuovargio aptikimas ir jo nurodymas yra nuolatinė tyrimo tema. Dauguma tradicinių mieguistumo nustatymo metodų yra pagrįsti elgesio aspektais, o kai kurie yra įkyrūs ir gali atitraukti vairuotojų dėmesį, o kai kuriems reikia brangių jutiklių. Todėl šiame darbe sukurta ir įdiegta „Android“programoje lengva ir realiu laiku vairuojančio vairuotojo mieguistumo aptikimo sistema. Sistema įrašo vaizdo įrašus ir aptinka vairuotojo veidą kiekviename kadre, naudodama vaizdo apdorojimo būdus. Sistema gali aptikti veido orientyrus, apskaičiuoja akių aspektą (EAR) ir akių uždarymo koeficientą (ECR), kad nustatytų vairuotojo mieguistumą, pagrįstą prisitaikančiu slenksčiu. Siūlomo metodo veiksmingumui patikrinti buvo naudojami mašininio mokymosi algoritmai. Empiriniai rezultatai rodo, kad naudojant atsitiktinį miško klasifikatorių, siūlomas modelis gali pasiekti 84% tikslumą.

1 žingsnis: reikalingi dalykai

1. AVYNĖS PI

2. WEBCAM (C270 HD WEB CAM GERESNIAM REZULTATUI)

Kompiuterio versijai gali prireikti kai kurių kodo pakeitimų

2 veiksmas: „Python“kodas su akių formos numatytojo duomenų rinkiniu (kompiuterio versija)

norėdami daug efektyviau aptikti akis realaus laiko vaizdo įrašuose, galime naudoti šį sbelow.dat failą.

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

Atsisiųskite.dat failą iš aukščiau esančios nuorodos ir paleiskite žemiau esantį python kodą

„Python“kodas

iš „scipy.spatial“importo atstumo

def eye_aspect_ratio (akis):

A = atstumas. Euklidinis (akis [1], akis [5]) B = atstumas. Euklidinis (akis [2], akis [4]) C = atstumas. Euklidinis (akis [0], akis [3]) ausis = A + B)

(lPradėti, pasibaigti) = face_utils. FACIAL_LANDMARKS_68_IDXS ["left_eye"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) vėliava = 0, o tiesa: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) pilka = cv2.cvtColor (kadras, cv2. COLOR_BGR2GRAY) objektai = aptinkamas (pilkas, 0) objekto subjektas: forma = nuspėjama (pilka, subjektas) forma = face_utils.shape_to_np (figūra) #converting to NumPy Array leftEye = forma [lStart: lEnd] rightEye = formos [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (cv2.convexHull) drawContours (kadras, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (kadras, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (kadras, "**************** ALERT! ***************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ") else: flag = 0 cv2.imshow (" Rėmas ", kadras) raktas = cv2.waitKey (1) & 0xFF if key == ord (" q "): break cv2.destroyAllWindows () cap.stop ()

3 žingsnis: „Raspberry Pi“versija

Raspberry Pi versija
Raspberry Pi versija
Raspberry Pi versija
Raspberry Pi versija

kai žmonės užsimerkia, aviečių pi duos jums įspėjimą

Prijunkite garsinį signalą prie kaiščio 23 (žr. Paveikslėlį)

nuo scipy.spatial importo atstumas

importuoti RPi. GPIO kaip GPIO

iš laiko importuoti miegą

GPIO.setwarnings (klaidinga)

GPIO.setmode (GPIO. BCM)

iš imutils importuoja face_utils

importuoti imutils importuoti dlib importuoti cv2

garsinis signalas = 23

GPIO.setup (garsinis signalas, GPIO. OUT)

def eye_aspect_ratio (akis):

A = atstumas. Euklidinis (akis [1], akis [5]) B = atstumas. Euklidinis (akis [2], akis [4]) C = atstumas. Euklidinis (akis [0], akis [3]) ausis = A + B)

(lPradėti, pasibaigti) = face_utils. FACIAL_LANDMARKS_68_IDXS ["left_eye"]

(rStart, rEnd) = face_utils. FACIAL_LANDMARKS_68_IDXS ["right_eye"] cap = cv2. VideoCapture (0) vėliava = 0, o tiesa: ret, frame = cap.read () frame = imutils.resize (frame, width = 450) pilka = cv2.cvtColor (rėmas, cv2. COLOR_BGR2GRAY) subjektai = aptinkamas (pilkas, 0) objekto subjektas: forma = nuspėjama (pilka, objektas) forma = face_utils.shape_to_np (figūra) #converting to NumPy Array leftEye = forma [lStart: lEnd] rightEye = formos [rStart: rEnd] leftEAR = eye_aspect_ratio (leftEye) rightEAR = eye_aspect_ratio (rightEye) ear = (leftEAR + rightEAR) / 2.0 leftEyeHull = cv2.convexHull (leftEye) rightEyeHull = cv2.convexHull (cv2.convexHull) drawContours (kadras, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours (kadras, [rightEyeHull], -1, (0, 255, 0), 1) if ear = frame_check: cv2.putText (kadras, "**************** ALERT! ***************", (10, 30), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText (frame, "**************** ALERT! *********** ***** ", (10, 325), cv2. FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) #print (" Dro wsy ")

GPIO išėjimas (garsinis signalas, GPIO. HIGH)

kitaip: vėliava = 0

GPIO išėjimas (garsinis signalas, GPIO. LOW)

cv2.imshow ("Rėmas", kadras) raktas = cv2.waitKey (1) & 0xFF if key == ord ("q"): break cv2.destroyAllWindows () cap.stop ()

Rekomenduojamas: