Gesichtserkennung mit Python und OpenCV

Teilen

Facebook
Twitter
WhatsApp

In diesem Artikel, werden wir erfahren, was Gesichtserkennung ist und wie sie sich von der Gesichtserkennung unterscheidet. Wir werden kurz auf die Theorie der Gesichtserkennung eingehen und dann zum Abschnitt über die Codierung übergehen. Am Ende dieses Artikels wirst du in der Lage sein, ein Gesichtserkennungsprogramm zur Erkennung von Gesichtern in Bildern und auf Live-Webcam-Feeds zu erstellen.

  1. Was ist Gesichtserkennung?
  2. Was ist Gesichtserkennung?
  3. Gesichtserkennung mit Python
    1. Erkennen von Gesichtern im Webcam-Feed
    2. Erkennen von Gesichtern in Bildern

Was ist Gesichtserkennung?

In der Computer Vision ist ein wesentliches Problem, das wir zu lösen versuchen, die automatische Erkennung von Objekten in einem Bild ohne menschliches Eingreifen. Die Gesichtserkennung kann als ein solches Problem betrachtet werden, bei dem wir menschliche Gesichter in einem Bild erkennen. Die Gesichter der Menschen können sich zwar leicht unterscheiden, aber insgesamt kann man sagen, dass es bestimmte Merkmale gibt, die allen menschlichen Gesichtern gemeinsam sind. Es gibt verschiedene Algorithmen zur Erkennung von Gesichtern, aber der Viola-Jones-Algorithmus ist eine der ältesten Methoden, die auch heute noch verwendet wird, und wir werden ihn später in diesem Artikel verwenden. Sie können den Viola-Jones-Algorithmus nach Beendigung dieses Artikels durchgehen, da ich ihn am Ende dieses Artikels verlinken werde.

Gesichtserkennung ist normalerweise der erste Schritt zu vielen gesichtsbezogenen Technologien, wie Gesichtserkennung oder -verifizierung. Die Gesichtserkennung kann jedoch sehr nützliche Anwendungen haben. Die erfolgreichste Anwendung der Gesichtserkennung ist wahrscheinlich das Fotografieren. Wenn Sie ein Foto von Ihren Freunden machen, erkennt der in Ihre Digitalkamera eingebaute Algorithmus zur Gesichtserkennung, wo sich die Gesichter befinden, und stellt den Fokus entsprechend ein.

Für eine Anleitung zur Gesichtserkennung klicken Sie bitte hier

Was ist Gesichtserkennung?

Nun, da wir erfolgreich solche Algorithmen entwickelt haben, die Gesichter erkennen können, können wir auch erkennen, wessen Gesichter das sind?

Gesichtserkennung ist eine Methode zur Identifizierung oder Überprüfung der Identität einer Person anhand ihres Gesichts. Es gibt verschiedene Algorithmen, die eine Gesichtserkennung durchführen können, aber ihre Genauigkeit kann variieren. Hier beschreibe ich, wie wir die Gesichtserkennung mit Deep Learning durchführen.

Lassen Sie uns nun verstehen, wie wir Gesichter mit Deep Learning erkennen. Wir verwenden die Gesichtseinbettung, bei der jedes Gesicht in einen Vektor umgewandelt wird, und diese Technik wird tiefes metrisches Lernen genannt. Zum besseren Verständnis möchte ich diesen Prozess in drei einfache Schritte unterteilen:

Gesichtserkennung: Die allererste Aufgabe, die wir durchführen, ist die Erkennung von Gesichtern im Bild- oder Videostrom. Da wir nun die genaue Position/Koordinaten des Gesichts kennen, extrahieren wir dieses Gesicht für die weitere Verarbeitung.

Merkmalsextraktion: Nachdem wir nun das Gesicht aus dem Bild herausgeschnitten haben, extrahieren wir Merkmale daraus. Hier werden wir Gesichtseinbettungen verwenden, um die Merkmale aus dem Gesicht zu extrahieren. Ein neuronales Netz nimmt ein Bild des Gesichts einer Person als Eingabe und gibt einen Vektor aus, der die wichtigsten Merkmale eines Gesichts darstellt. Beim maschinellen Lernen wird dieser Vektor als Einbettung bezeichnet, und daher nennen wir diesen Vektor auch Gesichtseinbettung. Wie hilft dies nun bei der Erkennung von Gesichtern verschiedener Personen?

