2009-05-25 17 views
19

Ich bin auf der Suche nach einer robusten Gesichtserkennung Algorithmus/Bibliothek, vorzugsweise in C (C++ ist auch in Ordnung; andere Sprachen kann ich bei Bedarf portieren). Ich habe die Implementierung OpenCV in der Vergangenheit verwendet, aber ich denke nicht, dass es invariant gegenüber der Rotation ist. Muss nicht in Echtzeit sein, aber es sollte auch nicht horrend langsam sein (vielleicht sind ein oder zwei Sekunden pro Foto in Ordnung). Auf der Suche nach hoher Zuverlässigkeit, und nicht viele falsche Positive. Kennt jemand gute Implementierungen?Robuste Gesichtserkennung in C/C++?

+4

@mark: "Sie können es schnell, billig oder genau; Wählen Sie zwei" es sieht ehrlich aus, als ob Sie nach dem Mond fragen. – Tarrant

+5

@Wergan: Ich * habe * nicht schnell und günstig gefragt. Eine genaue Gesichtserkennung kann in weniger als 50 ms durchgeführt werden. Ich sagte, es kann bis etwa 2000 dauern. Das fragt überhaupt nicht viel. – mpen

+1

Mustererkennung ist ein SEHR schwieriges Thema, besonders wenn Sie aus einer Einzelwinkelansicht wie ein Foto arbeiten. Es wird den ganzen Weg getroffen werden: (vernünftig) okay für Fahndungsfotos; (Unmöglich) schwierig für Vollfarb-Crowd-Shots. – slashmais

Antwort

9

Überprüfen Sie diese Seite auf OpenCV Wiki über Gesichtserkennung mit Haar-like features.

@floppydisk: Der gleiche Typ hat eine andere project, die diese Haar-ähnliche Funktionen für Gesichtserkennung implementiert.

Das Konzept ist nicht schwer zu verstehen und Sie könnten es sogar selbst implementieren. Vielleicht ist der schwierigste Teil der Kaskade von verstärkten Klassifizierer errichtet (! Aber OpenCV hat all die leicht implementiert)

Einige andere Methoden, die in Gesichtserkennung verwendet werden können, die unveränderlich gemacht werden können Transformationen affinen umfassen:

1

Das einzige, mit dem ich gearbeitet habe, ist Visionics FaceIt. Es funktionierte ziemlich gut, aber zuletzt wusste ich, war sehr, sehr, sehr weit davon entfernt, frei zu sein (entweder wie im Bier oder als in der Rede).

+1

Sollte erwähnt haben "kostenlos" ist auch gut. FaceIt scheint Gesichtserkennungssoftware zu sein .... Ich suche nach einem Open-Source-Algorithmus. – mpen

5

Sie könnten versuchen, einen Blick auf diese Bibliothek unter:

http://vasc.ri.cmu.edu/NNFaceDetector/

Es in einem der Testfälle Gesichter zeigt, die gedreht werden. Wie Sie sehen können, wurde es als Dissertation gemacht, so dass Sie dieses Papier auch lesen können, wenn Sie möchten.

+0

Hm ... nur etwa 80% Erinnerung, aber geringe Fehlalarme (hohe Präzision). Ich bin mir nicht sicher, ob das gut ist oder nicht? Naja, das ist gut genug, um damit anzufangen, wenn ich es kompilieren kann. Danke :) – mpen

+0

- hohe Präzision ist mir sowieso wichtiger. Die restlichen 20% können bei Bedarf manuell markiert werden, aber ich hätte gedacht, dass wir jetzt Raten von über 95% bekommen könnten. Vielleicht irre ich mich. – mpen

+0

Okay, das kompiliert nicht auf 64-Bit Ubuntu. – mpen

2

In Code Project hat jemand einen detailed description eines Projekts für die Gesichtserkennung sowie einige C++ - Quellcode für das Projekt und Links zu den Bibliotheken, die er verwendet. Sein Algorithmus konzentriert sich auf die Verwendung von Farbunterschieden, um Hautflecken zu finden, und testet dann, ob 19x19-Pixel-Bilder mit Gesichtern übereinstimmen. Ich bin nicht mit allen Bibliotheken zur Gesichtserkennung vertraut, aber ich lese etwas von seinem Code, viele Methoden und Funktionen haben CV im Namen, also mag er die OpenCV-Bibliothek benutzen, aber ich bin nicht damit vertraut, bin nicht 100% sicher. Er bietet jedoch viele Erklärungen über seine Anwendung und die Quelldateien, so dass es ein guter Ausgangspunkt sein kann.

+1

Er könnte versuchen, seine eigene CV-Bibliothek zu bauen. Ich dachte, er hätte Teile von opencv rausgerissen, aber das deutet nichts darauf hin. Er rühmt sich einer Genauigkeit von 98%, aber das wurde in erster Linie trainiert und auf seinem eigenen Gesicht getestet, das sagt nicht viel. Erwähnt nichts über Rotation ... Ich wünschte, er hätte eine detailliertere Bewertung gegeben. Precision-Recall-Kurven sind großartig. Oh, danke dafür. Ich kann es auch versuchen ... könnte für alles, was ich weiß, sehr gut sein. – mpen

+1

Ich habe eine bessere Statistik, dass der Typ, der 98% Genauigkeit behauptet. 99,999999999999% hes liegt oder hat übertrainiert. Gesichtserkennung ist bei weitem nicht so genau, selbst die besten Systeme sind nicht so genau. – monksy

3

Mark - Sie sagen, dass OpenCV nicht unveränderlich sein kann, um eine Drehung

Was Sie tun vier vergleicht verhindern würde, 90 Dreh ° nach jedem vergleichen?

+0

Nichts würde das verhindern. Dies ist eine gültige Antwort;) – mpen

1

Ich habe die Haar-Funktionen nicht zur Gesichtserkennung verwendet, aber von dem, woran ich mich erinnere, könnte es effektiver sein, ein Gesicht zu erkennen als Eigengesichtern/pca.

Ich habe das Problem über die Rotation Probleme mit dem Gesicht gerannt. Mein Gedanke ist vielleicht, dass Sie den Formvergleich versuchen und versuchen könnten, das Objekt zu korrigieren. Versuchen Sie es und richten Sie es für das normale Kopfseitenverhältnis aus.Ich bin in meinem Projekt mit Eigenface nie so weit gekommen, aber lassen Sie mich wissen, wie das funktioniert. Das sollte in Matlab einfach sein. : P