Haben Sie sich jemals gefragt, wie Snapchat verschiedene Filter genau auf Ihr Gesicht anwendet? Zaubert Ihr Smartphone, wenn es mit Ihren Gesichtszügen entsperrt wird? Nein, Sie sehen nur die Gesichtserkennung in Aktion.

Gesichtserkennung ist eine Technologie der künstlichen Intelligenz, die menschliche Gesichter in einem digitalen Bild oder Video identifizieren kann. Entdecken Sie, wie Sie mit dem legendären Haar Cascade-Algorithmus ein Echtzeit-Gesichtserkennungsprogramm in weniger als 25 Codezeilen erstellen können.

Was ist die Haarkaskade?

Haar Cascade ist ein Objekterkennungsalgorithmus, der von Paul Viola und Michael Jones eingeführt wurde, um Gesichter in Bildern oder Videos zu erkennen. Eine Kaskadenfunktion wird unter Verwendung vieler positiver und negativer Bilder trainiert, die später verwendet werden können, um jedes Objekt oder Gesicht in anderen Medien zu identifizieren. Diese trainierten Dateien sind im verfügbar OpenCV GitHub-Repository.

Unter Verwendung eines Sliding-Window-Ansatzes iteriert ein Fenster fester Größe von links nach rechts und von oben nach unten über ein Bild. In jeder Phase stoppt das Fenster und klassifiziert, ob der Bereich ein Gesicht enthält oder nicht.

instagram viewer

OpenCV, ein Computer-Vision-Tool, arbeitet mit einem vortrainierten Haar Cascade-Modell, um die Merkmale zu klassifizieren. Jede Phase prüft fünf Merkmale: zwei Kantenmerkmale, zwei Linienmerkmale und ein Vier-Rechteck-Merkmal.

Bei der Beobachtung erscheint die Augenpartie dunkler als die Wangenpartie, während die Nasenpartie heller erscheint als die Augenpartie. Sie können diese Funktionen auf die folgende Weise visualisieren.

Mithilfe dieser Merkmale und der Berechnung von Pixeln identifiziert der Algorithmus mehr als 100.000 Datenpunkte. Sie können dann einen Adaboost-Algorithmus verwenden, um die Genauigkeit zu verbessern und irrelevante Funktionen zu verwerfen. Über viele Iterationen hinweg minimiert dieser Ansatz die Fehlerrate und erhöht die Merkmalsgewichtung, bis eine akzeptable Genauigkeit erreicht wird.

Die Sliding-Window-Technik stoppt jedoch, wenn ein bestimmter Testfall fehlschlägt, und ist rechenintensiv. Um dies zu lösen, können Sie das Konzept der Cascade of Classifiers anwenden. Anstatt alle Funktionen in einem einzigen Fenster anzuwenden, werden sie bei diesem Ansatz gruppiert und stufenweise angewendet.

Wenn das Fenster die erste Stufe nicht besteht, wird es vom Prozess verworfen, andernfalls wird es fortgesetzt. Dies führt zu einer drastischen Verringerung der Anzahl der auszuführenden Operationen und macht es für Echtzeitanwendungen nutzbar.

Arbeitsablauf der Gesichtserkennung

Folgen Sie diesem Algorithmus, um Ihr Gesichtserkennungsprogramm zu erstellen:

  1. Laden Sie den Haar Cascade Frontal Face Algorithmus.
  2. Initialisieren Sie die Kamera.
  3. Frames von der Kamera lesen.
  4. Wandeln Sie Farbbilder in Graustufen um.
  5. Holen Sie sich die Gesichtskoordinaten.
  6. Zeichnen Sie ein Rechteck und setzen Sie die entsprechende Nachricht ein.
  7. Ausgabe anzeigen.

Was ist OpenCV?

OpenCV ist eine Open-Source-Bibliothek für maschinelles Sehen und maschinelles Lernen. Es verfügt über mehr als 2.500 optimierte Algorithmen für verschiedene Anwendungen. Dazu gehören Gesichts-/Objekterkennung, -erkennung, -klassifizierung und vieles mehr.