Während des Trainings des neuronalen Netzes lernt das Netz, ähnliche Vektoren für Gesichter auszugeben, die ähnlich aussehen. Wenn ich z.B. mehrere Bilder von Gesichtern in verschiedenen Zeiträumen habe, können sich natürlich einige Merkmale meines Gesichts ändern, aber nicht in großem Ausmaß. In diesem Fall sind die den Gesichtern zugeordneten Vektoren ähnlich, oder kurz gesagt, sie liegen im Vektorraum sehr nahe beieinander. Schauen Sie sich das folgende Diagramm an, um eine ungefähre Vorstellung davon zu bekommen:

Nach dem Training des Netzes lernt dieses nun, Vektoren auszugeben, die für Gesichter derselben Person (die ähnlich aussehen) näher beieinander liegen (ähnlich sind). Die obigen Vektoren werden nun umgewandelt in:

Wir werden ein solches Netz hier nicht trainieren, da es eine beträchtliche Menge an Daten und Rechenleistung erfordert, um solche Netze zu trainieren. Wir werden ein vortrainiertes Netz verwenden, das von Davis King anhand eines Datensatzes von ~3 Millionen Bildern trainiert wurde. Das Netzwerk gibt einen Vektor von 128 Zahlen aus, die die wichtigsten Merkmale eines Gesichts darstellen.

Nachdem wir nun wissen, wie dieses Netzwerk funktioniert, wollen wir uns ansehen, wie wir dieses Netzwerk auf unsere eigenen Daten anwenden. Wir übergeben alle Bilder in unseren Daten an dieses vortrainierte Netz, um die jeweiligen Einbettungen zu erhalten und speichern diese Einbettungen in einer Datei für den nächsten Schritt.

Gesichter vergleichen: Nun, da wir die Gesichtseinbettungen für jedes Gesicht in unseren Daten in einer Datei gespeichert haben, besteht der nächste Schritt darin, ein neues t-Bild zu erkennen, das nicht in unseren Daten enthalten ist. Der erste Schritt besteht also darin, die Gesichtseinbettung für das Bild mit demselben Netzwerk zu berechnen, das wir oben verwendet haben, und dann diese Einbettung mit den restlichen Einbettungen zu vergleichen, die wir haben. Wir erkennen das Gesicht, wenn die erzeugte Einbettung näher an einer anderen Einbettung liegt oder ihr ähnlich ist, wie unten gezeigt:

Wir haben also zwei Bilder übergeben, eines von Vladimir Putin und eines von George W. Bush. In unserem obigen Beispiel haben wir die Einbettungen für Putin nicht gespeichert, wohl aber die Einbettungen von Bush. Wenn wir also die beiden neuen Einbettungen mit den vorhandenen vergleichen, liegt der Vektor für Bush näher an den anderen Gesichtseinbettungen von Bush, während die Gesichtseinbettungen von Putin nicht näher an den anderen Einbettungen liegen und das Programm ihn daher nicht erkennen kann.

Gesichtserkennung mit Python

In diesem Abschnitt werden wir die Gesichtserkennung mit OpenCV und Python implementieren. Zuerst sehen wir uns an, welche Bibliotheken wir brauchen und wie man sie installiert:

  • OpenCV
  • dlib
  • Gesichtserkennung

OpenCV ist eine Bild- und Videoverarbeitungsbibliothek und wird für die Bild- und Videoanalyse verwendet, wie z.B. für die Gesichtserkennung, das Lesen von Nummernschildern, die Fotobearbeitung, fortgeschrittene robotische Vision, optische Zeichenerkennung und vieles mehr.

