- Komponenter, der kræves
- Installation af OpenCV i Raspberry Pi
- Sådan registreres ansigtets dele ved hjælp af dlib
- Programmering af Raspberry Pi til detektion af ansigtsmærke
- Test af ansigtsgenkendelsesværktøjet
Påvisning af ansigtsmærker er processen med at detektere forskellige dele i ansigtet, såsom øjenbryn, øjne, næse, mund og kæbe. Der er mange applikationer, der bruger detekteringsteknikker for ansigtsmærke.
Tidligere byggede vi et ansigtsgenkendelsessystem ved hjælp af OpenCV, i dag bruger vi den samme OpenCV med Raspberry Pi til detektion af ansigtsmærker. Et foruddannet ansigtsmærke-detektormodul fra dlib-biblioteket vil blive brugt til at detektere placeringen af de vigtigste ansigtsstrukturer i ansigtet, og python OpenCV vil blive brugt til at visualisere de detekterede ansigtsdele.
Komponenter, der kræves
Hardwarekomponenter
- Hindbær Pi 3
- Pi kameramodul
Software og onlinetjenester
- OpenCV
- Dlib
- Python3
Før vi fortsætter med denne Raspberry Pi 3 Facial Landmark Detection , skal vi først installere OpenCV, imutils, dlib, Numpy og nogle andre afhængigheder i dette projekt. OpenCV bruges her til digital billedbehandling. De mest almindelige anvendelser af digital billedbehandling er genstandsdetektering, ansigtsgenkendelse og persontæller.
For at lære mere om, hvordan du interfacer Pi-kamera med Raspberry Pi, skal du følge vores tidligere tutorials.
Installation af OpenCV i Raspberry Pi
Her vil OpenCV-biblioteket blive brugt til Raspberry Pi QR-scanneren. For at installere OpenCV skal du først opdatere Raspberry Pi.
sudo apt-get opdatering
Installer derefter de krævede afhængigheder for installation af OpenCV på din 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
Derefter skal du installere OpenCV i Raspberry Pi ved hjælp af nedenstående kommando.
pip3 installer opencv-contrib-python == 4.1.0.25
Vi har tidligere brugt OpenCV med Raspberry pi og oprettet en masse tutorials om det.
- Installation af OpenCV på Raspberry Pi ved hjælp af CMake
- Realtids ansigtsgenkendelse med Raspberry Pi og OpenCV
- Registrering af nummerplade ved hjælp af Raspberry Pi og OpenCV
- Estimering af mængde ved hjælp af OpenCV og Raspberry Pi
Vi har også oprettet en række OpenCV-tutorials startende fra begynderniveauet.
Installation af imutils : imutils bruges til at udføre få nødvendige billedbehandlingsfunktioner såsom oversættelse, rotation, størrelse, skeletisering og visning af Matplotlib-billeder lettere med OpenCV. Så installer imutils ved hjælp af kommandoen nedenfor:
pip3 installere imutils
Installation af dlib: dlib er det moderne værktøjssæt, der indeholder maskinindlæringsalgoritmer og værktøjer til virkelige problemer. Brug nedenstående kommando til at installere dlib.
pip3 installer dlib
Installation af NumPy : NumPy er kernebiblioteket til videnskabelig computing, der indeholder et kraftfuldt n-dimensionelt array-objekt, giver værktøjer til integration af C, C ++ osv.
Pip3 installerer bedøvet
Sådan registreres ansigtets dele ved hjælp af dlib
Vi skal bruge dlib-bibliotekets foruddannede ansigtsmærke til at detektere placeringen af 68 (x, y) -koordinater, der kortlægges til ansigtsstrukturer i ansigtet. dlib ansigts vartegn forudsigelse er trænet i iBUG 300-W datasættet. Et billede, der indeholder indekserne for de 68 koordinater, er vist nedenfor:
Programmering af Raspberry Pi til detektion af ansigtsmærke
Komplet pythonkode til ansigtsgenkendelse med dlibs foruddannede ansigtsmærke til ansigter findes i slutningen af siden. Her forklarer vi nogle vigtige dele af koden for bedre forståelse.
Så som normalt skal du starte koden ved at inkludere alle de 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 derefter kameraobjektet, og indstil opløsningen til (640, 480) og billedhastigheden til 30 fps
kamera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Nu i de næste linjer skal du bruge argumentparseren til at give stien til ansigtets vartegn.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "facial landmark predictor path") args = vars (ap.parse_args ())
I de næste linjer initialiseres den HOG-baserede dlibs foruddannede ansigtsdetektor og indlæser den foruddannede ansigts vartegn.
detektor = dlib.get_frontal_face_detector () forudsigelse = dlib.shape_predictor (args)
Brug derefter capture_continuous- funktionen til at begynde at tage rammerne fra Raspberry Pi-kameraet.
til 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)
Brug tastaturtasten 'S' til at fange en bestemt ramme. Ændr derefter størrelsen på det optagede billede, og konverter det til gråtoner.
hvis nøgle == ord ("s"): billede = imutils.resize (billede, bredde = 400) grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)
Brug detektorfunktionen i dlib-biblioteket til at registrere ansigterne i det optagede billede.
rects = detektor (grå, 1)
Tag billedet, hvor ansigtsgenkendelse blev udført, bestem ansigtsmærkerne, og konverter de 68 punkter til et NumPy-array. Loop hver af ansigtsregionerne individuelt.
for (i, rect) i enumerate (rects): form = forudsigende (grå, ret) figur = ansigt_tilbrug.form_til_np (form)
Tag derefter en kopi af det originale billede og brug det til sløjfen til at tegne navnet på ansigtsdelen på billedet. Tekstfarven bliver rød, du kan ændre den til en anden farve ved at ændre RGB-værdierne.
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)
Nu løber vi over de opdagede ansigtsdele og bruger OpenCV- tegningsfunktionen til at tegne cirkler på disse ansigtsdele. Du kan følge dette OpenCV-dokument for at få flere oplysninger om tegningsfunktionerne
for (x, y) i form: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Nu i de næste linjer udtrækker vi hver ansigtsdel som et separat billede ved at beregne afgrænsningsboksen for koordinaterne for en bestemt ansigtsdel. Det udpakkede billede ændres til 250 pixels.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = billede roi = imutils.resize (roi, bredde = 250, inter = cv2.INTER_CUBIC)
Nu i de sidste linjer i koden skal du vise ansigtets dele med deres navne og et separat billede af den del. Brug ESC-tasten til at ændre ansigtsområdet.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", clone) cv2.waitKey (0)
Test af ansigtsgenkendelsesværktøjet
For at teste projektet skal du oprette en mappe og navigere til den ved hjælp af nedenstående kommandoer:
mkdir ansigts-del-detektor cd ansigts-del-detektor
Download nu formen_predictor_68_face_landmarks.dat fra dette link, og udpak og kopier derefter formen_predictor_68_face_landmarks.dat- filen inde i dette bibliotek, og åbn derefter en ny fil med navnet detect.py og indsæt koden nedenfor.
Start nu pythonkoden ved hjælp af nedenstående kommando:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
Du vil se et vindue, der viser en livevisning fra dit kamera. Tryk derefter på 'S' -tasten for at vælge en ramme fra live stream. Du vil se røde prikker på dit mundområde. Brug ESC-tasten til at se de andre ansigtsdele.
Komplet pythonkode og demonstrationsvideo er angivet nedenfor.