Gesichtserkennung zum Ausprobieren: Das von Intel angestoßene OpenCV holt die Technik auf den eigenen Rechner. Dieser Artikel erläutert, wie sich das SDK in eigenen Programmcode einbinden lässt und wie es sich im Vergleich mit kostenpflichtigen Lösungen schlägt.
Die Computer-basierte Gesichtserkennung ist eine junge Wissenschaft. Die Forschung begann erst in den 90er Jahren. Das Militär der Vereinigten Staaten trieb die Entwicklung voran. Seit der Jahrtausendwende gibt es auch von der militärischen Förderung unabhängige Gerichterkennungssysteme, kommerzielle Hersteller bieten sie als Bestandteil von Sicherheitslösungen an. Zivile Forschergruppen wetteifern weltweit miteinander. Für den Vergleich gibt es bereits standardisierte Testszenarien.
Populär
Vor eineinhalb Jahren tauchte Gesichtserkennung auch in einer populären Anwendung auf. Google baute in die Bildverarbeitungssoftware Picasa eine Funktion ein, die Personenfotos herausfiltert. Auch die französische Suchmaschine Exalead bietet seit Mitte Mai 2007 eine ähnliche Funktion. Die Technologie dafür stammt aus der Kooperation mit deutschen Firmen und Universitäten. Auch die Kameras mancher Flughäfen, etwa in Boston, setzen bei der Überwachung fragwürdiger Personen bereits auf Computer-basierte Gesichterkennung. Ziel ist es, in einer Datenbank gespeicherte, als gefährlich eingestufte Personen automatisch zu erkennen.
Ausprobieren
Der Markt für SDKs zur Gesichtserkennung und -verarbeitung ist unübersichtlich, die zahlreichen verfügbaren Produkte lassen sich oft nur bedingt vergleichen. Viele spezialisieren sich auf reine Erkennung oder Verarbeitung der Daten, andere zielen nur auf spezielle Segmente ab, zum Beispiel den Einsatz in elektronischen Zugangssystemen. Dieser Artikel vergleicht mit OpenCV, Verilook und FaceVACS drei SDKs, die das gesamte Spektrum der Gesichtlokalisierung und -erkennung abdecken (siehe Kasten “Steckbriefe”).
|
Steckbriefe |
|---|
|
Intel veröffentlichte OpenCV [1] Mitte 2000 unter dem Namen “Opensource Computer Vision Library”. Es ist die einzige Open-Source- und kostenlose Software unter den vorgestellten SDKs. OpenCV ist eine umfangreiche Sammlung von Echtzeit-Bildverarbeitungsroutinen. Für OpenCV gibt es Wrapper, mit denen sich das SDK außer aus C und C++ auch aus Python, PHP heraus ansprechen lässt. Ein Eclipse-Plugin erleichtert die Entwicklung, eine Yahoo-Gruppe leistet Support [2]. VerilookDie Lizenzkosten für das Verilook-SDK des Herstellers Neurotechnologija aus Vilnius in Litauen beginnen bei 340 Euro für die Standard-Edition. Für jede verkaufte Anwendung ist eine Einzelplatz-Lizenz erforderlich, die 45 Euro kostet, jedoch bei größeren Stückzahlen günstiger ist. Für die so genannte Enterprise-Lizenz für 20000 Euro oder mehr sind keine Einzelplatz-Lizenzen erforderlich. Zum Testen steht eine 30-Tage-Version zur Verfügung. FaceVACSFaceVACS [3] ist ein SDK des Dresdner Herstellers Cognitec Systems GmbH und sogar international erfolgreich. Auf seiner Webseite listet das Unternehmen außer dem Bundeskriminalamt und deutschen Unternehmen wie Siemens und T-Systems auch den australischen Zoll und das australische Außenministerium als Kunden. FaceVACS veröffentlicht keine Preise für das SDK. Auch eine nicht an ein konkretes Projekt gebundene Anfrage wollte der Hersteller nicht beantworten. |
Wer auf dem eigenen Rechner testen möchte, wie zuverlässig ein State-of-the-Art-Gesichtserkennungssystem arbeitet, kann zum frei verfügbaren SDK OpenCV [1] greifen, Intel stellte es Mitte 2000 der Open-Source-Community zur Verfügung. Für die in C und C++ geschriebene Entwicklungsumgebung gibt es Wrapper für PHP und Python. Auch der Zugriff aus Java und unter Windows aus der Microsoft-Net-Umgebung heraus ist möglich, allerdings weniger performant. Tabelle 1 vergleicht die Leistungsfähigkeit des freien Framework mit kommerziellen Systemen. Vom Verilook-SDK gibt es eine 30-Tage-Testversion.
|
Tabelle 1: |
|---|
Hinter den Kulissen
Bevor die Software Bilder nach bestimmten Merkmalen mit Einträgen aus einer Datenbank vergleichen kann, muss sie die Bildbereiche isolieren, bei denen es sich um Gesichter handelt. Abbildung 1 zeigt das Ergebnis, das OpenCV in der Standardeinstellung liefert. Das Ergebnis enthält zwei False Positives. Die Erkennung lässt sich jedoch verbessern, wenn der Benutzer die Einstellungen auf die Auflösung, Art und Qualität des Bildes sowie die Beleuchtung abstimmt.
Die in einer Gesichterkennungssoftware genutzten Algorithmen liefern je nach Bild unterschiedlich gute Ergebnisse. Die Erkennungssysteme kombinieren sie mit Hilfe von statistischen Methoden, um eine Gesamtaussage über ein als Bitmap vorliegendes Bild zu treffen.
Im Fokus
Gesichtslokalisierung ist eine Voraussetzung für Zugangskontrollsysteme. Kennt die Software die Position des Gesichts in den aufgezeichneten Bildern, kann sie die Kamera nachführen. Über die SDKs lässt sich die benötigte Gesichtslokalisierung in die Monitoring-Software einbinden. Denkbar wäre auch der Einsatz in Bildbearbeitungssoftware, die zum Beispiel automatisch einen geeigneten Ausschnitt für Portraitfotos wählt.
Soweit sich aus den Herstellerangaben erkennen lässt, arbeiten OpenCV und die kommerziellen Entwicklungsumgebungen beim Lokalisieren der Gesichter weitgehend mit den gleichen Algorithmen: Expectation-Maximization-Algorithmen [4] erkennen Zusammenballungen ähnlicher Bilddaten und trennen so die einzelnen Objekte auf einem Foto. Neuronale Netzwerke erkennen Muster, auf die sie trainiert sind [5]. Sie bilden das Nervensystem von Lebewesen nach, bei dem sich Erfahrungen in den Gewichtungen bestimmter Nervenverbindungen niederschlagen. Nach dem Training reagiert das Netz auf eine Eingangswerte- Matrix mit den gewünschten Ausgangswerten und extrapoliert bei Werten, die im Training nicht vorkamen.
Stützvektor-Maschinen grenzen dagegen ähnliche Bildbereiche so ein, dass um sie herum möglichst viel Platz zum nächsten Bereich bleibt. Boosting-Algorithmen kombinieren die unterschiedlichen Verfahren, sodass sich ihre Wirkungen verstärken. Keiner der Rechenschritte bietet für sich genommen eine ausreichende Erkennungsleistung. Erst die Kombination dieser und vieler weiterer Algorithmen sorgt für ausreichende Trennschärfe.
FaceVACS startet zum Beispiel die Erkennung von Gesichtern mit einer Kategorisierung auf Basis eines Trainings mit anderen Fotos. Ein Expectation-Maximization-Schritt verfeinert die Erkennung, ein Bayes-Klassifikator ordnet die erkannten Objekte schließlich Klassen zu.
Größere technische Unterschiede gibt es zwischen den SDKs bei der Identifizierung der im Bild erkannten Gesichter, also der Zuordnung zu bestehenden Datensätzen oder der Wiedererkennung mehrfach vorkommender Bilder. Hier setzt OpenCV anders als die kommerzielle Konkurrenz noch verstärkt auf einfache geometrische Verfahren. Die Software erschließt die Identität von Gesichtern dabei aus Größen wie dem Augenabstand oder dem Größenverhältnis von Mund und Nase. Vorteil dieser Verfahren ist ihre höhere Performance.
E OpenCV
Die “Opensource Computer Vision Library” basiert auf einem Anfang 1999 initiierten Intel-Projekt, dessen Hauptziel die Entwicklung einer Mensch-Computer-Schnittstelle war. Im Juni 2006 veröffentlichte der Konzern den bisher entstanden Quellcode unter einer BSD-artigen Lizenz, die eine kostenlose Nutzung sowohl für Forschungseinrichtungen als auch für kommerzielle Software-Entwickler gestattet. Das SDK kommt immer wieder in Wettbewerben wie dem vom amerikanischen Verteidigungsministerium ausgetragenen DARPA Grand Challenge [6] zum Einsatz, bei dem Computer Kraftfahrzeuge autonom auf der Basis von Kamerabildern über festgelegte Strecken steuern.
Modular und stabil
Inzwischen liegt die Echtzeit-Bildverarbeitungs-Bibliothek, deren Kern etwa 20 MByte groß ist, in Version 1.0 vor. Herausragendstes Merkmal ist ihr modularer Aufbau: Die Software stellt über 500 Algorithmen zur Bildverarbeitung in Echtzeit zur Verfügung. Die Gesichts-Lokalisierung und -Erkennung, ein häufig genutzter, aber keineswegs der einzige Einsatzbereich des SDK, setzt auf die – nicht auf Gesichter beschränkte – Objekterkennung auf.
Die Bandbreite der in OpenCV enthaltenen Algorithmen reicht von einfachen Bildmanipulationen über Kantenerkennung bis zur Verfolgung von Bewegungen. Funktionen zur Kalibrierung angeschlossener Kameras sind ebenso vorhanden wie vorgefertigte GUI-Elemente, ein Mathematik-Framework löst Probleme der linearen Algebra oder rechnet mit komplexen dynamischen Datenstrukturen (Vektormathematik). Die große und aktive Entwickler-Community sorgt dafür, dass OpenCV sehr schnell und stabil arbeitet. Die Linux-Version setzt eine Reihe von Grafikbibliotheken wie die Libpng, ein aktuelles GTK und Python 2.3 oder neuer voraus.
OpenCV besteht aus drei Paketen: Der Kern Cxcore stellt den größten Teil der Funktionalität bereit. In Cvaux finden sich experimentelle Erweiterungen, die die Tests der Kernmodule noch nicht absolviert haben. Stabilität und Qualität der hier enthalten Algorithmen schwanken stark, der Entwickler muss sie im Einzelfall prüfen. Das Modul High GUI bietet Funktionen zur Interaktion mit grafischen Oberflächen. Es enthält Funktionen für Grafik-Output und überwacht Maus- und Tastatur-Interaktionen.
Das Handbuch [7] erläutert, wie sich OpenCV-basierte Anwendungen komfortabel mit der Eclipse-IDE erstellen lassen (Abbildung 1). Sogar ein speziell hierfür entwickeltes Eclipse-Plugin gibt es. Support bietet eine Yahoo-Gruppe [2].
E Verilook
Der in Vilnius beheimatete litauische Hersteller Neurotechnologija beschäftigt sich seit Ende der 90er Jahre mit der Umsetzung biometrischer Verfahren auf dem Computer und mit Techniken der künstlichen Intelligenz. Die aktuelle Version 3.0 seiner Gesichtserkennungs-Software Verilook ist wie OpenCV für Linux, Windows und Mac OS verfügbar. Unter Linux lässt sich das SDK allerdings nur aus C/C++ einbinden. Die Linux-Version setzt auf das Video4Linux-Framework auf, die Mac-OS-Version basiert auf Quicktime, die Windows-Variante benutzt GDI+. Die Software begnügt sich mit einem 1-MHz-Prozessor.
Spezialist
Anders als OpenCV beherrscht Verilook ausschließlich Gesichtserkennung. Die Stärken seiner Software sieht der Hersteller in der Schnelligkeit und Zuverlässigkeit. Tatsächlich ist die Software schneller als OpenCV, sie lokalisiert Gesichter in weniger als 0,3 Sekunden. Bei der simultanen Verarbeitung mehrerer Bilder ergeben sich Durchsatzraten von bis zu 10000 Gesichtern pro Sekunde. Der Hersteller veröffentlicht regelmäßig die Ergebnisse von Test mit branchenüblich standardisierten Bilddaten [8].
Die Standardtests erlauben den Einsatz von Verilook in zertifizierten Umgebungen. Die Software eignet sich aufgrund der hohen Verarbeitungsgeschwindigkeit besonders für Zugangskontrollsysteme. Verilook setzt allerdings Bilddaten mit einer Auflösung von mindesten 640 mal 480 Pixel voraus, bei niedrigeren Auflösungen sinkt die Erkennungsqualität schnell ab. Wie OpenCV verarbeitet auch Verilook ausschließlich zweidimensionale Bilddaten.
E FaceVACS
Im Gegensatz zu OpenCV und Verilook kann FaceVACS des Dresdner Herstellers Cognitec Systems [9] auch mit dreidimensionalen Bilddaten umgehen. Cognitec Systems ist ein deutscher Anbieter, der sich auch auf dem internationalen Markt etablieren konnte: Zum Beispiel setzt der Flughafen Sydney seit Februar 2003 mit diesem SDK erstellte Software ein, um die Identität von Personen beim Grenzübertritt in der Passkontrolle automatisiert zu überprüfen.
Der Hersteller nennt als Systemanforderungen einen Prozessor mit mindestens 1,6 GHz, externe Bibliotheken benötigt die Software nicht. Das SDK steht für Windows und Linux zur Verfügung. Unter Linux lässt es sich jedoch ausschließlich mit C undC++nutzen.
Im Vergleich mit OpenCV und Verilook bietet FaceVACS einige gewichtige Vorteile: Es unterstützt im Bereich Biometrie gängige Standards wie die Ausgabeformate ISO Token Frontal und ISO Full Frontal. Es eignet sich daher noch eher als Verilook für sensible, zertifizierbare Umgebungen. Die Dokumentation durch den Hersteller ist exzellent, der Support arbeitet sehr schnell, eine Testanfrage per E-Mail beantwortete er innerhalb von vier Stunden.
Wie OpenCV und Verilook bietet FaceVACS Funktionen zur Lokalisierung und zum Erkennen und Klassifizieren von Gesichtern. Hinzu kommen noch Funktionen wie die Erkennung von Personen anhand der Augen oder eine Bestimmung des Geschlechts des analysierten Gesichts. Diese Aufgaben lassen sich mit den anderen SDKs nicht oder nur mit großem Aufwand realisieren.
Die richtige Verpackung
Alle drei vorgestellten SDKs legen den Schwerpunkt auf die Entwicklung in C/C++ oder unterstützen unter Linux ausschließlich C und C++. Für das freie OpenCV gibt es jedoch Wrapper für Java und einige Skriptsprachen wie Python oder PHP. OpenCV liefert sogar schon Beispielanwendungen in Python mit, die wertvolle Hilfestellungen für eigene Anwendungen bieten.
Der PHP-Wrapper [10] steht auf einer japanischen Seite zum Download bereit. Zwar ist die Anleitung für die Installation ebenfalls auf Japanisch, die darin enthalten Kommandozeilenaufrufe lassen sich jedoch erkennen und reichen aus, um die Software zu installieren. Mit Hilfe der mitgelieferten PECL-Konfigurationsdatei klinkt sich die Erweiterung direkt in den PHP-Stack ein, sodass sich das OpenCV-Framework nach der Installation bequem über PHP-Funktionen ansprechen lässt.
Durch die direkte Integration in PHP ist die Ausführungsgeschwindigkeit sehr gut. Für eine zügige Verarbeitung von Farbbildern ist es jedoch ratsam, sie vor der Übergabe an OpenCV in Graustufen umzuwandeln. Eine in den meisten Linux-Distributionen enthaltene PHP-Extension, die die Grafikbibliothek GD [11] in PHP zur Verfügung stellt, erledigt diese Aufgabe ohne großen Aufwand für den Entwickler.
Einzeiler
Der eigentliche Aufruf von OpenCV aus PHP heraus ist einfach: Die Funktion »facedetect()« in Listing 1 (Zeile 5) liefert ein Array zurück, das die Lage der erkannten Gesichter im Bild enthält. Die »foreach«-Schleife ab Zeile 8 iteriert über das Array und zeichnet eine Ellipse um sämtliche erkannte Bilder (Abbildung 2). Die Konfigurationsdatei »frontal.xml« ist im OpenCV-SDK enthalten. In ihr stehen die Standardeinstellungen für das Erkennen von direkt in die Kamera blickenden Gesichtern.
Wer OpenCV oder die anderen Gesichts-Erkennungssysteme in Java-Programme einbinden möchte, kann dafür das Java Native Interface nutzen, das die C-Funktionen der SDKs indirekt anspricht. Stabile Wrapper, die diese Funktionen direkt ansprechen, gibt es bisher noch nicht. Die Performance beim Einsatz des Java Native Interface ist wesentlich schlechter als bei Wrappern, die direkt die Funktion der SDKs kapseln. Besonders bei Echtzeitanwendungen fällt der Overhead deutlich ins Gewicht
|
Listing 1: OpenCV in |
|---|
01 <?php
02 header("Content-type: image/jpeg");
03 $config = "frontal.xml";
04 $picture = "Pfad/zum/Bild.jpeg";
05 $faces = facedetect($picture, $config, 0);
06 $image = imagecreatefromjpeg($picture);
07 $color = imagecolorallocate($image, 255, 0, 0);
08 foreach($faces as $face) {
09 $width = $face["width"];
10 $height = $face["height"];
11 $x = $face["x"] + ($width / 2);
12 $y = $face["y"] + ($height / 2);
13 imageellipse($image, $x, $y, $width, $height, $color);
14 }
15 imagejpeg($image);
16 ?>
|

