- Komponenter kreves
- Installere OpenCV i Raspberry Pi
- Hvordan oppdage ansiktsdelene ved hjelp av dlib
- Programmering av Raspberry Pi for påvisning av ansikts landemerke
- Testing av ansiktsgjenkjenning
Oppdagelse av ansikts landemerker er prosessen med å oppdage forskjellige deler i ansiktet som øyenbryn, øyne, nese, munn og kjeve. Det er mange applikasjoner som bruker deteksjonsteknikker for ansiktslandemerke.
Tidligere bygde vi et ansiktsgjenkjenningssystem ved hjelp av OpenCV, i dag skal vi bruke den samme OpenCV med Raspberry Pi for deteksjon av ansiktsmerker. En forhåndsutdannet landemerkedetektormodul fra dlib-biblioteket vil bli brukt til å oppdage plasseringen av de viktigste ansiktsstrukturene i ansiktet, og python OpenCV vil bli brukt til å visualisere de oppdagede ansiktsdelene.
Komponenter kreves
Maskinvarekomponenter
- Raspberry Pi 3
- Pi kameramodul
Programvare og online tjenester
- OpenCV
- Dlib
- Python3
Før vi fortsetter med denne Raspberry Pi 3 Facial Landmark Detection , må vi først installere OpenCV, imutils, dlib, Numpy og noen andre avhengigheter i dette prosjektet. OpenCV brukes her til digital bildebehandling. De vanligste bruksområdene for digital bildebehandling er gjenkjenning av objekter, ansiktsgjenkjenning og personteller.
For å lære mer om hvordan du kobler Pi-kamera til Raspberry Pi, følg våre tidligere opplæringsprogrammer.
Installere OpenCV i Raspberry Pi
Her vil OpenCV-biblioteket brukes til Raspberry Pi QR-skanneren. For å installere OpenCV, oppdaterer du først Raspberry Pi.
sudo apt-get oppdatering
Installer deretter de nødvendige avhengighetene for å installere OpenCV på 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
Deretter installerer du OpenCV i Raspberry Pi ved hjelp av kommandoen nedenfor.
pip3 installer opencv-contrib-python == 4.1.0.25
Vi har tidligere brukt OpenCV med Raspberry pi og laget mange veiledninger om det.
- Installere OpenCV på Raspberry Pi ved hjelp av CMake
- Sanntids ansiktsgjenkjenning med Raspberry Pi og OpenCV
- Lisensgjenkjenning ved bruk av Raspberry Pi og OpenCV
- Estimering av mengde ved bruk av OpenCV og Raspberry Pi
Vi har også laget en serie OpenCV-opplæringsprogrammer fra begynnernivå.
Installere imutils : imutils brukes til å utføre få nødvendige bildebehandlingsfunksjoner som oversettelse, rotasjon, endring av størrelse, skjelettdannelse og visning av Matplotlib-bilder lettere med OpenCV. Så installer imutils ved å bruke kommandoen nedenfor:
pip3 installere imutils
Installere dlib: dlib er den moderne verktøysettet som inneholder maskinlæringsalgoritmer og verktøy for virkelige problemer. Bruk kommandoen nedenfor for å installere dlib.
pip3 installer dlib
Installere NumPy : NumPy er kjernebiblioteket for vitenskapelig databehandling som inneholder et kraftig n-dimensjonalt arrayobjekt, gir verktøy for å integrere C, C ++, etc.
Pip3 installerer nummen
Hvordan oppdage ansiktsdelene ved hjelp av dlib
Vi skal bruke dlib-bibliotekets ferdig trente ansiktsdetektor for ansikt for å oppdage plasseringen av 68 (x, y) -koordinater som tilordnes ansiktsstrukturer i ansiktet. dlib ansikts landemerke prediktor er trent på iBUG 300-W datasettet. Et bilde som inneholder indeksene til de 68 koordinatene er gitt nedenfor:
Programmering av Raspberry Pi for påvisning av ansikts landemerke
Komplett pythonkode for ansiktsgjenkjenning med dlibs forhåndstrente ansiktsdetektor for ansiktet er gitt på slutten av siden. Her forklarer vi noen viktige deler av koden for bedre forståelse.
Så som vanlig, start koden med å inkludere alle nødvendige biblioteker.
fra imutils import face_utils import numpy som np import argparse import imutils import dlib import cv2 fra picamera.array import PiRGBArray fra picamera import PiCamera
Initialiser deretter kameraobjektet og sett oppløsningen til (640, 480) og bildefrekvensen til 30 bilder per sekund
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Nå i de neste linjene, bruk argumentparseren for å gi stien til ansikts landemerke prediktor.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "facial landmark predictor path") args = vars (ap.parse_args ())
I de neste linjene initialiserer du den HOG-baserte dlibens forhåndstrente ansiktsdetektor og laster inn den forhåndstrente ansiktspredikanten for ansiktet.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Bruk deretter capture_continuous- funksjonen for å begynne å fange rammene fra Raspberry Pi-kameraet.
for ramme i kamera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Bruk tastaturtasten 'S' for å fange en bestemt ramme. Endre deretter størrelsen på det fangede bildet og konverter det til gråtoner.
hvis tast == ord ("s"): bilde = imutils.resize (bilde, bredde = 400) grå = cv2.cvtColor (bilde, cv2.COLOR_BGR2GRAY)
Bruk detektorfunksjonen til dlib-biblioteket for å oppdage ansiktene i det fangede bildet.
rects = detektor (grå, 1)
Ta bildet som ansiktsgjenkjenning ble utført på, bestem ansikts landemerker og konverter de 68 punktene til et NumPy-utvalg. Sløyfe over hver av ansiktsregionene hver for seg.
for (i, rect) i enumerate (rects): form = prediktor (grå, rett) form = face_utils.shape_to_np (form)
Ta deretter en kopi av det originale bildet og bruk det til løkken for å tegne navnet på ansiktsdelen på bildet. Tekstfargen vil være rød, du kan endre den til en annen farge ved å endre RGB-verdiene.
for (navn, (i, j)) i 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)
Nå vil vi løkke over de oppdagede ansiktsdelene og bruke OpenCV- tegningsfunksjonen til å tegne sirkler på disse ansiktsdelene. Du kan følge dette OpenCV-dokumentet for mer informasjon om tegningsfunksjonene
for (x, y) i form: cv2.circle (klone, (x, y), 1, (0, 0, 255), -1)
Nå i de neste linjene vil vi trekke ut hver ansiktsdel som et separat bilde ved å beregne avgrensningsboksen til koordinatene til en bestemt ansiktsdel. Det ekstraherte bildet vil bli endret til 250 piksler.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Nå i de siste linjene i koden, viser ansiktsdelene med navnene og et eget bilde av den delen. Bruk ESC-tasten for å endre ansiktsregionen.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", clone) cv2.waitKey (0)
Testing av ansiktsgjenkjenning
For å teste prosjektet, opprett en katalog og naviger til den ved hjelp av kommandoene nedenfor:
mkdir ansiktsdel-detektor cd ansiktsdel-detektor
Last ned filen shape_predictor_68_face_landmarks.dat fra denne lenken, og pakk ut og kopier deretter shape_predictor_68_face_landmarks.dat- filen i dette biblioteket, og åpne deretter en ny fil med navnet detect.py og lim inn koden nedenfor.
Start nå pythonkoden ved å bruke kommandoen nedenfor:
python3 detect.py --shape-prediktor shape_predictor_68_face_landmarks.dat
Du vil se et vindu som viser en live visning fra kameraet ditt. Trykk deretter på 'S' -tasten for å velge en ramme fra direktesendingen. Du vil se røde prikker på munnområdet. Bruk ESC-tasten for å se de andre ansiktsdelene.
Fullstendig pythonkode og demonstrasjonsvideo er gitt nedenfor.