Die dlib-Bibliothek, die von Davis King verwaltet wird, enthält unsere Implementierung des „tiefen metrischen Lernens“, das verwendet wird, um unsere Gesichtseinbettungen zu konstruieren, die für den eigentlichen Erkennungsprozess verwendet werden.

Die face_recognition-Bibliothek, die von Adam Geitgey erstellt wurde, umhüllt die Gesichtserkennungsfunktionalität von dlib, und diese Bibliothek ist super einfach zu bedienen und wir werden sie in unserem Code verwenden. Denken Sie daran, zuerst die dlib-Bibliothek zu installieren, bevor Sie face_recognition installieren.

Um OpenCV zu installieren, geben Sie in der Eingabeaufforderung

pip install opencv-python

Ich habe verschiedene Möglichkeiten ausprobiert, dlib unter Windows zu installieren, aber die einfachste von allen ist über Anaconda. Installieren Sie zunächst Anaconda (hier finden Sie eine Anleitung zur Installation) und verwenden Sie dann diesen Befehl in der Eingabeaufforderung:

conda install -c conda-forge dlib

Um face_recognition zu installieren, geben Sie als Nächstes in der Eingabeaufforderung

pip install face_recognition

Nun, da wir alle Abhängigkeiten installiert haben, können wir mit der Programmierung beginnen. Wir müssen drei Dateien erstellen, eine davon nimmt unseren Datensatz und extrahiert die Gesichtseinbettung für jedes Gesicht mit dlib. Als nächstes werden wir diese Einbettungen in einer Datei speichern.

In der nächsten Datei werden wir die Gesichter mit den vorhandenen vergleichen, um Gesichter in Bildern zu erkennen, und als nächstes werden wir dasselbe tun, aber Gesichter in Live-Webcam-Feeds erkennen

Merkmale aus Gesichtern extrahieren

Zuerst müssen Sie einen Datensatz erhalten oder sogar einen eigenen erstellen. Stellen Sie sicher, dass Sie alle Bilder in Ordnern anordnen, wobei jeder Ordner Bilder von nur einer Person enthält.

Nächste speichern Sie den Datensatz in einem Ordner, den Sie auch für die Datei verwenden werden. Hier ist der Code:

Nun, da wir die Einbettung in einer Datei namens „face_enc“ gespeichert haben, können wir sie verwenden, um Gesichter in Bildern oder Live-Videostreams zu erkennen.

Gesichtserkennung im Live-Webcam-Feed

Hier ist das Skript zur Erkennung von Gesichtern in einem Live-Webcam-Feed:

Obwohl wir im obigen Beispiel die Haar-Kaskade zur Erkennung von Gesichtern verwendet haben, kann man auch face_recognition.face_locations verwenden, um ein Gesicht zu erkennen, wie wir es im vorherigen Skript getan haben

Gesichtserkennung in Bildern

Das Skript zur Erkennung und Erkennung von Gesichtern in Bildern ist fast genauso wie das, was Sie oben gesehen haben. Versuchen Sie es selbst, und wenn Sie es nicht können, sehen Sie sich den folgenden Code an:

Ausgabe:

  • Eingabe
  • Ausgabe

Damit sind wir am Ende dieses Artikels angelangt, in dem wir etwas über Gesichtserkennung gelernt haben. Sie können einen kostenlosen Kurs auf Great learning academy über verschiedene Kurse erhalten. Klicken Sie auf das Banner unten, um mehr zu erfahren

Sie können sich auch mit dem PGP-Kurs für künstliche Intelligenz und maschinelles Lernen von Great Learning weiterbilden. Der Kurs bietet Mentorschaft von Branchenführern und Sie werden auch die Möglichkeit haben, in Echtzeit an branchenrelevanten Projekten zu arbeiten.

Weitere Lektüre

  1. Gesichtserkennung mit dem Viola-Jones-Algorithmus
  2. Echtzeit-Gesichtserkennung | Gesichtsmaskenerkennung mit OpenCV
  3. Echtzeit-Objekterkennung mit TensorFlow
  4. YOLO-Objekterkennung mit OpenCV
  5. Objekterkennung in Pytorch | Was ist Objekterkennung?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.