Gesichtererkennung und Stapelverarbeitung

Profiler

Grünschnabel
Hallo Leute,
ich hab folgendes Problem: Ich habe einige hundert Fotos, die Teil einer Zeitschrift werden sollen, nur ist das Problem, dass diese Fotos keinerlei Format oder ähnliches gemeinsam haben, sie zeigen aber alle eine einzelne Person. Nun muss ich diesen Haufen an Bildern irgendwie so verarbeiten, dass ich am Ende einen anderen Haufen Bilder habe, dessen Fotos alle das selbe Format haben, bei denen das Gesicht zentriert ist und die Abmessungen angeglichen sind.

Ich hatte die Idee dazu Photoshop und dessen Stapelverabeitungs- Skriptfunktion in Verbindung mit der Gesichtserkennung zu nutzen aber ich habe keine Ahnung wie ich das realisieren könnte. Eine Suche bei Google hat mich auch nicht wirklich weiter gebracht und da wollte ich mal fragen, ob hier jemand 'ne Idee hat.
Mir steht CS6 zu Verfügung aber wenn jemand ein ganz anderes Programm/Plug-In kennt, das die Aufgabe lösen kann, ist das auch kein Problem.

Danke schonmal im voraus,
Profiler.
 

chmee

verstaubtes inventar
Premium-User
..Photoshop und dessen Stapelverabeitungs- Skriptfunktion in Verbindung mit der Gesichtserkennung..
Ich hab mir mal diese Face Detection in PS6 in einem Youtubevideo angeschaut.. Es Face Detection zu nennen, ist schon sehr wage..

ABER -> Das wäre zu scripten - wo ich jetzt hoffe, dass Du schon mal programmiert hast, im besten Fall sogar die Scripting-Engine von Adobe benutzt, sie basiert zB auf Javascript.. Nun denn, nehmen wir an, dieser FaceDetection-Checkbutton erfüllt wirklich seinen Zweck - und findet -zumindest grob- das Gesicht in einem Bild, dann hättest Du eine Selektion, deren Mitte Du herausfinden kannst. Also wären folgende Schritte zu coden um es dann mit der Stapelverarbeitungs-Skripfunktion nutzen zu können:

(1) Erster Durchgang:

(A) Selektion->ColorMode mit Face Detection true und wohl geringer Fuzziness und/oder Range
(B) Von dieser Selektion die Mitte (x/y) nehmen
(C) zum Bildrand messen (subtraktion), um herauszufinden, welches Bild am wenigsten Bildmaterial bereitstellt - dieses Bild ist dann die Maßgabe für den Beschnitt im zweiten Durchgang
(D) Mittelpunkt und Entfernung zum Rand in Array mit Dateinamen speichern)

(E) Extremwert für den Beschnitt herausfinden (hab ich in C schon beschrieben) - das kann man in einer eigenen Array-Schleife machen oder in Durchgang 1 gleichzeitig durchführen

(2) Zweiter Durchgang:

(F) anhand der Extrem-Werte aus E den Beschnitt für jedes Bild setzen und es beschneiden.

Voilá

mfg chmee
 

Martin Schaefer

Administrator
Ziemlich coole Open Source Software für sowas: SNFaceCrop

Kann Gesichter in Fotos erkennen und als separate Bilder in separatem Ordner abspeichern
Kann als Batch-Prozess alle Bilder in einem bestimmten Ordner durcharbeiten (via Kommandozeile)
Man kann die erkannten Gesichter automatisch um beliebigen Betrag horizontal und vertikal erweitern. Zum Beispiel ca. 100% horizontal und 150% vertikal, um ungefähr Passbild-Format zu bekommen.

Schau es dir einfach mal an. Ich finde es schon recht gut gemacht, auch wenn es manchmal mehrere Gesichter erkennt, wo nur eines vorhanden ist. Aber nachdem man einen ganzen Stapel Bilder verarbeitet hat, schmeißt man einfach den evtl. vorhandenen Müll weg und macht dann mit dem Rest die Feinarbeit (z.B. Größenangleichung) via Stapelverarbeitung in Photoshop. :)

http://deteksiwajah.blogspot.de/

Gruß
Martin
 

Profiler

Grünschnabel
Danke Leute für die Antworten!

@chmee: Die Videos hab ich auch bei Youtube gefunden, aber die Methode scheint mir sehr ineffizient zu sein, besonders weil ja je nach Foto die Gesichtstönung und Teile des Hintergrunds übereinstimmen könnten und so bei Berechnung des Mittelpunkts sofort riesige Abweichungen hervorbringt. Mich wundert aber, dass Photoshop als eines der bekanntesten Produkte in dem Bereich keine Funktion dafür besitzt, vor allem weil mittlerweile ja jeder Digital- und Kompaktkamera ein solches Feature hat. Trotzdem danke!

@Martin Schaefer: Danke für den Tip, ich werd mir das ganze mal anschauen und ausprobieren. Hört sich sehr praktikabel und effizient an.

Profiler.
 

chmee

verstaubtes inventar
Premium-User
Das machen wir doch gerne. Soweit ich mich erinnere, hat Photoshop Elements so etwas drin.

Tatsächlich hat Photoshop nunmal dafür (noch) nicht wirklich ein Anliegen, und OpenCV steckt auch nicht drin :) Aber mir fällt grad ein, vielleicht (A) gibt es eine Lib, die OpenCV in Photoshop einbindet und (B) könnte man in OpenCV (Stichwort Haar oder Cascade) die Bilddaten ermitteln und jene Bilddaten in Photoshop dann umsetzen lassen. ..ist aber alles nerdiges Gequatsche.. (C) uU lässt sich der Kernel Accelerator dafür mißbrauchen - OpenCV in HLSL quasi..

mfg chmee
 

Profiler

Grünschnabel
Ja, du hast Recht, aber ich glaube die Funktion in Photoshop Elements konnte man nicht richtig zur Bildverarbeitung nutzen, sondern eher um Personen zu markieren. Ich kann mich aber auch täuschen :)
Es wäre super, wenn sich jemand die Mühe machen würde, Photoshop mit der OpenCV Library, die ja auch für das oben genannte Programm ,"SNFaceCrop", genutzt wird zu verbinden, aber ich glaube da hab ich zu wenig Erfahrung mit den jeweiligen Programmiersprachen.

Ein anderes Problem, das mir mit "SNFaceCrop" Schwierigkeiten bereitet ist, dass man in den Optionen zwar den prozentualen Wert der Maske um das Gesicht, die später als eigene Datei exportiert wird, festlegen kann, aber keinen Absoluten. Das führt zu dem Problem, dass zwar alle Gesichter gleich groß sind, aber die Bilder verschiedene Abmessungen haben und genau das hilft mir nicht.

Es wäre echt super, wenn jemand da noch ne gute Idee zu hätte. Ich werd mir den Sourcecode mal anschauen, aber ohne Garantie, das ich ihn verstehe :D

Danke nochmal für eure Hilfe,
Profiler.
 

Martin Schaefer

Administrator
... Das führt zu dem Problem, dass zwar alle Gesichter gleich groß sind, aber die Bilder verschiedene Abmessungen haben und genau das hilft mir nicht.

Deshalb schrieb ich, dass du dann die Feinarbeit z.B. mit Photoshop und dessen Aktionen und Stapelverarbeitung machen kannst. Dort kannst du ja dann alle Bilder auf identische Dokumentgröße skalieren und croppen.

Gruß
Martin