Coding4Fun: Face Detection & Recognition – Azure & Emgu
avatar

Die HanseVision beschäftigt sich mit einem breiten Spektrum an Technologien. Durch Azure & Office 365 kommen kontinuierlich neue dazu, die in unseren Projekten zum Einsatz kommen.

Für einige interessante Technologien gibt es leider selten Anwendungsfälle im Projektalltag. Als Azure die Cognitive Services im Leistungsumfang mit aufnahm, fand ich das Thema unheimlich spannend und wollte die Gesichtserkennung unbedingt ausprobieren. Jetzt habe ich endlich Zeit gefunden und neben der Azure-Variante auch gleich eine Lösung auf Basis von Emgu CV umgesetzt, um einen direkten Vergleich zu haben.

Emgu CV

Hierbei handelt es sich um einen .Net Wrapper für die Bildverarbeitungssoftware OpenCV, die zusätzlich Algorithmen für maschinelles Sehen enthält.  Für den schnellen Einsatz in Visual Studio gibt es bereits entsprechende Nuget-Pakete (https://www.nuget.org/packages/Emgu.CV/).

image

Wer auch mal gerne mit Emgu CV experimentieren möchte, dem empfehle ich dringend mit diesem Tutorial zu starten: http://ahmedopeyemi.com/main/face-detection-and-recognition-in-c-using-emgucv-3-0-opencv-wrapper-part-1/

Für das Ermitteln und (Wieder)Erkennen von Objekten – wie z.B. Gesichtern – gibt es bei Emgu CV entsprechende vorgefertigte Konstrukte und Beispiele die schnell zum Erfolg führen. Der Größte Vorteil dieser Technologie besteht darin, dass sie beliebig erweitert und für Spezialfälle angepasst werden kann.

Emgu CV funktioniert offline und wird kontinuierlich weiterentwickelt und verbessert. http://www.emgu.com/wiki/index.php/Main_Page

Das Wiedererkennen von Gesichtern fällt in den Bereich “Machine Learning”. Ermittelte, noch unbekannte Gesichter werden mit einem Namen versehen und gemeinsam  in einer Datenbank hinterlegt. Je mehr Bilder zu einem Namen bekannt sind, desto besser können die sogenannten Recognizer (bspw. EigenFaceRecognizer, FisherFaceRecognizer, etc.) neu ermittelte Gesichter namentlich zuordnen.

Experten verbessern die Trefferrate durch Histogrammentzerrung sowie dem Drehen und Spiegeln der vorhandenen Bilder.

image

Wird ein Gesicht nicht oder falsch erkannt, so wird diesem ein Name zugeordnet und in der Datenbank gespeichert. Durch das Trainieren der Maschine (myfaceRecognizer.Train(faceImageArray, faceLabelArray);) mit den gespeicherten Gesichtern verbessert sich die Trefferrate kontinuierlich.

image

Wie bereits erwähnt, sind der Ausbaufähigkeit keine Grenzen gesetzt. Gesichtserkennung ist dabei nur die Spitze des Eisbergs. Es lassen sich auch Funktionalitäten wie das Erkennen von Geschlecht, Stimmung, Alter, Accessoires, etc. realisieren.

Je mehr Features hinzukommen, desto komplexer und aufwändiger wird der Code in der Wartung. Wer ohne größere Programmieraufwände eine bereits sehr leistungsfähige Lösung sucht, sollte sich die Azure Cognitive Services einmal genauer ansehen.

Azure Cognitive Services

Wer im Azure Portal nach Cognitive Services sucht, wird diese schnell finden und genau so schnell ist auch eine Instanz davon angelegt.

image

Ein richtig guter Einstieg in die Entwicklung mit der Face API ist unter https://www.codeproject.com/Articles/1188446/Face-Detection-and-Recognition-with-Azure-Face-API zu finden.

Mit relative wenig Code können die Servicemethoden aufgerufen und die Resultate verarbeitet und angezeigt werden.

image

Ich war überrascht wie gut der Mechanismus auf Anhieb neben der Facial Landmark auch Alter, Geschlecht und Stimmung erkennt.

Wer schnell gute Resultate braucht und nicht auf eine Offlinelösung angewiesen ist, für den ist die Azure Face API genau das richtige!

Fazit

Neben der Online-/Offlinefähigkeit unterscheiden sich die Technologien hauptsächlich im OOTB-Leistungsspektrum. Während bei Emgu CV der Kreativität keine Grenzen gesetzt sind, muss doch relativ viel Entwicklungsaufwand geleistet werden. Die Azure Face API dagegen hat ein fest definiertes Featureset, welches aber sehr komfortabel und schnell einsetzbar ist.

Eines aber haben beide Varianten gemeinsam: Es macht riesen Spaß damit zu arbeiten! Smile

Schreibe einen Kommentar