Blog › «Who is it?» – Moderne Gesichtserkennung analysiert

Leonardo Galli Leonardo Galli

Jeder kennt das Gefühl, ein bekanntes Gesicht zu sehen und doch den Namen dahinter nicht mehr zu kennen. Mit unserer neusten Applikation «Who is it?» gehören solche Situation der Vergangenheit an. Dank modernen Algorithmen erkennt die Applikation in wenigen Millisekunden zuvor gesehen Gesichter und zeigt den Namen sowie ergänzende Informationen dem Nutzer an. Doch wie genau funktionieren diese Algorithmen?

Unsere Gesichtserkennungs-Pipeline ist ähnlich aufgebaut wie bereits bestehende: Zuerst wird in einem Kamerabild nach Gesichtern gesucht, danach werden die gefundenen Gesichter erkannt. Da der Gesichtserkennungsalgorithmus nicht so schnell ist, kann er nicht für jedes Kamerabild ausgeführt werden. Deshalb entwickelten wir einen Algorithmus der gefundenen Gesichter von zwei Kamerabilder korreliert. Dieser wurde der Pipeline hinzugefügt und somit findet die Gesichtserkennung nur einmal pro Gesicht statt. Weiter wurde ein Algorithmus zur 3D Positionierung des Gesichtes verwendet, damit die Informationen direkt neben dem Kopf der erkannten Person angezeigt werden können. Dies wirkt vor allem auf der HoloLens sehr eindrücklich

 

Grafik_Gesichtserkennung

Die Gesichtsverfolgung

Zur Gesichtsverfolgung haben wir den Algorithmus der Standardbibliothek von Microsoft genommen. Dieser ist recht effizient und erstaunlich gut im Verfolgen von Gesichtern mit schon wenigen Pixeln. Da die Standardbibliothek nicht Open Source ist, können wir nicht mit Sicherheit wissen, welcher Algorithmus genau von Microsoft verwendet wird. Es ist aber sehr wahrscheinlich, dass hier sogenannte HOGs verwendet werden. Dazu wird im jetzigen Kamerabild für Gruppen von Pixeln die Richtung Hell zu Dunkel bestimmt (siehe unten). Da nur noch Übergänge vorhanden sind, können somit Gesichter relativ unabhängig von den Lichtverhältnissen bestimmt werden.

leonardo galli vergleich

Leider gibt die Standardbibliothek nur die Rechtecke der Gesichter zurück und nicht ob es sich um das gleiche Gesicht wie beim letzten Kamerabild oder um ein neues handelt. Deshalb entwickelten wir einen Algorithmus der genau dies bestimmt.

Who is it? - Demo - Gesichtserkennung

Korrelieren von gefundenen Gesichtern

Der Algorithmus musste also Rechtecke von gefundenen Gesichtern entweder bestehenden Gesichtern zuordnen oder es als ein Neues markieren. Durch vergleichen der Eckpunkte bestehender und neuer Rechtecke mithilfe ein paar vorgegebener Parameter funktionierte dies innerhalb kurzer Zeit bereits recht gut.

Tracking & 3D Gesichtsverfolgung

Da die Applikation für die HoloLens entwickelt wurde, ist es sehr nützlich, wenn der Name sowie die Rolle neben dem Kopf einer erkannten Person dargestellt werden. Auch hier bietet Microsoft wieder eine Schnittstelle an. Dank dieser können Koordinaten eines Kamerabildes in die wirkliche Welt abgebildet werden. Leider muss man dieser Schnittstelle die Tiefe (sprich Z-Koordinate) selber übergeben. Unser Lösungsansatz dafür war recht pragmatisch: Wir verglichen die Breite des Gesichts in Pixel mit der durchschnittlichen Breite eines Gesichts mit einem Meter Abstand. Dadurch lässt sich eine relativ gut stimmende Distanz errechnen.

Es gab leider noch weitere Komplikationen. Da «Who is it?» mit Unity entwickelt wurde, entpuppte es sich als äusserst schwierig, das Koordinaten System zu bekommen. Das Koordinatensystem wird gebraucht um die Koordinaten abzubilden. Dies mitunter, weil es fast keine Dokumentation zu diesem Thema gibt. Das untere Bild zeigt den Code-Abschnitt, welcher das Koordinatensystem des aktuellen Frames abruft und die vermutete Tiefen-Position des Gesichtes schätzt.
Who is it? - Code - Gesichtserkennung

Das Kernstück: Die Gesichtserkennung

Für die tatsächliche Gesichtserkennung wurde zu Beginn die Microsoft Face API verwendet. Auch hier können wir nicht wissen, wie genau die Algorithmen dahinter funktionieren. Es ist aber sehr wahrscheinlich, dass Microsoft typische moderne Gesichts Erkennungsalgorithmen verwenden. Diese funktionieren wie folgt:

Zuerst werden wieder Gesichter im Bild gesucht. Dies funktioniert genau wie oben beschrieben. Dann werden die wichtigsten Gesichtspunkte bestimmt, wie Nase, Lippen, Augen (Siehe Bild 3). Dank diesen kann das Bild nun so verzerrt werden, als ob die Person gerade in die Kamera schauen würde. Dies erhöht die Genauigkeit des Algorithmus. Nun kommt ein Neuronales Netzwerk zum Einsatz. Diesem wurde zuvor tausende von Gesichtern, zum Teil von der gleichen, zum Teil von unterschiedlichen Person gezeigt. Das Neuronale Netzwerk musste für jedes Gesicht einen 128 Dimensionalen Vektor v finden, so dass v eines Bildes einer Person sehr ähnlich sein sollte zu v eines anderen Bildes der gleichen Person. Gleichzeitig musste v aber auch so unterschiedlich wie möglich sein, wenn das Neuronale Netzwerk zwei Bilder von zwei verschiedenen Personen sieht. Dies wird in der Fachsprache „Embedding“ genannt. Ein 2-Dimensionales Bild mit Millionen von Pixeln wird extrem vereinfacht, so dass nun ganz einfache Suchalgorithmen zum Einsatz kommen können. Denn dieser Vektor v wird nun für jedes Bild, dass der Face API geschickt wird, berechnet und mit den bestehenden Vektoren in der Datenbank abgeglichen.

Schlussgedanken

Die Microsoft API funktioniert mit sehr wenigen Bildern zum Trainieren schon extrem gut. Trotzdem wäre eine Version, welche offline auf einem Gerät laufen kann. aus verschiedenen Gründen sehr wünschenswert. Eine erste solche Version wurde von uns bereits erfolgreich programmiert. Ein detaillierter Blogpost über deren Funktionsweise erscheint demnächst. In der aktuellen Fassung benötigt ein iPad nur 60ms um aus einem Bildausschnitt Gesichter zu verfolgen, geradezustellen und anschliessend die jeweiligen Personen zu erkennen! Leider ist zurzeit der Prozessor der HoloLens noch nicht stark genug um diese Algorithmen auch laufen zu lassen. Es ist aber sehr wahrscheinlich, dass die nächste Version der HoloLens einen Prozessor nur für „Machine Learning“ besitzt. Dann wird es sicher möglich sein auf die Microsoft API zu verzichten. Bis dahin werden wir weiterhin gespannt alle Neuerungen beobachten und unsere eigenen Algorithmen optimieren.

Weitere Informationen

Showcase zu «Who is it?»

«Who is it?»-Showcase

Spannende Referenzprojekte von Cubera

Zum Showcase

Microsoft Face-API

Zur offiziellen Webseite