- Komponente potrebne
- Instaliranje OpenCV-a u Raspberry Pi
- Kako otkriti dijelove lica pomoću dliba
- Programiranje Raspberry Pi za otkrivanje orijentira na licu
- Testiranje prepoznavača dijelova lica
Otkrivanje orijentira na licu postupak je otkrivanja različitih dijelova lica kao što su Obrve, Oči, Nos, Usta i Čeljust. Postoji mnogo aplikacija koje koriste tehnike otkrivanja orijentira na licu.
Prije smo izgradili sustav prepoznavanja lica koristeći OpenCV, danas ćemo koristiti isti OpenCV s Raspberry Pi za otkrivanje orijentira na licu. Unaprijed obučeni modul za otkrivanje orijentira na licu iz biblioteke dlib koristit će se za otkrivanje mjesta ključnih struktura lica na licu, a python OpenCV služit će za vizualizaciju otkrivenih dijelova lica.
Komponente potrebne
Hardverske komponente
- Raspberry Pi 3
- Modul kamere Pi
Softver i internetske usluge
- OpenCV
- Dlib
- Python3
Prije nastavka ovog otkrivanja lica s lica Raspberry Pi 3 , prvo moramo instalirati OpenCV, imutils, dlib, Numpy i neke druge ovisnosti u ovaj projekt. OpenCV se ovdje koristi za digitalnu obradu slike. Najčešća primjena digitalne obrade slike su otkrivanje predmeta, prepoznavanje lica i brojač ljudi.

Da biste saznali više o tome kako povezati Pi kameru s Raspberry Pi, slijedite naše prethodne upute.
Instaliranje OpenCV-a u Raspberry Pi
Ovdje će se OpenCV knjižnica koristiti za QR skener Raspberry Pi. Da biste instalirali OpenCV, prvo ažurirajte Raspberry Pi.
sudo apt-get ažuriranje
Zatim instalirajte potrebne ovisnosti za instaliranje OpenCV-a na vaš 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 –Y sudo apt-get install libqt4-test –y
Nakon toga instalirajte OpenCV u Raspberry Pi pomoću naredbe u nastavku.
pip3 instalirati opencv-contrib-python == 4.1.0.25
Prije smo koristili OpenCV s Raspberry pi i stvorili smo puno tutorijala na njemu.
- Instaliranje OpenCV-a na Raspberry Pi pomoću CMake-a
- Prepoznavanje lica u stvarnom vremenu s Raspberry Pi i OpenCV
- Prepoznavanje registarske pločice pomoću Raspberry Pi i OpenCV
- Procjena veličine gužve pomoću OpenCV-a i Raspberry Pi-a
Također smo stvorili niz vodiča za OpenCV počevši od početničke razine.
Instaliranje imutilsa : imutils se koristi za izvršavanje nekoliko potrebnih funkcija obrade slika, kao što su prijevod, rotacija, promjena veličine, skeletiranje i lakše prikazivanje Matplotlib slika s OpenCV-om. Dakle, instalirajte imutils koristeći naredbu ispod:
pip3 instalirati imutils -
Instaliranje dlib: dlib je moderni alat koji sadrži algoritme za strojno učenje i alate za stvarne probleme. Upotrijebite donju naredbu za instaliranje dliba.
pip3 instaliraj dlib
Instaliranje NumPy : NumPy je temeljna knjižnica za znanstveno računanje koja sadrži snažni objekt n-dimenzionalnog niza, pruža alate za integraciju C, C ++, itd.
Pip3 instaliraj numpy
Kako otkriti dijelove lica pomoću dliba
Upotrijebit ćemo unaprijed obučeni detektor orijentira lica dlib biblioteke za otkrivanje mjesta 68 (x, y) -koordinata koje se preslikavaju na strukture lica na licu. dlib prediktor orijentacije lica obučen je na skupu podataka iBUG 300-W. Slika koja sadrži indekse 68 koordinata dana je u nastavku:


