- Potrebne komponente
- Namestitev OpenCV v Raspberry Pi
- Kako zaznati dele obraza z dlibom
- Programiranje Raspberry Pi za zaznavanje mejnikov na obrazu
- Preizkušanje prepoznavalca obraza
Odkrivanje mejnikov na obrazu je postopek zaznavanja različnih delov na obrazu, kot so obrvi, oči, nos, usta in čeljust. Obstaja veliko aplikacij, ki uporabljajo tehnike zaznavanja obraznega mejnika.
Prej smo z OpenCV izdelovali sistem za prepoznavanje obrazov, danes bomo za odkrivanje mejnikov obraza uporabili isti OpenCV z Raspberry Pi. Vnaprej usposobljen modul za zaznavanje obraznih mejnikov iz knjižnice dlib bo uporabljen za zaznavanje lokacije ključnih obraznih struktur na obrazu, python OpenCV pa za vizualizacijo zaznanih delov obraza.
Potrebne komponente
Komponente strojne opreme
- Raspberry Pi 3
- Modul kamere Pi
Programska oprema in spletne storitve
- OpenCV
- Dlib
- Python3
Preden nadaljujemo s tem Raspberry Pi 3 Facial Landmark Detection , moramo najprej v ta projekt namestiti OpenCV, imutils, dlib, Numpy in nekatere druge odvisnosti. OpenCV se tu uporablja za digitalno obdelavo slik. Najpogostejši programi digitalne obdelave slik so zaznavanje predmetov, prepoznavanje obrazov in števec ljudi.
Če želite izvedeti več o tem, kako povezati kamero Pi z Raspberry Pi, sledite našim prejšnjim navodilom.
Namestitev OpenCV v Raspberry Pi
Tu bo knjižnica OpenCV uporabljena za skener Raspberry Pi QR. Če želite namestiti OpenCV, najprej posodobite Raspberry Pi.
posodobitev sudo apt-get
Nato namestite potrebne odvisnosti za namestitev OpenCV 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
Po tem namestite OpenCV v Raspberry Pi z uporabo spodnjega ukaza.
pip3 namestite opencv-contrib-python == 4.1.0.25
Pred tem smo uporabljali OpenCV z Raspberry pi in na njem ustvarili veliko vadnic.
- Namestitev OpenCV na Raspberry Pi s pomočjo CMake
- Spoznavanje obrazov v realnem času z Raspberry Pi in OpenCV
- Prepoznavanje registrske tablice z uporabo Raspberry Pi in OpenCV
- Ocena množice z uporabo OpenCV in Raspberry Pi
Ustvarili smo tudi vrsto vadnic OpenCV, ki se začnejo od začetnika.
Namestitev imutils : imutils se uporablja za izvajanje nekaj potrebnih funkcij obdelave slik, kot so prevajanje, vrtenje, spreminjanje velikosti, skelet in lažje prikazovanje slik Matplotlib z OpenCV. Torej namestite imutils z uporabo spodnjega ukaza:
pip3 namestite imutils
Namestitev dlib: dlib je sodoben komplet orodij, ki vsebuje algoritme strojnega učenja in orodja za resnične težave. S spodnjim ukazom namestite dlib.
pip3 namestite dlib
Namestitev NumPy : NumPy je jedrna knjižnica za znanstveno računalništvo, ki vsebuje zmogljiv objekt n-dimenzionalne matrike, ponuja orodja za integracijo C, C ++ itd.
Pip3 namesti numpy
Kako zaznati dele obraza z dlibom
Vnaprej usposobljeni detektor mejnikov obraza dlib knjižnice bomo zaznali lokacijo 68 (x, y) koordinat, ki se preslikajo na obrazne strukture na obrazu. dlib napovednik mejnika obraza je usposobljen na naboru podatkov iBUG 300-W. Slika, ki vsebuje indekse 68 koordinat, je podana spodaj:
Programiranje Raspberry Pi za zaznavanje mejnikov na obrazu
Na koncu strani je podana popolna python koda za prepoznavanje delov obraza z dlibovim predhodno usposobljenim detektorjem mejnikov obraza. Tu razlagamo nekatere pomembne dele kode za boljše razumevanje.
Kot običajno, zaženite kodo tako, da vključite vse potrebne knjižnice.
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
Nato inicializirajte objekt kamere in nastavite ločljivost (640, 480) in hitrost sličic na 30 sličic na sekundo
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Zdaj v naslednjih vrsticah uporabite razčlenjevalnik argumentov, da zagotovite pot do napovedovalca mejnika obraza.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", obvezno = True, help = "pot do napovedovanja obraznega mejnika") args = vars (ap.parse_args ())
V naslednjih vrsticah inicializirajte vnaprej usposobljeni detektor obraza dlib na osnovi HOG in naložite predhodno izurjeni napovedovalec mejnikov obraza.
detector = dlib.get_frontal_face_detector () napovedovalec = dlib.shape_predictor (args)
Nato s funkcijo capture_continuous začnite zajemati okvirje s fotoaparata Raspberry Pi.
za okvir v 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)
S tipko na tipkovnici 'S' zajemite določen okvir. Nato spremenite velikost zajete slike in jo pretvorite v sivine.
če je key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Za zaznavanje obrazov na zajeti sliki uporabite funkcijo zaznavanja knjižnice dlib.
rects = detektor (siva, 1)
Posnemite sliko, na kateri je bilo zaznavanje obrazov, določite mejnike obraza in pretvorite 68 točk v matriko NumPy. Zavijte čez vsako od predelov obraza posebej.
for (i, rect) v enumerate (rects): shape = predictor (grey, rect) shape = face_utils.shape_to_np (shape)
Nato vzemite kopijo izvirne slike in z njo za zanko narišite ime obraznega dela na sliko. Barva besedila bo rdeča, spremenite jo lahko v drugo barvo tako, da spremenite vrednosti RGB.
za (ime, (i, j)) v face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (klon, ime, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Zdaj bomo zavili nad zaznane dele obraza in uporabili funkcijo risanja OpenCV za risanje krogov na teh delih obraza. Za več informacij o funkcijah risanja lahko sledite temu dokumentu OpenCV
za (x, y) v obliki: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Zdaj bomo v naslednjih vrsticah vsak del obraza izvlekli kot ločeno sliko, tako da bomo izračunali omejevalno polje koordinat določenega dela obraza. Izvlečena slika bo spremenjena na 250 slikovnih pik.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = slika roi = imutils.resize (roi, širina = 250, inter = cv2.INTER_CUBIC)
Zdaj v zadnjih vrsticah kode prikažite obrazne dele z njihovimi imeni in ločeno sliko tega dela. S tipko ESC spremenite območje obraza.
cv2.imshow ("ROI", roi) cv2.imshow ("Slika", klon) cv2.waitKey (0)
Preizkušanje prepoznavalca obraza
Če želite preizkusiti projekt, ustvarite imenik in se pomaknite do njega z uporabo spodnjih ukazov:
mkdir detektor obraza obraz cd detektor obraza
Zdaj s te povezave prenesite datoteko shape_predictor_68_face_landmarks.dat, nato v to knjižnico izvlecite in kopirajte datoteko shape_predictor_68_face_landmarks.dat, nato odprite novo datoteko z imenom detekt.py in prilepite spodnjo kodo.
Zdaj zaženite kodo python z uporabo spodnjega ukaza:
python3 identify.py --shape-predictor shape_predictor_68_face_landmarks.dat
Videli boste okno, ki prikazuje pogled v živo iz vaše kamere. Nato pritisnite tipko 'S', da izberete okvir iz pretočnega predvajanja v živo. Na predelu ust boste videli rdeče pike. S tipko ESC si oglejte ostale dele obraza.
Popolna koda pythona in predstavitveni video so navedeni spodaj.