HyperAI-Einführung
Vergessen Sie die unschönen Dinge, es gibt immer noch Leute, die gute Browser entwickeln.
Kürzlich hat eine Gruppe von Ingenieuren eine Gesichtserkennungs-API entwickelt, die im Browser basierend auf dem Kernframework von tensorflow.js ausgeführt werden kann - face-api.js, das nicht nur mehrere Gesichter gleichzeitig erkennen kann,Ermöglichen Sie mehr nicht professionellen KI-Ingenieuren die kostengünstige Nutzung der Gesichtserkennungstechnologie.
Prinzip der Gesichtserkennung
face-api.js ist ein JS-Framework, das auf dem Kern von Tensorflow.js basiert. Es verwendet drei Arten von CNN, um Gesichtserkennung und Gesichtsmerkmalserkennung durchzuführen und so Personen in Bildern zu identifizieren.
Wie die meisten Bilderkennungstechnologien wird diese Technologie implementiert, indem ein Abgleich mit der Datenbank durchgeführt wird, das Bild mit der größten Ähnlichkeit gefunden wird und das Ergebnis ausgegeben wird. face-api.js kann jedoch mehrere Gesichter gleichzeitig in einem Bild erkennen.
Das allgemeine Funktionsprinzip der Gesichtserkennungstechnologie lautet: Ingenieure geben zunächst eine große Anzahl mit Informationen wie Namen markierter Bilder in das System ein, um einen Datentrainingssatz zu erstellen, und verwenden dann die Erkennungsobjekte als Testsatz, um sie mit den Bildern im Trainingssatz zu vergleichen.
Erreicht die Ähnlichkeit zwischen zwei Bildern den Schwellenwert, wird das Ergebnis ausgegeben, andernfalls wird „unbekannt“ ausgegeben.
Das Implementierungsprinzip von face-api.js
Zunächst ist eine Gesichtserkennung erforderlich, d. h. das Einkreisen aller Gesichter im Bild.
face-api.js verwendet den SSD-Algorithmus (Single Shot Multibox Detector) zur Gesichtserkennung. Der SSD-Algorithmus ist eine Methode zur Erkennung mehrerer Ziele, die Zielkategorien direkt erkennen und den Begrenzungsrahmen (allgemein als B-Box bezeichnet) bestimmen kann. Dadurch können die Erkennungsgenauigkeit und die Erkennungsgeschwindigkeit gleichzeitig verbessert werden.
SSD kann als ein auf MobileNetV1 basierendes CNN mit einer zusätzlichen Grenzvorhersageschicht verstanden werden. Das System umkreist zunächst die Gesichtskontur mit einem Begrenzungsrahmen und bewertet sie. Je näher das Bild am Gesicht ist, desto höher ist die Punktzahl, wodurch Bildinhalte ohne Gesichtsbezug herausgefiltert werden.
Um Genauigkeit zu gewährleisten, sollten die in den Testsatz eingegebenen Bilder auf dem Gesicht zentriert sein, daher muss der Begrenzungsrahmen des Gesichts ausgerichtet sein. Zu diesem Zweck verwendet face-api.js ein einfaches CNN, um 68 Orientierungspunkte zu finden und das Gesichtsbild zu bestimmen, und bereitet so den nächsten Schritt der Gesichtserkennung vor.
Beispiel
Durch die Landmarkenpunkte kann das System das Gesichtsbild weiter bestimmen. Die folgenden Abbildungen zeigen die Effekte vor (links) und nach (rechts) der Gesichtsausrichtung.
Diagramm zur Wirkung der Gesichtsausrichtung
Offensichtlich gibt es nach der Ausrichtung weniger Dinge, die nicht mit dem Gesicht in Zusammenhang stehen, was zur Verbesserung der Erkennungsgenauigkeit des Systems beiträgt.
Implementierung der Gesichtserkennung
Nachdem das Gesicht eingekreist ist, beginnt die Gesichtserkennung.
Das Programm gibt die ausgerichteten Gesichter in ein Deep-Learning-Netzwerk zur Gesichtserkennung ein, das auf ResNet-34 Systemarchitektur, Gesichtserkennung durch Dlib-Bibliothek. Mit dieser Technik können Gesichtsmerkmale einem Gesichtsdeskriptor (einem Merkmalsvektor mit 128 Werten) zugeordnet werden. Dieser Vorgang wird häufig als „Gesichtseinbettung“ bezeichnet.
Anschließend vergleicht das Programm die Gesichtsdeskriptoren jedes Bildes mit den Gesichtsdeskriptoren im Trainingssatz und ermittelt anhand eines Schwellenwerts, ob die beiden Gesichter ähnlich sind (für ein Gesichtsbild mit 150 × 150 Pixeln ist ein Schwellenwert von 0,6 angemessener).
Zur Ähnlichkeitsmessung kann die euklidische Distanz (d. h. die euklidische Metrik) verwendet werden, was sehr gut funktioniert. Der tatsächliche Effekt kann im folgenden GIF-Bild beobachtet werden.
Reden ist billig, zeigen Sie mir den Code!
Nachdem wir Ihnen das theoretische Wissen vermittelt haben, ist es an der Zeit, Sie durch den praktischen Prozess zu führen. Als Eingabebild wird die folgende Abbildung verwendet.
Schritt 1: Holen Sie sich das Skript
Sie können das neueste Skript von dist/face-api.js herunterladen:
Es kann auch über NPM bezogen werden:
Schritt 2: Laden des Datenmodells
Modelldateien können als statische Ressourcen von Webanwendungen verwendet oder an anderen Orten bereitgestellt werden. Modelle können durch Angabe von Dateipfaden oder URLs geladen werden.
Angenommen, das Modell befindet sich im Verzeichnis public/models:
Wenn Sie ein bestimmtes Modell laden, dann:
Schritt 3: Holen Sie sich eine vollständige Beschreibung
Als Eingabe für das Netzwerk können HTML-Bilder, Canvas oder Videos verwendet werden. Hier ist eine vollständige Beschreibung zum Abrufen des Eingabebilds, d. h. aller Gesichter:
Sie können die Gesichtsposition und -merkmale auch selbst auswählen:
Sie können das Ergebnis auch visualisieren, indem Sie einen Rahmen über HTML-Canvas anzeigen:
Die Gesichtszüge sind unten dargestellt:
Jetzt können wir die Position und die Deskriptoren jedes Gesichts im Eingabebild berechnen, die als Referenzdaten dienen.
Der nächste Schritt besteht darin, die URL des Bildes zu erhalten und zu verwenden faceapi.bufferToImage Erstellen Sie ein HTML-Bildelement:
Suchen Sie für jedes Bild das Gesicht und berechnen Sie den Deskriptor:
Iterieren Sie dann über die Gesichtsdeskriptoren des Eingabebilds und suchen Sie den ähnlichsten Deskriptor in den Referenzdaten:
Ermitteln Sie mithilfe der euklidischen Metrik die beste Übereinstimmung für jedes Gesicht im Eingabebild und zeigen Sie den Begrenzungsrahmen und seine Beschriftung in einer HTML-Leinwand an:
Dies ist der gesamte Prozess der Gesichtserkennung durch face-api.js. Ist es nicht ganz einfach?Interessierte Freunde können es gerne ausprobieren und uns gerne ihre Versuchsergebnisse und Erfahrungen zukommen lassen.