- Komponenter krävs
- Installerar OpenCV i Raspberry Pi
- Hur man upptäcker ansiktsdelarna med dlib
- Programmering av Raspberry Pi för ansiktsigenkänning
- Testar ansiktsigenkänning
Detektering av ansiktsmärken är processen att upptäcka olika delar i ansiktet, såsom ögonbryn, ögon, näsa, mun och käke. Det finns många applikationer som använder ansiktsdetekteringstekniker.
Tidigare byggde vi ett ansiktsigenkänningssystem med OpenCV, idag kommer vi att använda samma OpenCV med Raspberry Pi för att upptäcka ansiktsmärken. En förutbildad ansiktsdetektormodul från dlib-biblioteket kommer att användas för att detektera placeringen av de viktigaste ansiktsstrukturerna i ansiktet och python OpenCV kommer att användas för att visualisera de upptäckta ansiktsdelarna.
Komponenter krävs
Hårdvarukomponenter
- Raspberry Pi 3
- Pi kameramodul
Programvara och onlinetjänster
- OpenCV
- Dlib
- Python3
Innan denna Raspberry Pi 3 Facial Landmark Detection , först måste vi installera OpenCV, imutils, dlib, numpy, och några andra beroenden i detta projekt. OpenCV används här för digital bildbehandling. De vanligaste applikationerna för digital bildbehandling är objektdetektering, ansiktsigenkänning och personräknare.
För att lära dig mer om hur man kopplar ihop Pi-kamera med Raspberry Pi, följ våra tidigare handledning.
Installerar OpenCV i Raspberry Pi
Här kommer OpenCV-biblioteket att användas för Raspberry Pi QR-skannern. För att installera OpenCV, uppdatera först Raspberry Pi.
sudo apt-get uppdatering
Installera sedan de beroenden som krävs för att installera 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
Därefter installerar du OpenCV i Raspberry Pi med kommandot nedan.
pip3 installera opencv-contrib-python == 4.1.0.25
Vi använde tidigare OpenCV med Raspberry pi och skapade många handledning om det.
- Installera OpenCV på Raspberry Pi med CMake
- Ansiktsigenkänning i realtid med Raspberry Pi och OpenCV
- Registrering av registreringsskylt med Raspberry Pi och OpenCV
- Uppskattning av publikstorlek med OpenCV och Raspberry Pi
Vi har också skapat en serie OpenCV-självstudier med början från nybörjarnivån.
Installera imutils : imutils används för att utföra några nödvändiga bildbehandlingsfunktioner som översättning, rotation, storleksändring, skelettisering och att visa Matplotlib-bilder enklare med OpenCV. Så installera imutils med kommandot nedan:
pip3 installera imutils
Installera dlib: dlib är den moderna verktygslådan som innehåller maskininlärningsalgoritmer och verktyg för verkliga problem. Använd kommandot nedan för att installera dlib.
pip3 installera dlib
Installera NumPy : NumPy är kärnbiblioteket för vetenskaplig databehandling som innehåller ett kraftfullt n-dimensionellt arrayobjekt, tillhandahåller verktyg för att integrera C, C ++, etc.
Pip3 installera dom
Hur man upptäcker ansiktsdelarna med dlib
Vi kommer att använda dlib-bibliotekets förutbildade landmärkesdetektor för ansiktet för att upptäcka platsen för 68 (x, y) -koordinater som kartläggs till ansiktsstrukturer i ansiktet. dlib ansikts landmärke prediktor utbildas i iBUG 300-W dataset. En bild som innehåller index för de 68 koordinaterna ges nedan:
Programmering av Raspberry Pi för ansiktsigenkänning
Komplett pythonkod för ansiktsigenkänning med dlibs förutbildade ansiktsdetektor för ansiktet ges i slutet av sidan. Här förklarar vi några viktiga delar av koden för bättre förståelse.
Så som vanligt, starta koden med alla nödvändiga bibliotek.
från imutils import face_utils import numpy som np import argparse import imutils import dlib import cv2 från picamera.array import PiRGBArray från picamera import PiCamera
Initiera sedan kameraobjektet och ställ in upplösningen på (640, 480) och bildhastigheten till 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Nu i nästa rader, använd argumentparsern för att ge vägen till ansiktsprestanda för ansikte.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "ansikts landmärke prediktor sökväg") args = vars (ap.parse_args ())
I nästa rader, initialisera den HOG-baserade dlibs förutbildade ansiktsdetektor och ladda den förutbildade ansiktsigenkänningsprognosen.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Använd sedan capture_continuous funktion för att starta fånga ramarna från Raspberry Pi kameran.
för ram 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)
Använd tangentbordstangenten 'S' för att fånga en viss ram. Ändra sedan storlek på den tagna bilden och konvertera den till gråskala.
om nyckel == ord ("s"): bild = imutils.resize (bild, bredd = 400) grå = cv2.cvtColor (bild, cv2.COLOR_BGR2GRAY)
Använd detektorfunktionen i dlib-biblioteket för att upptäcka ansikten i den tagna bilden.
rects = detektor (grå, 1)
Ta bilden på vilken ansiktsdetektering utfördes, bestäm ansiktsmärkena och konvertera de 68 punkterna till en NumPy-array. Loop över var och en av ansiktsregionerna individuellt.
för (i, rekt) i enumerate (rects): form = prediktor (grå, rekt) form = face_utils.shape_to_np (form)
Ta sedan en kopia av originalbilden och använd den för öglan för att rita namnet på ansiktsdelen på bilden. Textfärgen blir röd, du kan ändra den till en annan färg genom att ändra RGB-värdena.
för (namn, (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 slingrar vi de upptäckta ansiktsdelarna och använder OpenCV- ritningsfunktionen för att rita cirklar på dessa ansiktsdelar. Du kan följa detta OpenCV-dokument för mer information om ritningsfunktionerna
för (x, y) i form: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Nu i nästa rader extraherar vi varje ansiktsdel som en separat bild genom att beräkna avgränsningsrutan för koordinaterna för en specifik ansiktsdel. Den extraherade bilden ändras till 250 pixlar.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = bild roi = imutils.resize (roi, bredd = 250, inter = cv2.INTER_CUBIC)
Nu i de sista raderna i koden, visa ansiktsdelarna med deras namn och en separat bild av den delen. Använd ESC-tangenten för att ändra ansiktsregionen.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", klon) cv2.waitKey (0)
Testar ansiktsigenkänning
För att testa projektet skapar du en katalog och navigerar till det med kommandona nedan:
mkdir face-part-detector cd face- part -detector
Ladda ner filen form_predictor_68_face_landmarks.dat från den här länken och extrahera och kopiera sedan filen shap_predictor_68_face_landmarks.dat inuti detta bibliotek och öppna sedan en ny fil med namnet detect.py och klistra in koden nedan.
Starta nu pythonkoden med kommandot nedan:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
Du kommer att se ett fönster som visar en livevy från din kamera. Tryck sedan på "S" -tangenten för att välja en ram från liveströmmen. Du kommer att se röda prickar på munområdet. Använd ESC-knappen för att se de andra ansiktsdelarna.
Komplett pythonkod och demonstrationsvideo ges nedan.