Programiranje Raspberry Pi za otkrivanje orijentira na licu
Kompletni python kôd za prepoznavanje dijelova lica s dlibovim unaprijed obučenim detektorom orijentira na licu nalazi se na kraju stranice. Ovdje objašnjavamo neke važne dijelove koda za bolje razumijevanje.
Dakle, kao i obično, započnite kod uključivanjem svih potrebnih knjižnica.
iz imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Zatim inicijalizirajte objekt kamere i postavite rezoluciju na (640, 480) i brzinu kadrova na 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Sada u sljedećim redovima koristite parser argumenata kako biste pružili put do prediktora orijentira lica.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", obavezno = True, help = "put do prediktora orijentira lica") args = vars (ap.parse_args ())
U sljedećim redovima inicijalizirajte unaprijed obučeni detektor lica dlib zasnovan na HOG-u i učitajte unaprijed obučeni prediktor orijentira lica.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Zatim upotrijebite funkciju capture_continuous da započnete hvatanje okvira s kamere Raspberry Pi.
za okvir u camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Upotrijebite tipku tipkovnice 'S' za snimanje određenog okvira. Zatim promijenite veličinu snimljene slike i pretvorite je u sive tonove.
if key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (slika, cv2.COLOR_BGR2GREY)
Upotrijebite funkciju detektora biblioteke dlib za otkrivanje lica na snimljenoj slici.
rects = detektor (siva, 1)
Snimite sliku na kojoj je izvršeno prepoznavanje lica, odredite orijentire lica i pretvorite 68 točaka u niz NumPy. Preokrenite svaku regiju lica pojedinačno.
for (i, rect) u enumerate (rects): shape = prediktor (sivi, rect) shape = face_utils.shape_to_np (shape)
Zatim, kopirajte izvornu sliku i upotrijebite je za petlju kako biste na slici nacrtali ime dijela lica. Boja teksta bit će crvena, možete je promijeniti u drugu boju promjenom RGB vrijednosti.
za (ime, (i, j)) u face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Sada ćemo kružiti preko otkrivenih dijelova lica i koristiti funkciju crtanja OpenCV za crtanje krugova na tim dijelovima lica. Možete slijediti ovaj OpenCV dokument za više informacija o funkcijama crtanja
za (x, y) u obliku: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Sada ćemo u sljedećim redovima svaki dio lica izdvojiti kao zasebnu sliku izračunavanjem okvirnog okvira koordinata određenog dijela lica. Izdvojena slika smanjit će se na 250 piksela.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = slika roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Sada u posljednjim retcima koda prikažite dijelove lica s njihovim imenima i zasebnu sliku tog dijela. Koristite ESC tipku za promjenu područja lica.
cv2.imshow ("ROI", roi) cv2.imshow ("Slika", klon) cv2.waitKey (0)
Testiranje prepoznavača dijelova lica
Da biste testirali projekt, stvorite direktorij i dođite do njega pomoću naredbi u nastavku:
mkdir lice-dio-detektor cd lice-dio-detektor
Sada preuzmite datoteku shape_predictor_68_face_landmarks.dat s ove poveznice, a zatim izvucite i kopirajte datoteku shape_predictor_68_face_landmarks.dat unutar ove knjižnice, a zatim otvorite novu datoteku pod nazivom detect.py i zalijepite donji kod.
Sada pokrenite python kod pomoću naredbe u nastavku:
python3 detect.py --shape-prediktor shape_predictor_68_face_landmarks.dat

Vidjet ćete prozor s prikazom uživo s vaše kamere. Zatim pritisnite tipku 'S' da biste odabrali kadar iz streama uživo. Na području usta vidjet ćete crvene točkice. Upotrijebite tipku ESC da biste vidjeli ostale dijelove lica.
Kompletni python kod i demonstracijski video dani su u nastavku.
