- Componenten vereist
- OpenCV installeren in Raspberry Pi
- Hoe de gezichtsdelen te detecteren met dlib
- De Raspberry Pi programmeren voor gezichtsherkenning
- De gezichtsdeelherkenning testen
Detectie van gezichtsoriëntatiepunten is het proces waarbij verschillende delen van het gezicht worden gedetecteerd, zoals de wenkbrauwen, ogen, neus, mond en kaak. Er zijn veel toepassingen die technieken voor gezichtsherkenning gebruiken.
Eerder hebben we een gezichtsherkenningssysteem gebouwd met OpenCV, vandaag zullen we dezelfde OpenCV gebruiken met Raspberry Pi voor detectie van gezichtsoriëntatiepunten. Een vooraf getrainde gezichtsherkenningsdetectormodule uit de dlib-bibliotheek zal worden gebruikt om de locatie van de belangrijkste gezichtsstructuren op het gezicht te detecteren en python OpenCV zal worden gebruikt om de gedetecteerde gezichtsdelen te visualiseren.
Componenten vereist
Hardware onderdelen
- Raspberry Pi 3
- Pi-cameramodule
Software en online services
- OpenCV
- Dlib
- Python3
Voordat we verder gaan met deze Raspberry Pi 3 Facial Landmark Detection , moeten we eerst OpenCV, imutils, dlib, Numpy en enkele andere afhankelijkheden in dit project installeren. OpenCV wordt hier gebruikt voor digitale beeldverwerking. De meest voorkomende toepassingen van digitale beeldverwerking zijn objectdetectie, gezichtsherkenning en mensenteller.
Volg onze eerdere tutorials voor meer informatie over het koppelen van een Pi-camera met Raspberry Pi.
OpenCV installeren in Raspberry Pi
Hier wordt de OpenCV-bibliotheek gebruikt voor de Raspberry Pi QR-scanner. Update eerst de Raspberry Pi om de OpenCV te installeren.
sudo apt-get update
Installeer vervolgens de vereiste afhankelijkheden om OpenCV op uw Raspberry Pi te installeren.
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
Installeer daarna de OpenCV in Raspberry Pi met behulp van de onderstaande opdracht.
pip3 installeer opencv-contrib-python == 4.1.0.25
We gebruikten eerder OpenCV met Raspberry pi en hebben er veel tutorials over gemaakt.
- OpenCV installeren op Raspberry Pi met CMake
- Realtime gezichtsherkenning met Raspberry Pi en OpenCV
- Kentekenherkenning met Raspberry Pi en OpenCV
- Menigte schatten met OpenCV en Raspberry Pi
We hebben ook een reeks OpenCV-tutorials gemaakt, beginnend vanaf het beginnersniveau.
Imutils installeren: imutils wordt gebruikt om enkele noodzakelijke beeldverwerkingsfuncties uit te voeren, zoals vertalen, roteren, vergroten of verkleinen, skeletvorming en het gemakkelijker weergeven van Matplotlib-afbeeldingen met OpenCV. Dus installeer imutils met het onderstaande commando:
pip3 installeer imutils
Dlib installeren: dlib is de moderne toolkit die Machine Learning-algoritmen en tools voor real-world problemen bevat. Gebruik de onderstaande opdracht om het dlib.
pip3 dlib installeren
NumPy installeren: NumPy is de kernbibliotheek voor wetenschappelijk computergebruik die een krachtig n-dimensionaal array-object bevat, tools biedt voor het integreren van C, C ++, enz.
Pip3 installeer numpy
Hoe de gezichtsdelen te detecteren met dlib
We gaan de vooraf getrainde gezichtsherkenningsdetector van de dlib-bibliotheek gebruiken om de locatie van 68 (x, y) -coördinaten te detecteren die overeenkomen met gezichtsstructuren op het gezicht. dlib gezichtsherkenningsvoorspeller is getraind op de iBUG 300-W-dataset. Een afbeelding met de indexen van de 68 coördinaten wordt hieronder gegeven:
De Raspberry Pi programmeren voor gezichtsherkenning
De volledige python-code voor herkenning van gezichtsonderdelen met de vooraf getrainde gezichtsherkenningsdetector van de dlib staat aan het einde van de pagina. Hier leggen we enkele belangrijke delen van de code uit voor een beter begrip.
Dus, zoals gewoonlijk, start de code door alle vereiste bibliotheken op te nemen.
van imutils import face_utils import numpy als np import argparse import imutils import dlib import cv2 uit picamera.array importeer PiRGBArray uit picamera importeer PiCamera
Initialiseer vervolgens het camera-object en stel de resolutie in op (640, 480) en de framesnelheid op 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Gebruik nu in de volgende regels de argumentparser om het pad naar de voorspeller van gezichtsoriëntatiepunten te geven.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "facial landmark predictor path") args = vars (ap.parse_args ())
Initialiseer in de volgende regels de vooraf getrainde gezichtsherkenning van de op HOG gebaseerde dlib en laad de vooraf getrainde voorspeller voor gezichtsoriëntatie.
detector = dlib.get_frontal_face_detector () predictor = dlib.shape_predictor (args)
Gebruik vervolgens de functie capture_continuous om te beginnen met het vastleggen van de frames van de Raspberry Pi-camera.
voor frame in camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", afbeelding) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Gebruik de klaviertoets 'S' om een bepaald frame vast te leggen. Wijzig vervolgens het formaat van de vastgelegde afbeelding en converteer deze naar grijswaarden.
if key == ord ("s"): afbeelding = imutils.resize (afbeelding, breedte = 400) grijs = cv2.cvtColor (afbeelding, cv2.COLOR_BGR2GRAY)
Gebruik de detectorfunctie van de dlib-bibliotheek om de gezichten in de vastgelegde afbeelding te detecteren.
rects = detector (grijs, 1)
Maak de foto waarop de gezichtsherkenning is uitgevoerd, bepaal de gezichtsoriëntatiepunten en converteer de 68 punten naar een NumPy-array. Loop over elk van de gezichtsgebieden afzonderlijk.
for (i, rect) in enumerate (rects): shape = predictor (grijs, rect) shape = face_utils.shape_to_np (vorm)
Neem vervolgens een kopie van de originele afbeelding en gebruik deze voor de lus om de naam van het gezichtsgedeelte op de afbeelding te tekenen. De tekstkleur wordt rood, u kunt deze in een andere kleur veranderen door de RGB-waarden te wijzigen.
voor (name, (i, j)) in 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 zullen we de gedetecteerde gezichtsdelen doorlopen en de OpenCV- tekenfunctie gebruiken om cirkels op deze gezichtsdelen te tekenen. U kunt dit OpenCV-document volgen voor meer informatie over de tekenfuncties
voor (x, y) in vorm: cv2.circle (kloon, (x, y), 1, (0, 0, 255), -1)
Nu zullen we in de volgende regels elk gezichtsdeel extraheren als een afzonderlijke afbeelding door het selectiekader van de coördinaten van een specifiek gezichtsdeel te berekenen. De geëxtraheerde afbeelding wordt verkleind tot 250 pixels.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, breedte = 250, inter = cv2.INTER_CUBIC)
Geef nu in de laatste regels van de code de gezichtsdelen weer met hun naam en een aparte afbeelding van dat deel. Gebruik de ESC-toets om het gezichtsgebied te wijzigen.
cv2.imshow ("ROI", roi) cv2.imshow ("Afbeelding", kloon) cv2.waitKey (0)
De gezichtsdeelherkenning testen
Om het project te testen, maakt u een map en navigeert u ernaar met behulp van de onderstaande opdrachten:
mkdir gezichtsdeel detector cd gezichtsdeel detector
Download nu het shape_predictor_68_face_landmarks.dat-bestand van deze link, extraheer en kopieer het shape_predictor_68_face_landmarks.dat- bestand in deze bibliotheek en open vervolgens een nieuw bestand met de naam detect.py en plak de onderstaande code.
Start nu de python-code met behulp van de onderstaande opdracht:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
U ziet een venster met een liveweergave van uw camera. Druk vervolgens op de 'S'-toets om een frame uit de livestream te selecteren. U zult rode stippen op uw mondgebied zien. Gebruik de ESC-toets om de andere gezichtsdelen te zien.
Volledige python-code en demonstratievideo worden hieronder gegeven.