Abbildung 2: Über das Ziel hinausgeschossen: OpenCV erkennt zwar das Gesicht auf dem Foto, deutet aber fälschlicherweise weitere Bildbereiche als Gesicht. (Foto: Regierungonline/Plambeck)
Fazit
Die Technik der Computer-Gesichtserkennung ist inzwischen so weit ausgereift, dass sie für den Einsatz in der Praxis in Frage kommt. Überwachungssysteme erkennen Gesichter von Personen entweder vollautomatisch oder richten zumindest die Kamera so aus, dass sie einem Beobachter die Erkennung erleichtern. Viele Hersteller bieten ihre SDKs auch für Linux an.
Das von Intel angestoßene Projekt OpenCV steht unter einer freien Lizenz, unter der es sich sowohl für Open-Source-Projekte als auch kommerzielle Software lizenzkostenfrei nutzen lässt. OpenCV geht über ein reines Gesichtserkennungs-SDK hinaus: Es bietet eine Vielzahl von Funktion und Algorithmen, die sich für die Gesichtserkennung nutzen lassen. Einerseits wird das System dadurch flexibel, andererseits lässt es sich nicht so komfortabel in eigene Anwendungen einbinden wie die kommerzielle Konkurrenz.
Was den Komfort des API angeht, schneidet Verilook am besten ab. Auch die moderaten Lizenzkosten und eine gute Leistung und Geschwindigkeit sprechen für das System. Für das Gesichtserkennungs-SDK Verilook steht eine 30-Tage-Testversion zum Download bereit [12].
FaceVACS zeichnet sich im Vergleich durch seine Fähigkeit aus, 3D-Bilddaten zu verarbeiten. Es erreichte im Test die beste Identifizierung von bekannten Gesichtern und bietet Zusatzfunktionen wie die Erkennung des Geschlechts.
Kein Gesichts-Erkennungssystem arbeitet bisher hundertprozentig oder auch nur nahezu fehlerfrei. Für Funktionen wie eine Erkennung und automatische Anmeldung des Benutzers, den die Webcam des Rechners einfängt, taugt Computer-basierte Gesichtserkennung daher gegenwärtig noch nicht. Als Zuganskontrolle, die den klassischen Schlüssel oder die Magnetkarte ablösen könnte, arbeitet noch keines der existierenden Systeme zuverlässig genug. (pkr)
|
Infos |
|---|
|
[1] OpenCV: [http://www.intel.com/technology/computing/opencv] [2] Yahoo-Gruppe zu OpenCV: [http://www.yahoogroups.com/group/OpenCV] [3] FaceVACS: [http://www.cognitec-systems.de/products-sdk.htm] [4] EM-Algorithmus: [http://en.wikipedia.org/wiki/Expectation-maximization_algorithm] [5] Andreas Romeyke, “Neuronale Netze mit der Libfann”: Linux-Magazin 07/07, S. 106 [6] DARPA Challenge: [http://www.darpa.mil/grandchallenge] [7] OpenCV-Handbuch: [http://www.cs.unc.edu/Research/stc/FAQs/OpenCV/OpenCVReferenceManual.pdf] [8] Verilook-Standard-Tests: [http://www.neurotechnologija.com/verilook.html#tests] [9] Cognitec Systems: [http://www.cognitec-systems.de] [10] PHP-Wrapper für OpenCV: [http://www.netflowers.co.jp/face_detect/face_detect-0.0.1.tar.gz] [11] GD-Grafikbibliothek: [http://www.boutell.com/gd] [12] Verilook-Testversion: [http://www.neurotechnologija.com/download.html#vl] |
|
Der Autor |
|---|
|
Markus Franz ist Mitgründer und CTO der BF Blogform Search GmbH in Berlin. Er studiert Wirtschaftsinformatik an der Friedrich-Schiller-Universität in Jena. |







