Die Gesichtserkennung ist eines der am meisten nachgefragten Teilgebiete der Computer Vision. Durch das Aufkommen von Deep Learning hat sich Computer Vision in den letzten Jahren stark weiterentwickelt, und dieser Trend wird sich mit der Zeit nur noch verstärken.
Es gibt immer mehr Menschen, die Computer Vision nutzen, ohne es zu bemerken. Zum Beispiel sind die Kameras in unseren Smartphones in der Lage, Gesichter zu erkennen und sogar den Besitzer anhand seines Porträts zu identifizieren.
Das Ziel dieses Tutorials ist es, Ihnen zu zeigen, wie Sie den ersten
Schritt der Gesichtserkennung durchführen: das Erstellen der
Gesichtserkennungs-App unter Verwendung der Grundfunktionen der
dlib-Bibliothek. Zu Beginn: dlib ist ein sehr mächtiges Instrument.
Ursprünglich in C++ geschrieben, kann es sowohl mit C++ als auch mit
Python 3.x verwendet werden. Es ist außerdem ein
plattformübergreifendes Framework, so dass Sie es unter Linux, MacOS
und sogar Windows verwenden können. Als grundlegende
Frontalgesichtserkennungs-Engine verwendet dlib den Histogram of
Oriented Gradients (HOG)-Algorithmus, der im Allgemeinen einer der am
häufigsten verwendeten Objekterkennungsalgorithmen ist.
pip3 install numpy dlib
Python code
Ich habe argparse verwendet, um den Pfad des Eingabebildes zu erhalten und um einzustellen, wie viel Zeit das Bild angezeigt wird. Ich würde sagen, dass argparse der flexibelste Weg ist, um den gleichen Code mit verschiedenen Parametern viele Male zu verwenden. Außerdem habe ich die time-Bibliothek verwendet, um festzulegen, wie viel Zeit das Bild angezeigt werden soll (in Sekunden).
import argparse from time import sleep import dlib
Der nächste Codeschnipsel parst die Argumente mit argparse. Das erste Argument ist erforderlich, da es den relativen Pfad zu dem Bild angibt, das an den Gesichtsdetektor übergeben werden soll. Das zweite Argument gibt an, wie viel Zeit in Sekunden das Bild angezeigt werden soll. Es ist optional, da ein Standardwert angegeben ist.
parser = argparse.ArgumentParser() parser.add_argument("-img_path", "-p", required=True, help="Path to image") parser.add_argument("-delay", "-d", type=int, default=4) args = parser.parse_args()
In den nächsten beiden Zeilen werden der HOG-basierte frontale Gesichtsdetektor und das Popup-Fenster definiert. Sowohl der Detektor als auch das Fenster werden mit der dlib-Bibliothek bereitgestellt.
detector = dlib.get_frontal_face_detector() popup_window = dlib.image_window()
Hier wird das Bild geladen und als numpy.ndarray der Form [H,W,C] eingelesen, wobei H für die Bildhöhe (in Pixeln), W für die Bildbreite (ebenfalls in Pixeln) und C für die Anzahl der Farbkanäle steht (normalerweise 3, wenn das Bild im RGB-Format vorliegt, oder 1, wenn das Bild Graustufen hat).
image_array = dlib.load_rgb_image(args.img_path)
Schließlich führt die nächste Zeile des Codes die Gesichtserkennung durch, wobei der benutzerdefinierte dlib-HOG-basierte frontale Gesichtsdetektor verwendet wird. Das zweite Argument des Detektors gibt an, wie oft das Bild hochgesampelt wird. Die folgende Zeile gibt die Anzahl der erkannten Gesichter aus.
faces = detector(image_array, 1)
print(f"{len(faces)} faces detected on the image")
Lassen Sie uns nun alles visualisieren, was wir gemacht haben. Zuerst zeigen wir das Bild im Popup-Fenster an und fügen dann die Bounding Boxes über dem Bereich hinzu, die als menschliche Gesichter erkannt werden. Danach frieren wir den Code für eine gewisse Zeit ein, die wir mit dem Argument -delay angegeben haben. Sobald eine gewisse Zeit verstrichen ist, sollte das Bildfenster zusammenklappen:
popup_window.set_image(image_array) popup_window.add_overlay(faces) sleep(args.delay) popup_window.clear_overlay()
Erkennen von Gesichtern
Jetzt ist das Skript fertig, also führen wir es aus. Wir müssen die Kommandozeilenargumente für den Bildpfad und optional für die Dauer der Anzeige des Bildes angeben.
python3 dlib_face_detection.py –img_path images/image.jpg –delay 3
So sollte das Endergebnis aussehen:
"Bild fehlt"
Video zum Anschauen:
Gesamter Quellcode
#pip3 install numpy dlib import argparse from time import sleep import dlib parser = argparse.ArgumentParser() parser.add_argument("-img_path", "-p", required=True, help="Path to image") parser.add_argument("-delay", "-d", type=int, default=4) args = parser.parse_args() detector = dlib.get_frontal_face_detector() popup_window = dlib.image_window() image_array = dlib.load_rgb_image(args.img_path) faces = detector(image_array, 1) print(f"{len(faces)} faces detected on the image") popup_window.set_image(image_array) popup_window.add_overlay(faces) sleep(args.delay) popup_window.clear_overlay()
Kommentare
Kommentar veröffentlichen