- Erforderliche Komponenten
- OpenCV in Raspberry Pi installieren
- So erkennen Sie die Gesichtsteile mit dlib
- Programmieren des Raspberry Pi für die Erkennung von Gesichtsmarkierungen
- Testen des Gesichtsteilerkenners
Bei der Erkennung von Gesichtspunkten im Gesicht werden verschiedene Teile des Gesichts wie Augenbrauen, Augen, Nase, Mund und Kiefer erkannt. Es gibt viele Anwendungen, die Gesichtserkennungstechniken verwenden.
Früher haben wir ein Gesichtserkennungssystem mit OpenCV erstellt. Heute werden wir dasselbe OpenCV mit Raspberry Pi für die Erkennung von Gesichtsmarkierungen verwenden. Ein vorab trainiertes Gesichtsmarkierungsdetektormodul aus der dlib-Bibliothek wird verwendet, um die Position der wichtigsten Gesichtsstrukturen im Gesicht zu erkennen, und Python OpenCV wird verwendet, um die erkannten Gesichtsteile zu visualisieren.
Erforderliche Komponenten
Hardware-Komponenten
- Himbeer Pi 3
- Pi-Kameramodul
Software und Online-Dienste
- OpenCV
- Dlib
- Python3
Bevor Sie mit dieser Raspberry Pi 3 Gesichtszeichen - Erkennung , zuerst müssen wir OpenCV, imutils installieren, DLIB, Numpy und einige andere Abhängigkeiten in diesem Projekt. OpenCV wird hier für die digitale Bildverarbeitung verwendet. Die häufigsten Anwendungen der digitalen Bildverarbeitung sind Objekterkennung, Gesichtserkennung und Personenzähler.
Befolgen Sie unsere vorherigen Tutorials, um mehr darüber zu erfahren, wie Sie eine Pi-Kamera mit Raspberry Pi verbinden.
OpenCV in Raspberry Pi installieren
Hier wird die OpenCV-Bibliothek für den Raspberry Pi QR-Scanner verwendet. Um OpenCV zu installieren, aktualisieren Sie zuerst den Raspberry Pi.
sudo apt-get update
Installieren Sie dann die erforderlichen Abhängigkeiten für die Installation von OpenCV auf Ihrem Raspberry Pi.
sudo apt-get installiere libhdf5-dev -y sudo apt-get installiere libhdf5-serial-dev –y sudo apt-get installiere libatlas-base-dev –y sudo apt-get installiere libjasper-dev -y sudo apt-get installiere libqtgui4 –Y sudo apt-get install libqt4-test –y
Installieren Sie danach OpenCV in Raspberry Pi mit dem folgenden Befehl.
pip3 installiere opencv-contrib-python == 4.1.0.25
Wir haben zuvor OpenCV mit Raspberry pi verwendet und viele Tutorials darauf erstellt.
- Installieren von OpenCV auf Raspberry Pi mit CMake
- Echtzeit-Gesichtserkennung mit Raspberry Pi und OpenCV
- Kennzeichenerkennung mit Raspberry Pi und OpenCV
- Crowd Size Estimation mit OpenCV und Raspberry Pi
Wir haben auch eine Reihe von OpenCV-Tutorials für Anfänger erstellt.
Installieren von Imutils : Imutils wird verwendet, um einige erforderliche Bildverarbeitungsfunktionen wie Übersetzung, Drehung, Größenänderung, Skelettierung und Anzeige von Matplotlib-Bildern mit OpenCV einfacher auszuführen. Installieren Sie also imutils mit dem folgenden Befehl:
pip3 installiere Imutils
Installation von dlib: dlib ist das moderne Toolkit, das Algorithmen und Tools für maschinelles Lernen für reale Probleme enthält. Verwenden Sie den folgenden Befehl, um die dlib zu installieren.
pip3 installiere dlib
Installieren von NumPy : NumPy ist die Kernbibliothek für wissenschaftliches Rechnen, die ein leistungsstarkes n-dimensionales Array-Objekt enthält und Tools zur Integration von C, C ++ usw. bereitstellt.
Pip3 install numpy
So erkennen Sie die Gesichtsteile mit dlib
Wir werden den vorgefertigten Gesichtsmarkierungsdetektor der dlib-Bibliothek verwenden, um die Position von 68 (x, y) -Koordinaten zu ermitteln, die den Gesichtsstrukturen im Gesicht zugeordnet sind. Der dlib Facial Landmark Predictor wird auf dem iBUG 300-W-Datensatz trainiert. Ein Bild, das die Indizes der 68 Koordinaten enthält, ist unten angegeben:
Programmieren des Raspberry Pi für die Erkennung von Gesichtsmarkierungen
Der vollständige Python-Code für die Erkennung von Gesichtsteilen mit dem vorgefertigten Gesichtsmarkierungsdetektor der dlib befindet sich am Ende der Seite. Hier erklären wir einige wichtige Teile des Codes zum besseren Verständnis.
Starten Sie den Code also wie gewohnt, indem Sie alle erforderlichen Bibliotheken einschließen.
von imutils importieren face_utils importieren numpy als np importieren argparse importieren imutils importieren dlib importieren cv2 von picamera.array importieren PiRGBArray von picamera importieren PiCamera
Initialisieren Sie dann das Kameraobjekt und stellen Sie die Auflösung auf (640, 480) und die Bildrate auf 30 fps ein
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Verwenden Sie nun in den nächsten Zeilen den Argument-Parser, um den Pfad zum Prädiktor für Gesichtsmarkierungen bereitzustellen.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-Predictor", erforderlich = True, help = "Prädiktorpfad für Gesichtsmarkierungen") args = vars (ap.parse_args ())
Initialisieren Sie in den nächsten Zeilen den vorab trainierten Gesichtsdetektor der HOG-basierten dlib und laden Sie den vorab trainierten Gesichtsmarkierungsprädiktor.
detector = dlib.get_frontal_face_detector () Predictor = dlib.shape_predictor (args)
Verwenden Sie dann die Funktion capture_continuous, um die Aufnahme der Bilder von der Raspberry Pi-Kamera zu starten.
für Frame in 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))
Verwenden Sie die Tastaturtaste 'S', um ein bestimmtes Bild aufzunehmen. Ändern Sie dann die Größe des aufgenommenen Bildes und konvertieren Sie es in Graustufen.
if key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Verwenden Sie die Detektorfunktion der dlib-Bibliothek, um die Gesichter im aufgenommenen Bild zu erkennen.
rects = Detektor (grau, 1)
Nehmen Sie das Bild auf, auf dem die Gesichtserkennung durchgeführt wurde, bestimmen Sie die Gesichtsmarkierungen und konvertieren Sie die 68 Punkte in ein NumPy-Array. Durchlaufen Sie jeden Gesichtsbereich einzeln.
für (i, rect) in enumerate (rects): shape = prädiktor (grau, rect) shape = face_utils.shape_to_np (shape)
Nehmen Sie dann eine Kopie des Originalbilds und zeichnen Sie damit für die Schleife den Namen des Gesichtsteils auf das Bild. Die Textfarbe ist rot. Sie können sie durch Ändern der RGB-Werte in eine andere Farbe ändern.
für (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (klon, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0) 255), 2)
Jetzt werden wir die erkannten Gesichtsteile durchlaufen und die OpenCV- Zeichenfunktion verwenden, um Kreise auf diesen Gesichtsteilen zu zeichnen. Sie können diesem OpenCV-Dokument folgen, um weitere Informationen zu den Zeichenfunktionen zu erhalten
für (x, y) in Form: cv2.circle (Klon, (x, y), 1, (0, 0, 255), -1)
In den nächsten Zeilen extrahieren wir nun jedes Gesichtsteil als separates Bild, indem wir den Begrenzungsrahmen der Koordinaten eines bestimmten Gesichtsteils berechnen. Das extrahierte Bild wird auf 250 Pixel verkleinert.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Zeigen Sie nun in den letzten Zeilen des Codes die Gesichtsteile mit ihren Namen und ein separates Bild dieses Teils an. Verwenden Sie die ESC-Taste, um den Gesichtsbereich zu ändern.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", Klon) cv2.waitKey (0)
Testen des Gesichtsteilerkenners
Um das Projekt zu testen, erstellen Sie ein Verzeichnis und navigieren Sie mit den folgenden Befehlen dorthin:
mkdir Gesichtsteilendetektor cd Gesichtsteilendetektor
Laden Sie nun die Datei shape_predictor_68_face_landmarks.dat von diesem Link herunter, extrahieren und kopieren Sie die Datei shape_predictor_68_face_landmarks.dat in diese Bibliothek, öffnen Sie eine neue Datei mit dem Namen detect.py und fügen Sie den unten angegebenen Code ein.
Starten Sie nun den Python-Code mit dem folgenden Befehl:
python3 detect.py --shape-prädiktor shape_predictor_68_face_landmarks.dat
Sie sehen ein Fenster mit einer Live-Ansicht Ihrer Kamera. Drücken Sie dann die Taste 'S', um ein Bild aus dem Live-Stream auszuwählen. Sie werden rote Punkte auf Ihrem Mundbereich sehen. Verwenden Sie die ESC-Taste, um die anderen Gesichtsteile zu sehen.
Der vollständige Python-Code und das Demonstrationsvideo sind unten angegeben.