Erkennen eines bestimmten Gesichts in einer Datenbank mit Gesichtsbildern

110

Ich arbeite an einem kleinen Projekt, das die Gesichter von Twitter-Nutzern über ihre Profilbilder einbezieht.

Ein Problem, auf das ich gestoßen bin, ist, dass ein kleiner, aber bedeutender Prozentsatz der Twitter-Benutzer ein Bild von Justin Bieber als Profilbild verwendet, nachdem ich alle Bilder mit Ausnahme von klaren Porträtfotos herausgefiltert habe.

Wie kann ich programmgesteuert erkennen, ob es sich bei einem Bild um ein Bild von Justin Bieber handelt, um es herauszufiltern?

ʞɔıu
quelle
17
Was ist Ihre Entwicklungsplattform? Dies ist in .NET problemlos möglich, da es allen anderen Programmierumgebungen überlegen ist. Rufen Sie einfach die Funktion Page.EradicateBieber () auf. Microsoft hat dieses Bedürfnis vorausgesehen und es uns mit freundlicher Genehmigung in .NET 4.5 zur Verfügung gestellt. (Diejenigen von Ihnen, die ältere Versionen verwenden, müssen warten.) (Das ist natürlich alles
32
Ich glaube, ich kann mit Sicherheit behaupten, dass SO kein [justin-bieber]Tag benötigt.
Skaffman
2
Ich kann mit Sicherheit behaupten, dass die Leute mehr Gegenstimmen für Kommentare und diese Frage ausgeben als für die Option zum Schließen (die, die die Stimmen verdient).
20
Ein Justin Bieber Audio-Filter wäre auch gut

Antworten:

49

Eine bessere Idee ist es, alle Bilder, die im Feed von mehr als einem Benutzer angezeigt werden, in den Papierkorb zu werfen - es ist keine Erkennung erforderlich.

PPPPPP
quelle
2
Ja, legen Sie möglicherweise einen Schwellenwert von 2 bis 4 möglichen Duplikationen fest (um den Fall für Neugeborene zu behandeln), bevor Sie ein Foto ablehnen. Kommt darauf an, was du mit den Fotos machst, denke ich.
Mark Bessey
3
Einfache, elegante Lösung. +1.
Robert Harvey
13
Menschen könnten unterschiedliche Bilder derselben Person verwenden.
Rebecca Chernoff
(+1) bei Rebecca und (-1) @ PPPPPP: Dies verschiebt nur das Problem.
Steffen
4
Sie könnten, aber in den meisten Fällen werden sie aus einem relativ kleinen Pool von Bildern auswählen, also würde es wahrscheinlich immer noch funktionieren. Edge Cases, verdammt noch mal - soweit Sie wissen, ist mein Bild sowieso von meinem Onkel.
Naught101
16

Ich habe das Gefühl, dass http://www.tineye.com/commercial_api die Lösung sein könnte. Wirf das Twitter-Profilbild einfach zu Tineye, um zu prüfen, ob es Bilder (und zugehörige URLs) zurückgibt, die eindeutig als mit diesem kleinen Sack * * verwandt (oder automatisch mit einer einfachen Wortzählungslogik bewertet) werden können .

Simples!

Benjamin Howarth
quelle
1
Google hat kürzlich die Bildersuche angekündigt: youtube.com/watch?v=t99BfDnBZcI Ich weiß nicht, ob es eine API gibt, aber das könnte eine Alternative sein.
Petrichor
11

Da Sie nur nach klaren Porträtfotos filtern können, wird davon ausgegangen, dass Sie über eine Methode zur Feature-Generierung verfügen, mit der die Rohbilder in Features umgewandelt werden, die für das maschinelle Lernen nützlich sind. Wenn dies zutrifft, können Sie versuchen, einen Klassifizierungsalgorithmus zu trainieren (es gibt viele davon: neuronale Netze usw.), indem Sie dem Algorithmus eine Reihe bekannter Bieber-Fotos sowie eine Reihe bekannter Nicht-Bieber zuführen. Sobald Sie das Modell trainiert haben, können Sie damit vorhersagen, ob es sich bei einem neuen Bild um Bieber handelt oder nicht.

Für diese Art des überwachten Lernens müssen Sie Daten haben, bei denen Sie die richtige Antwort kennen (Bieber oder nicht), aber diese könnten wahrscheinlich über eine Google-Bildsuche gefunden werden. Es erfordert auch, dass Sie über die richtigen Funktionen verfügen, und ich weiß nicht genug über die Bildverarbeitung oder Ihren Algorithmus, um zu wissen, ob dies ein wesentlicher Nachteil ist.

Michael McGowan
quelle
2
Leider ist der Schritt der Feature-Generierung sowohl der schwierigste als auch der wichtigste :(.
steffen
@steffen Es gibt einen Vorschlag, dass das OP mit den Gesichtern herumspielt, also haben Sie einen Deskriptor-Generator.
@mpq: Ich habe nicht daran gezweifelt, dass der OP, wenn er nicht über ein Feature pro Pixel verfügt, eine aussagekräftige Aggregationsebene finden muss. Ich habe nicht abgelehnt, ich wollte nur auf die Komplexität hinweisen, die hinter dieser Antwort steckt (was natürlich richtig ist).
steffen
1
Richtig, der Feature-Generierungsschritt ist der schwierige Teil. Ich ging davon aus, dass OP dies tun könnte, da er bereits einen Mechanismus zur Verarbeitung der Bilder hat. Auch wenn es sich dabei möglicherweise nur um nützliche Funktionen zum Erkennen von Gesichtern / nicht von Gesichtern anstelle von Bieber / nicht von Bieber handelt ... es hängt wirklich von den Funktionen ab.
Michael McGowan
7

Sie können eine Methode wie Eigengesichter verwenden, http://en.wikipedia.org/wiki/Eigenface . Im Folgenden finden Sie einen guten Überblick über die Prozedur sowie Links zu verschiedenen Implementierungen.

http://www.pages.drexel.edu/~sis26/Eigenface%20Tutorial.htm

Ab hier ist es üblich, dies in einem Klassifizierungsansatz zu verwenden, ein Modell zu trainieren und dann Fälle vorherzusagen. Sie können dies tun, indem Sie an einer Reihe bekannter Prominenter trainieren. Wenn Sie ein Gesicht von Twitter als eines in Ihrem trainierten Prominentenmodell vorhersagen, entfernen Sie es. Ähnlich dazu http://blog.cordiner.net/2010/12/02/eigenfaces-face-recognition-matlab/

Dies leidet unter ständigen Änderungen. In Kürze wird es einen neuen Justin Bieber geben, der nicht in Ihrem trainierten Modell enthalten ist. Sie können es also nicht vorhersagen. Es gibt auch einen Fall wie Whitney Houston, vielleicht haben Sie noch nie darüber nachgedacht, sie hinzuzufügen, aber vielleicht ist sie für ein paar Wochen ein häufiges Bild aus Respekt und Bewunderung. Sie werden jedoch nicht die Nachteile der oben erwähnten Babybilder haben. Um diese Probleme zu lösen, könnten Sie eher einen hierarchischen Clustering-Ansatz verwenden. Wenn Sie die ersten Gruppen von Clustern entfernen, die sehr nahe beieinander liegen, wenn sie eine bestimmte Unterstützungsstufe erreichen, enthält Ihr erster Cluster 15 Elemente, bevor eine zweite erstellt wird. Jetzt müssen Sie sich keine Gedanken mehr darüber machen, wessen in Ihrem Trainingsmodell Sie sich befinden, aber Sie werden auf das Thema Babybilder stoßen.

Darrelkj
quelle
3

Sie müssen einen Algorithmus anwenden, der erkennt, auf welche Person sich das Bild bezieht. Sie können ein Modell auf der Grundlage verschiedener Porträtbilder berühmter Persönlichkeiten erstellen und Klassifikatoren verwenden, um sicherzustellen, dass sich dieses Bild auf eines Ihrer Datenbankbilder bezieht. Sie müssen einen bestimmten Klassifikator verwenden, der auf verschiedenen Gesichtsparametern basiert, z. B. dem Augenabstand oder anderen Parametern, um die Genauigkeit Ihres Modells zu erhöhen. Es gibt auch eine Hautanalyse. Das Wichtigste ist, einen guten Klassifikator zu bauen. Diese Methode kann anfällig sein.

Es gibt aber auch ein sehr gutes Projekt zur Gesichtserkennung http://opencv-code.com/Opencv_Face_Detection

404Dreamer_ML
quelle
1
AFAIK OpenCV und der verknüpfte Standort nur Gesicht implementieren Erkennung (ehere im Bild ist ein menschliches Gesicht?) , Die in Richtung Gesicht nur einen ersten Schritt ist die Anerkennung (dessen Gesicht ist es?)
f3lix
2

Versuchen Sie es mit ortsabhängigem Hashing .

Xodarap
quelle
1
Einfaches KNN ist nicht sehr gut für Gesichter. Es wurde gezeigt, dass Gesichter auf einer ~ 25-dimensionalen nichtlinearen Mannigfaltigkeit der Bilder liegen.
Bayerj