Artikelformat

Gesichtserkennung in PHP

Man sieht immer wieder, dass verschiedene Fotoapplikationen die Gesichter in Fotos erkennen können und entsprechend hervorheben. Diese Technik gibt es natürlich auch im Web. Neben umfangreichen Bibliotheken wie openCV gibt es auch einfache Möglichkeiten ein Gesicht zu erkennen. Eine schöne Bibliothek für PHP in reinem PHP schauen wir uns heute an.

Die Bibliothek ist komplett in PHP geschrieben und auf github zu finden. Das Herzstück ist die FaceDetector-Klasse. Diese bietet 2 Möglichkeiten das angegebene Bild zu verarbeiten. Entweder wird das Gesicht markiert und die Bilddatei als Jpeg inklusive der Markierung zurückgegeben oder man erhält die Informationen für die Markierung als JSON-String.

Die Analyse wird mit Hilfe gewisser Informationen durchgeführt, die in Form einer dat-Datei mitgeliefert werden. Somit kann man gleich loslegen und mit nur wenigen Zeilen PHP-Code ein nettes Ergebnis erzielen.

$detector = new Face_Detector('detection.dat');
$detector->face_detect('bild.jpg');
$detector->toJpeg();

Das gefundene Gesicht wird immer mit einem Quadrat eingerahmt. Daher sieht der JSON-String auch so aus:

{'x':192, 'y':192, 'w':204.8}

Unschön bei der Klasse sind die vielen Notices, da ImageColorAt anscheinend auf Positionen zugreift, die nicht existieren. Hier müsste noch nachgebessert werden. Dank Github ist dies ja recht leicht zu erledigen.

6 Kommentare

  1. Auf eine Namenskonvention konnte sich der Entwickler wohl auch nicht einigen. Mal CamelCase-Schreibweise, mal immer klein mit Unterstrichen.. Aber gut, das ist nur Kosmetik und schnell geändert.

    Aber schon faszinierend was alles mit PHP möglich ist. Danke für den Tipp!

    Gruß,
    Max

    Antworten
  2. Würde mich mal interessieren wie zuverlässig sowas funktioniert, man müsste mal besonders dunkle Bilder, schwarz/weiß usw. testen. Ich nehme mal an, die lib prüft da auf Farbunterschiede oder?

    Antworten
  3. @Dominik: Ich denke der verwirft die Farben, weil sie keine interessanten Infos beinhalten und arbeitet nur mit Grauwerten. Dann wird er sowas wie Kanten- und Mustererkennung machen.
    Nur geraten, ohne nachzusehen 😉

    Antworten
  4. Martin Kuckert

    21/07/2011 @ 08:10

    Ich habe ein wenig mit eigenen Fotos herum gespielt und die Ergebnisse sind nicht wirklich berauschend. Die Bilder waren nicht sonderlich komplex und trotzdem hat die Klasse nur in einem aus sechs Bildern das Gesicht erkannt. Sehr schöne Spielerei, aber für ein echtes Einsatzszenario ist noch ein wenig Arbeit nötig.

    Antworten
    • Ist durchaus möglich. Vielleicht willst du ja mit openCV und facedetect experimentieren?

  5. Hab auch mal etwas experimentiert… Die Ergebnisse sind eher bescheiden. Zum einen ist das ganze nicht sauber implementiert, es kommen dauernd out-of-boundary-Fehler weil versucht wird auch nicht existierende Pixel zuzugreifen – und zum anderen ist die Erkennung extrem bescheiden. Gerade bei dunkelhäutigen Personen funktioniert es extrem schlecht.
    Aber egal wo man hinschaut, man findet immer nur entweder diese Variante oder OpenCV (wovor ich noch zurückschrecke).

    Antworten

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.