Direkt zum Hauptbereich

Erstellen Sie Ihren ersten Gesichtsdetektor in wenigen Minuten mit Deep Learning

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

Beliebte Posts aus diesem Blog

Autoencoder verstehen (Teil I)

Warum sollten wir Autoencoder verwenden und was sind die Vorteile von Autoencodern . Wenn man sich andere Beschreibungen und Erklärungen anschaut, was Autoencoder sind, fängt man bald an, durcheinander zu kommen , warum Autoencoder so nützlich sind und warum sie versuchen, von den Eingabedaten zur Ausgabe mit minimalem Verlust zu reproduzieren.

Einfaches Reinforcement Learning: Q-learning

Einer meiner Lieblingsalgorithmen, den ich während eines Reinforcement-Learning-Kurses gelernt habe, war das q-learning. Wahrscheinlich, weil er für mich am einfachsten zu verstehen und zu programmieren war, aber auch, weil er mir sinnvoll erschien. In diesem kurzen Beitrag werde ich q-learning besprechen und den grundlegenden Hintergrund zum Verständnis des Algorithmus vermitteln.