- Būtini komponentai
- „OpenCV“ diegimas „Raspberry Pi“
- Kitų reikalingų paketų diegimas
- Aviečių Pi programavimas
- Vairuotojo mieguistumo aptikimo sistemos testavimas
Sunkvežimių vairuotojai, per dieną ir naktį gabenantys krovinius ir sunkias medžiagas dideliais atstumais, dažnai kenčia nuo miego trūkumo. nuovargis ir mieguistumas yra pagrindinės didelių avarijų greitkeliuose priežastys. Automobilių pramonė kuria kai kurias technologijas, kurios gali aptikti mieguistumą ir įspėti vairuotoją apie tai.
Šiame projekte mes ketiname sukurti vairuotojų miego jutimo ir perspėjimo sistemą, naudodami „Raspberry Pi“, „OpenCV“ ir „Pi“ kameros modulį. Pagrindinis šios sistemos tikslas yra sekti vairuotojo veido būklę ir akių judesius. Jei vairuotojas jaučiasi mieguistas, sistema suaktyvins įspėjamąjį pranešimą. Tai yra mūsų ankstesnio veido orientyrų aptikimo ir veido atpažinimo programos pratęsimas.
Būtini komponentai
Aparatinės įrangos komponentai
- Aviečių Pi 3
- „Pi“ fotoaparato modulis
- Mikro USB laidas
- Buzeris
Programinė įranga ir internetinės paslaugos
- „OpenCV“
- Dlib
- „Python“
Prieš tęsdami šį vairuotojo mieguistumo aptikimo projektą , pirmiausia turime įdiegti „OpenCV“, „imutils“, „dlib“, „Numpy“ ir kai kurias kitas šio projekto priklausomybes. „OpenCV“ čia naudojamas skaitmeniniam vaizdų apdorojimui. Dažniausios skaitmeninio vaizdo apdorojimo programos yra objektų aptikimas, veido atpažinimas ir žmonių skaitiklis.
Norėdami sukurti šią miego aptikimo sistemą, mes naudojame tik „Raspberry Pi“, „Pi Camera“ ir garsinį signalą.
„OpenCV“ diegimas „Raspberry Pi“
Prieš diegiant „OpenCV“ ir kitas priklausomybes, „Raspberry Pi“ reikia visiškai atnaujinti. Norėdami atnaujinti „Raspberry Pi“ į naujausią versiją, naudokite šias komandas:
sudo apt-get atnaujinimas
Tada naudokite šias komandas, kad įdiegtumėte reikalingas „OpenCV“ diegimo „Raspberry Pi“ priklausomybes.
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
Galiausiai įdiekite „OpenCV“ į „Raspberry Pi“ naudodami toliau pateiktas komandas.
„pip3 install“ „opencv-contrib-python“ == 4.1.0.25
Jei dar nesinaudojote „OpenCV“, patikrinkite ankstesnes „OpenCV“ mokymo programas su „Raspberry pi“:
- „OpenCV“ įdiegimas į „Raspberry Pi“ naudojant „CMake“
- Veido atpažinimas realiuoju laiku naudojant „Raspberry Pi“ ir „OpenCV“
- Valstybinio numerio atpažinimas naudojant „Raspberry Pi“ ir „OpenCV“
- Minios dydžio įvertinimas naudojant „OpenCV“ ir „Raspberry Pi“
Mes taip pat sukūrėme keletą „OpenCV“ mokymo programų, pradedant pradedančiųjų lygiu.
Kitų reikalingų paketų diegimas
Prieš užprogramuodami „Raspberry Pi“ mieguistumo detektoriui, įdiekime kitus reikalingus paketus.
„Dlib: dlib“ diegimas yra modernus įrankių rinkinys, kuriame yra mašininio mokymosi algoritmai ir įrankiai realioms problemoms spręsti. Norėdami įdiegti dlib, naudokite žemiau esančią komandą.
pip3 įdiekite dlib
„NumPy“ diegimas: „ NumPy“ yra pagrindinė mokslinio skaičiavimo biblioteka, kurioje yra galingas n matmenų masyvo objektas, pateikiami įrankiai integruoti C, C ++ ir kt.
„pip3 install numpy“
„Face_recognition“ modulio diegimas: Ši biblioteka buvo naudojama atpažinti ir valdyti veidus iš „Python“ arba komandinės eilutės. Norėdami įdiegti veido atpažinimo biblioteką, naudokite toliau pateiktą komandą.
„Pip3“ įdiekite face_recognition
Ir paskutiniame, įdiekite „ eye_game“ biblioteką naudodami žemiau esančią komandą:
pip3 įdiekite akių žaidimą
Aviečių Pi programavimas
Pilnas vairuotojo mieguistumo detektoriaus, naudojant „OpenCV“, kodas pateikiamas puslapio pabaigoje. Čia mes paaiškiname keletą svarbių kodo dalių, kad geriau suprastume.
Taigi, kaip įprasta, pradėkite kodą įtraukdami visas reikalingas bibliotekas.
importuoti face_recognition importuoti cv2 importuoti numerį kaip np importavimo laiką importuoti cv2 importuoti RPi.GPIO kaip GPIO importuoti eye_game
Po to sukurkite egzempliorių, kad gautumėte vaizdo kanalą iš „pi“ kameros. Jei naudojate daugiau nei vieną fotoaparatą, tada pakeiskite nulį į „ cv2“. „VideoCapture“ (0) funkcija.
video_capture = cv2.VideoCapture (0)
Dabar kitose eilutėse įveskite failo pavadinimą ir failo kelią. Mano atveju ir kodas, ir byla yra tame pačiame aplanke. Tada naudokite veido užkodavimus, kad gautumėte veido vietą paveikslėlyje.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Po to sukurkite du masyvus veidams ir jų vardams išsaugoti. Aš naudoju tik vieną vaizdą; kode galite pridėti daugiau vaizdų ir jų kelius.
žinomi_pavadinimo_kodavimai = žinomi_pavadinimo_vardai =
Tada sukurkite keletą kintamųjų, kad išsaugotumėte veido dalių vietas, veidų pavadinimus ir koduotes.
face_locations = face_encodings = face_names = process_this_frame = True
Viduje , o funkcijos, užfiksuoti vaizdo kadrus iš transliacijos ir keisti kadrus į mažesnio dydžio, taip pat konvertuoti nufotografuotą kadrą į RGB spalvos veido atpažinimo.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Po to paleiskite veido atpažinimo procesą, kad palygintumėte vaizdo įrašo veidus su vaizdu. Taip pat gaukite veido dalių vietas.
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)
Jei atpažintas veidas sutampa su vaizde esančiu veidu, paskambinkite akių žaidimo funkcijai, kad galėtumėte stebėti akių judesius. Kodas pakartotinai stebės akies ir akies obuolio padėtį.
face_distances = face_recognition.face_distance (žinomi_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) jei atitinka: vardas = žinomi_pavadinimo_vardai = akių_žaidimas.get_eyeball_direction (failas) spausdinimas (kryptis)
Jei kodas 10 sekundžių neaptiks akių judesių, jis sužadins žadintuvą.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Įspėjimas! Įspėjimas! Aptiktas vairuotojo mieguistumas ")
Tada naudokite „OpenCV“ funkcijas, kad nupieštumėte stačiakampį aplink veidą ir įdėtumėte ant jo tekstą. Taip pat rodykite vaizdo kadrus naudodami funkciją cv2.imshow .
cv2.staciakampis (rėmas, (kairė, viršuje), (dešinėje, apačioje), (0, 255, 0), 2) cv2. stačiakampis (rėmelis, (kairėje, apačioje - 35), (dešinėje, apačioje), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (rėmas, pavadinimas, (kairėje + 6, apačioje - 6), šriftas, 1.0, (0, 0, 255), 1) cv2.imshow („Vaizdo įrašas“, kadras) Norėdami sustabdyti kodą, nustatykite raktą „S“. jei cv2.waitKey (1) & 0xFF == ord ('s'): pertrauka
Vairuotojo mieguistumo aptikimo sistemos testavimas
Kai kodas bus paruoštas, prijunkite „Pi“ kamerą ir garsinį signalą prie „Raspberry Pi“ ir paleiskite kodą. Praėjus maždaug 10 sekundžių, pasirodys langas su tiesioginiu srautu iš jūsų „Raspberry Pi“ kameros. Prietaisas atpažinęs veidą atspausdins jūsų vardą ant rėmelio ir pradės stebėti akių judesį. Dabar 7–8 sekundėms užmerkite akis, kad išbandytumėte žadintuvą. Kai skaičius bus didesnis nei 10, jis suveiks aliarmu, įspės jus apie situaciją.
Taip galite sukurti mieguistumo detektorių naudodami „OpenCV“ ir „Raspberry Pi“. Slinkite žemyn, norėdami pamatyti veikiantį vaizdo įrašą ir kodą.