Hallo Community!
Heute hab ich eine theoretische Frage an euch:
Ich arbeite gerade an einem Gesichtserkennungssystem und ein gutes System sollte natürlich auch Face Recognition beinhalten, also das Vergleichen mit einer vorgegebenen Datenbank und das aufgenommene Bild jemandem zuordnen können.
Ich habe mit OpenCV bisher eine Face Detection, also Gesichtserkennung programmiert und nun würde ich gerne wissen, ob man mit einem ganz einfachen Algorithmus (bitte kein Eigenface!) einen Vergleich machen kann.
Ich dachte zuerst an die Methoden cvAbsDiff und cvThreshold. Also will ich über die Pixel der Bilder iterieren und sie somit vergleichen, in welchen Pixeln sie sich unterscheiden und dann das mit der höchsten Übereinstimmung als Resultat ausgeben lassen. Nun hab ich aber nach logischem Überlegen die Befürchtung, dass dies nicht gehen wird, denn sogar bei leichter Veränderung der Umstände sieht jedes Pixel anders aus und kein Bild stimmt somit überein!
Findet ihr diesen Ansatz auch falsch? Was würdet ihr mir für Vergleichsalgorithmen vorschlagen? Eigentlich kommt in der Hierarchie nach der reinen Erkennung ja die Feature Extraction, indem man wie bei Eigenfaces markante Merkmale extrahiert und PCA anwendet, etc. Geht es einfacher ohne diesen Schritt oder nur teilweise?
MFG
Face Recognition
Eigenfaces ist AFAIK der "leichteste" FR-Algorithmus... (und der ist noch extrem schlecht, versuch dich erst gar nicht mit etwas leichterem, das bringt zwangsläufig eine noch schlechtere Erkennung mit sich)
btw: http://pyfaces.blogspot.com/
btw: http://pyfaces.blogspot.com/
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Ein einfacher Bildvergleich wird dich hier nicht weiter bringen. Jede Schwankung der Umgebungsbedingungen und ungenaue Positionierung des Gesichtes wird sofort zu Fehlern führen. Ein sinnvoller Vergleich kann demnach nur mit Merkmalen geführt werden die invariant ggü. den zu erwartenden Schwankungen sind. Das werden sicherlich irgendwelche gesichtsspezifischen Merkmale (Augenabstand?, etc.) sein. Mit denen musst du eine Klassifikation durchführen um das passende Gesicht auszuwählen. Die PCA brauchst du dabei nicht zwingend. Das ist nur ein Vorfarbeitungsschritt vor der Klassifikation. Welches Klassifikationsverfahren dann am besten geeignet ist, kannst du einfach mit einem Programm wie RapidMiner ausprobieren, bevor du dir eine passende Implementierung für Python suchst.
MFG HerrHagen
MFG HerrHagen
So muss es jedenfalls funktionieren wenn du fertig bist
:
http://facemining.pittpatt.com/play_video.php?S1E03

http://facemining.pittpatt.com/play_video.php?S1E03
-
- User
- Beiträge: 108
- Registriert: Sonntag 7. Februar 2010, 14:16
Sehr schön!HerrHagen hat geschrieben:So muss es jedenfalls funktionieren wenn du fertig bist:
http://facemining.pittpatt.com/play_video.php?S1E03
@OpenCV: Willst du Eigenface nicht weil es dir zu "kompliziert" ist oder weil es dir nicht genügend gute Ergebnisse liefert?
Andere Ansätze wären z.B. mit einer bestimmten Art von Fourier-Transfomration, der Wavelet-Transformation (bzw. Gabor-Transformation) möglich:
Siehe:
* http://www.kenteng.com/httpdocs/project ... recog.html
* http://citeseerx.ist.psu.edu/viewdoc/do ... 1&type=pdf
Es gibt sogar eine Python-Bibliothek: http://www.pybytes.com/pywavelets/
Alles in allem aber nicht gerade einfache Kost, mit den Eigenfaces bist du da sicher am schnellsten bei einer Lösung, als wenn man hier anfängt mit anderen Ansätzen rumzuexperimentieren.
//Addendum: Es gibt eine Bild-Suchdatenbank, die o.g. Methode verwendet. Die Bibliothek heißt imgSeek und ist in Python und C++ geschrieben: http://sourceforge.net/projects/imgseek ... 2/download