Robuste Gesichtserkennung in C/C++?

Lesezeit: 5 Minuten

Benutzer-Avatar
mpen

Ich suche nach einem robusten Gesichtserkennungsalgorithmus/-bibliothek, vorzugsweise in C (C++ ist auch in Ordnung; andere Sprachen kann ich bei Bedarf portieren). Ich habe verwendet OpenCV‘s-Implementierung in der Vergangenheit, aber ich glaube nicht, dass es für die Rotation unveränderlich ist. Es muss nicht in Echtzeit sein, aber es sollte auch nicht schrecklich langsam sein (vielleicht ein oder zwei Sekunden pro Foto sind in Ordnung). Auf der Suche nach hoher Zuverlässigkeit und nicht vielen Fehlalarmen. Kennt jemand gute Umsetzungen?

  • @mark: “Sie können es schnell, billig oder genau haben; wählen Sie zwei aus.” Es sieht ehrlich gesagt so aus, als würden Sie nach dem Mond fragen.

    – Tabita

    25. Mai 2009 um 8:05 Uhr

  • @Wergan: Ich nicht fragen Sie nach schnell und billig. Eine genaue Gesichtserkennung kann in weniger als 50 ms durchgeführt werden. Ich sagte, es kann bis zu 2000 dauern. Das ist überhaupt nicht viel verlangt.

    – mp

    25. Mai 2009 um 16:07 Uhr

  • Mustererkennung ist ein SEHR schwieriges Thema, besonders wenn Sie aus einer Einzelwinkelansicht wie einem Foto arbeiten. Es wird den ganzen Weg Hit & Miss sein: (ziemlich) okay für Fahndungsfotos; (unmöglich) schwierig für vollfarbige Crowd-Shots.

    – Slashmais

    27. September 2009 um 6:31 Uhr

  • Es ist für eine Fotoalbum-Website. Ich muss keine Massen machen, ich muss nur die Hauptmotive auf den Fotos auswählen. Aber ich denke auch nicht, dass volle Menschenmassen unmöglich schwer sind … Ich habe schon einige ziemlich beeindruckende Sachen gesehen, die diesbezüglich gemacht wurden.

    – mp

    27. September 2009 um 7:24 Uhr

Benutzer-Avatar
Amro

Schauen Sie sich diese Seite an OpenCV-Wiki über die Gesichtserkennung mit Haarähnliche Merkmale.

@floppydisk: Derselbe Typ hat einen anderen gepostet Projekt Implementieren dieser Haar-ähnlichen Merkmale für die Gesichtserkennung.

Das Konzept ist nicht schwer zu verstehen und Sie könnten es sogar selbst umsetzen. Der vielleicht schwierigste Teil ist die Konstruktion der Kaskade von verstärkten Klassifikatoren (aber openCV hat all das leicht implementiert!)

Einige andere Methoden, die bei der Gesichtserkennung verwendet werden können und gegenüber affinen Transformationen invariant gemacht werden können, umfassen:

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

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

Es zeigt in einem der Testfälle Gesichter, die gedreht sind. Wie Sie sehen können, wurde es als Dissertation geschrieben, also können Sie diese Arbeit auch lesen, wenn Sie möchten.

  • Hm … nur ca. 80 % Recall, aber wenig False Positives (hohe Präzision). Ich bin mir nicht sicher, ob das gut ist oder nicht? Na ja, das ist gut genug für den Anfang, wenn ich es zum Kompilieren bekomme. Vielen Dank 🙂

    – mp

    25. Mai 2009 um 16:26 Uhr

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

    – mp

    25. Mai 2009 um 16:33 Uhr

  • Okay, das lässt sich nicht gerne auf 64-Bit-Ubuntu kompilieren.

    – mp

    3. Juni 2009 um 7:02 Uhr

Drüben auf Code Project hat jemand a gepostet detaillierte Beschreibung eines Projekts zur Gesichtserkennung sowie etwas C++-Quellcode für das Projekt und Links zu den von ihm verwendeten Bibliotheken. Sein Algorithmus konzentriert sich darauf, anhand von Farbunterschieden Hautflecken zu finden und dann zu testen, ob 19×19-Pixel-Bilder mit Gesichtern übereinstimmen. Ich bin nicht mit allen Bibliotheken für die Gesichtserkennung vertraut, aber wenn ich einen Teil seines Codes durchlese, haben viele Methoden und Funktionen CV im Namen, also verwendet er möglicherweise die OpenCV-Bibliothek, aber ich bin damit nicht vertraut, also ‘ bin mir nicht 100% sicher. Er gibt jedoch viele Erklärungen zu seiner Anwendung und den Quelldateien, sodass dies möglicherweise ein guter Ausgangspunkt ist.

  • Er könnte versuchen, seine eigene Lebenslaufbibliothek aufzubauen. Ich dachte, er hätte vielleicht Teile von opencv herausgerissen, aber nichts deutet wirklich darauf hin. Er rühmt sich einer Genauigkeit von 98 %, aber das wurde hauptsächlich an seinem eigenen Gesicht trainiert und getestet, also sagt das nicht viel aus. Erwähnt nichts über Rotation … Ich wünschte, er würde eine detailliertere Bewertung abgeben. Precision-Recall-Kurven sind fantastisch. Ah, danke dafür. Ich kann es auch versuchen … könnte sehr gut sein, soweit ich weiß.

    – mp

    27. Mai 2009 um 2:50 Uhr

  • Ich habe eine bessere Statistik als der Typ, der eine Genauigkeit von 98 % behauptet. 99,99999999999 % lügt er oder hat übertrainiert. Die Gesichtserkennung ist bei weitem nicht so genau, selbst die besten Systeme sind nicht so genau.

    – mönch

    27. September 2009 um 12:33 Uhr

Mark – Sie sagen, dass OpenCV möglicherweise nicht rotationsinvariant ist

Was würde Sie daran hindern, vier Vergleiche durchzuführen und nach jedem Vergleich um 90° zu drehen?

Das einzige, womit ich gearbeitet habe, ist Visionics FaceIt. Es funktionierte ziemlich gut, aber das letzte, was ich wusste, war sehr, sehr, sehr weit davon entfernt, frei zu sein (entweder wie beim Bier oder wie beim Sprechen).

  • Hätte erwähnen sollen, dass “kostenlos” auch gut ist. FaceIt sieht aus wie eine Gesichtserkennungssoftware…. Ich suche nach einem Open-Source-Algorithmus.

    – mp

    25. Mai 2009 um 2:36 Uhr

Benutzer-Avatar
mönch

Ich habe keine Haar-Funktionen zur Gesichtserkennung verwendet, aber soweit ich mich erinnere, ist es möglicherweise effektiver, ein Gesicht zu erkennen als Eigenfaces / PCA.

Ich bin auf das Problem mit den Rotationsproblemen mit dem Gesicht gestoßen. Mein Gedanke ist, dass Sie vielleicht versuchen könnten, die Form anzupassen und das Objekt zu korrigieren. Probieren Sie es aus und orientieren Sie es am normalen Seitenverhältnis des Kopfes. Ich bin in meinem Projekt mit Eigenface nie so weit gekommen, aber lass mich wissen, wie das funktioniert. Das sollte in Matlab einfach sein. 😛

  • Hätte erwähnen sollen, dass “kostenlos” auch gut ist. FaceIt sieht aus wie eine Gesichtserkennungssoftware…. Ich suche nach einem Open-Source-Algorithmus.

    – mp

    25. Mai 2009 um 2:36 Uhr

1197650cookie-checkRobuste Gesichtserkennung in C/C++?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy