5

Projekt: GesichtserkennungGesichtserkennung und Zuschneiden

Beschreibung: Ich mag erfassen und ein Gesicht in einem Bild zu beschneiden. Das Bild wird durch Webcam und nur ein Gesicht pro Bild erfasst. Ich benutzte OpenCV Gesichtsdetektor, aber ich war nicht mit dem Zuschneiden zufrieden. Also habe ich begonnen, den STASM (http://www.milbo.users.sonic.net/stasm/) Gesichtsmarkendetektor zu verwenden, um das Bild zu beschneiden. STASM verwendet den OpenCV-Gesichtsdetektor, um das Gesicht in einem Bild zu finden, und STASM lokalisiert Landmarken in Gesichtern. Bei schlechten Lichtverhältnissen ist das beschnittene Bild von STASM nicht gut, da es das Gesicht nicht genau erkennt.

1) Ich möchte einen besseren Algorithmus für die Gesichtserkennung kennen. Mein Hauptziel ist es, das Gesicht aus einem Bild zu schneiden.

2) derzeit verwende ich STASM zum Zuschneiden. Bei schlechten Lichtverhältnissen oder wenn in ein Bild, wenn das ganze oder vollständige Gesicht (Stirn bis Kinn) nicht erfasst wird, STASM Cropping ist nicht zuverlässig (Der Ausgang wird nur Auge oder Lippen sein). Und wenn in meiner Anwendung keine korrekte Ausgabe vom Stasma vorhanden ist oder wenn das Gesicht nicht scharf abgeschnitten wird, dann sollte ich die Bilder ablehnen. Wie geht das? Also plane ich, das Gesicht in einem Bild zu validieren, indem ich die Augen finde. Wenn ich in meinem Ansatz richtig liege, wie erkenne ich die Augen vom beschnittenen Bild?

+0

Was ist dein Ziel nach dem Beschneiden der Gesichter, um ein Trainingssatz zu erstellen oder um Gesichtserkennung zu machen? –

+0

Nach dem Zuschneiden verwende ich es, um ein gutes Training für die Gesichtserkennung zu erstellen. Vielen Dank für Ihre Antwort ... – 2vision2

Antwort

1

Versuchen Sie den Eye Detector von OpenCV zu verwenden. Und passen Sie die Gesichtsmaske basierend auf den Augenpositionen an.

3

Ich habe ziemlich gute Ergebnisse in einem meiner Projekte, indem ich die Augen im Gesicht mit einem geschachtelten Kaskadenklassifikator entdeckt habe, wie es im mitgelieferten Beispiel nicht der Fall ist. Aber dann verwende ich einen zusätzlichen Trick: Ich drehe den Parameter minNeighbors von nestedCascade.detectMultiScale() auf 0.

Das bedeutet, dass Sie eine Menge Ergebnisse erhalten. Ein Auge wird vielleicht mal erkannt. Dann überprüfe ich, wo sich die Ergebnisse auf der linken und rechten Seite des Gesichts sammeln. Die Sammelpunkte sind die tatsächlichen Augenpositionen.

Dann drehe ich das ursprüngliche Bild. Das Rotationszentrum ist das Zentrum des Gesichts, das ich gefunden habe, und der Drehwinkel ist der Winkel zwischen den erkannten Augen. Dann mache ich eine weitere Gesichtserkennung auf dem gedrehten Bild und stelle sicher, dass ich dafür einen sehr niedrigen Skalierungsfaktor in den Parametern von nestedCascade.detectMultiScale() verwende.

Das Ergebnis ist in den meisten Fällen ein perfekt normalisiertes Gesichtsbild. Natürlich hängt der Erfolg davon ab, wie schlecht Ihre Lichtverhältnisse wirklich sind.