Datenschutz Ihrer Gesichtsdaten ist ein separates Anliegen. Hunderte prominenter Unternehmen wie Google, IBM und Yahoo verwenden OpenCV in ihren Anwendungen. Einige Leute, die darauf abzielen, ihre Daten privat zu halten, haben es demonstriert Es gibt Möglichkeiten, die Gesichtserkennung zu vermeiden.

Um OpenCV in Python zu installieren, verwenden Sie den Befehl:

Pip Installieren opencv-python

So erstellen Sie ein Gesichtserkennungsprogramm mit Python

Befolgen Sie diese Schritte, um den Gesichtsdetektor zu bauen:

Dieser Beispielcode ist zusammen mit der Haar Cascade-Algorithmusdatei in a GitHub-Repository und steht Ihnen unter der MIT-Lizenz kostenlos zur Verfügung.

  1. Laden Sie die herunter Haar Cascade Frontal Face Standard-XML Datei und platzieren Sie sie am selben Ort wie Ihr Python-Programm.
  2. Importieren Sie die OpenCV-Bibliothek.
    # Importieren der erforderlichen Bibliotheken
    importieren Lebenslauf2
  3. Speichern Sie die Haar Cascade Frontal Face-Algorithmusdatei zur einfachen Referenzierung.
    # Laden der Haar-Case-Algorithmusdatei in die alg-Variable
    alg = "haarcascade_frontalface_default.xml"
  4. Verwenden Sie die CascadeClassifier-Klasse, um eine XML-Datei in OpenCV zu laden.
    # Übergabe des Algorithmus an OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Nehmen Sie das Video von der Kamera auf. Übergeben Sie 0 an die Videoaufnahme() Funktion, um Ihre Hauptkamera zu verwenden. Wenn Sie eine externe Kamera angeschlossen haben, können Sie stattdessen die aufeinanderfolgenden Nummern 1, 2 usw. verwenden.
    # Erfassen des Video-Feeds von der Kamera
    cam = cv2.VideoCapture (0)
  6. Richten Sie eine Endlosschleife ein, um den Kameraeingang Bild für Bild zu lesen. Der lesen() Die Funktion gibt zwei Parameter zurück. Der erste Wert ist vom Typ boolean und zeigt an, ob die Operation erfolgreich war oder nicht. Der zweite Parameter enthält den eigentlichen Rahmen, mit dem Sie arbeiten werden. Speichern Sie diesen Rahmen in der Bild Variable.
    währendWAHR:
    _, img = cam.read()
  7. Stellen Sie den Standardtext so ein, dass er angezeigt wird Gesicht nicht erkannt. Aktualisieren Sie den Wert dieser Variablen, wenn sie erkannt wird.
     Text = "Gesicht nicht erkannt"
  8. Der Input aus der realen Welt ist bunt, im BGR-Format. BGR steht für Blau, Grün und Rot. Dadurch entsteht eine Menge Verarbeitung für Computer-Vision-Anwendungen. Um dies zu reduzieren, verwenden Sie ein Graustufenformat.
    # jeden Frame von BGR in Graustufen umwandeln
    greyImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Übergeben Sie das Rahmen- und Konvertierungscodeformat, COLOR_BGR2GRAU, Zu cvtColor(), um jeden Frame des Videos von Farbe in Graustufen zu ändern.
  9. Verwenden detectMultiScale() Gesichter zu erkennen. Diese Methode verwendet drei Parameter als Eingabe. Zuerst ist das Quellbild, grauBild. Der zweite Parameter ist der scaleFactor. Dies gibt an, um wie viel Sie die Bildgröße bei jeder Bildskalierung reduzieren müssen. Verwenden Sie als Skalierungsfaktor den Standardwert 1,3. Je höher der Skalierungsfaktor, desto weniger Schritte und desto schneller die Ausführung. Es besteht jedoch auch eine größere Wahrscheinlichkeit, dass Gesichter fehlen. Der dritte Parameter ist minNeighbors. Dies gibt an, wie viele Nachbarn jedes Kandidatenrechteck haben sollte, um es beizubehalten. Je höher der Wert, desto geringer ist die Wahrscheinlichkeit eines Fehlalarms, aber es bedeutet auch, dass unklare Gesichtsspuren übersehen werden.
    # Gesichter erkennen mit Haar Cascade 
    face = haar_cascade.detectMultiScale (grayImg, 1.3, 4)
  10. Wenn Sie ein Gesicht erkennen, erhalten Sie vier Koordinaten. x steht für die x-Koordinate, y für die y-Koordinate, w für die Breite und h für die Höhe. Aktualisieren Sie den Text auf Gesicht erkannt und zeichne mit diesen Koordinaten ein Rechteck. Die Farbe des Rechtecks ​​ist grün (BGR) Format mit einer Dicke von zwei Pixeln.
    # Zeichnen Sie ein Rechteck um das Gesicht und aktualisieren Sie den Text auf Face Detected
    für (x, y, w, h) im Gesicht:
    Text = "Gesicht erkannt"
    Lebenslauf2.Rechteck(Bild, (X, j), (X + w, j + H), (0, 255, 0), 2)
  11. Drucken Sie optional den Text auf der Ausgabekonsole aus. Zeigen Sie den Text auf dem Bildschirm an, indem Sie den erfassten Rahmen als Quelle verwenden, Text wie im obigen Text erhalten, Schriftart Stil von FONT_HERSHEY_SIMPLEX, Schriftskalierungsfaktor von 1, blaue Farbe, zwei Pixel Dicke und Linientyp von AA.
    # Den Text auf dem Bild anzeigen
    drucken(Text)
    image = cv2.putText (img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Zeigen Sie das Fenster mit dem Titel an Gesichtserkennung und das Bild. Verwenden Sie die Wartetaste () -Methode, um das Fenster für 10 Millisekunden anzuzeigen und auf einen Tastendruck zu prüfen. Wenn ein Benutzer die drückt Esc Taste (ASCII-Wert 27), verlassen Sie die Schleife.
    # Zeigen Sie das Ausgabefenster an und drücken Sie die Escape-Taste, um es zu verlassen
    cv2.imshow("Gesichtserkennung", Bild)
    Schlüssel = cv2.waitKey (10)

    wenn Schlüssel == 27:
    brechen

  13. Lösen Sie abschließend das Kameraobjekt aus dem Python-Programm und schließen Sie alle Fenster.
    Nocken.freigeben()
    Lebenslauf2.destroyAllWindows()

Gesichtserkennung mit Python in Aktion

Wenn ein Gesicht sichtbar ist, sollten Sie die Ausgabe wie folgt sehen:

Wenn kein Gesicht vorhanden ist, sehen Sie eine Nachricht wie diese:

Einschränkungen der Gesichtserkennung mit dem Haar-Kaskaden-Algorithmus

Dieser Algorithmus ist zwar leicht, hat eine kleine Modellgröße und arbeitet schnell, es gibt jedoch einige Einschränkungen:

  • In einem Echtzeitvideo muss sich das Gesicht im Sichtfeld der Kamera befinden. Wenn das Gesicht zu weit entfernt oder zu nah oder zu geneigt ist, kann der Algorithmus die Merkmale nicht erfassen.
  • Es ist ein frontaler Gesichtsalgorithmus, daher können Sie keine Seitenansichten erkennen.
  • Hohe falsch positive Ergebnisse. Es erkennt oft Bereiche als Gesichter, obwohl kein Gesicht vorhanden ist.
  • Benötigt optimale Lichtverhältnisse. Übermäßige oder schwache Beleuchtung beeinträchtigt die Genauigkeit des Algorithmus.

Die vielen Anwendungen der Gesichtserkennung

Gesichtserkennung hat in der heutigen Welt ein breites Anwendungsspektrum. Sie können es für die Gesichtserkennung in Smartphones, Haushalten, Fahrzeugen und Einwanderungskontrollpunkten verwenden. Die Gesichtserkennung ist bereits in der CCTV-Überwachung, bei Filtern für soziale Medien und bei der automatischen Gesichtsverfolgung in der Kinematografie üblich.

Das ist erst der Anfang dieser wunderbaren Technologie. Mit Fortschritten können wir möglicherweise vermisste Kinder identifizieren, Kriminelle fangen und Verbrechen wie Identitätsdiebstahl verhindern.