[PYTHON] [Erklärung für Anfänger] OpenCV-Gesichtserkennungsmechanismus und -praxis (MultiScale erkennen)

Übersicht und Umgebung

Ich habe die Gesichtserkennungsmethode von openCV untersucht und ausprobiert. Ich werde für Anfänger erklären. Im Folgenden finden Sie Artikel zu openCV.

Die Überprüfungsumgebung ist wie folgt. 00.ArchitectureopenCV.JPG

Was Sie mit openCV-Gesichtserkennung tun könnten

Das Gesicht wurde für ein Personenbild erkannt und von einem quadratischen Rahmen umgeben. 10.Sample00.jpg

Mehrere Personen sind in Ordnung. Beeindruckend! 10.Sample01.jpg

Es erkennt sogar seltsame Gesichter! (Die Person dahinter kann ebenfalls erkannt werden) 10.Sample02.jpg

Sie können auch von der Gesichtserkennung zur Nasenerkennung wechseln. 10.Sample03_Nose.jpg

OpenCV-Gesichtserkennungsmechanismus

Ich habe mir die Papiere oder spezifischen Algorithmen nicht angesehen, um sie zu überprüfen und zu bestätigen, daher sind die folgenden Erklärungen möglicherweise falsch (ich würde es begrüßen, wenn Sie darauf hinweisen könnten). Das hat der Autor in etwa einem halben Tag verstanden. Vielleicht vertieft das Anschauen des Videos "Viola Jones Gesichtserkennung und -verfolgung erklärt" Ihr Verständnis, aber erkennen Sie die lange Zeit von 1,5 Stunden. Pleite ...

Übersicht über die Gesichtserkennungsmethode

Beurteilung Ein Teil des gesamten Bildes (gelesenes Bild) wird nach verschiedenen Kriterien ausgeschnitten und beurteilt. Wenn es auch nur einmal als "kein Gesicht" beurteilt wird, wird die nachfolgende Beurteilung nicht durchgeführt und die Beurteilungsvorrichtung kann auf einen Teil des nächsten Bildes angewendet werden. Wenn nicht alle Beurteilungen vorgenommen werden, wird die Geschwindigkeit der Gesichtserkennungsverarbeitung realisiert (die Genauigkeit jeder Beurteilung ist gering, aber die Genauigkeit wird insgesamt durch Stapeln vieler Beurteilungen beibehalten). 20.DetectOverview.JPG

Um das Verständnis des Schneidvorgangs auf der linken Seite zu erleichtern, habe ich die Parameter der openCV-API geändert und es gewagt, sie falsch zu erkennen. Gesichter werden in einer großen Anzahl von Rahmen erkannt, dh mindestens so viele Rahmen werden zur Beurteilung verwendet. Sie können sehen, dass das gesamte Beurteilungsbild ausgeschnitten und einzeln auf das Beurteilungsgerät angewendet wird. 30.Sample01.many.jpg

Beurteilungsmethode

Harr-ähnlicher Detektor - Übersicht

Die Gesichtsbeurteilung wird unter Verwendung eines Haar-ähnlichen Detektors durchgeführt. Der Beurteilungsprozess sieht so aus. 40.HarrLike.JPG Das obige Beurteilungsverfahren ist wirksam, weil der zentrale Teil der Nase hell ist, weil er Licht ausgesetzt ist, und der Bereich um die Nase herum beschattet und abgedunkelt ist. Das Urteil allein ist einfach und schnell, aber andererseits ist die Urteilsgenauigkeit gering. Wenn Sie daher viele Urteile fällen, wird die Genauigkeit insgesamt verbessert. Es gibt drei Haupttypen von Haar-ähnlichen Detektoren, die für die obigen Beurteilungen verwendet werden. HarrLike

Schwäche der Beurteilungsmethode

Als Schwachstelle sinkt die Erkennungsgenauigkeit erheblich, wenn Sie keine Vorderseite haben. Beispielsweise konnte das unten gezeigte Profil nicht erkannt werden. 30.Sample02Angles.jpg

Auch wenn ich mein Gesicht drehte, konnte es nicht erkannt werden. 30.Sample02.angles.JPG

Python-Code

Ich habe es mit dem folgenden Code überprüft. Es hinterlässt auch Spuren von Versuch und Irrtum. Es gibt viele Teile, die ich gerade von dem am Ende geposteten Link kopiert habe. Der Code, der bei der Ausführung des trainierten Modells angegeben werden kann, ist im Artikel "Parameter mit Gesichtserkennung von openCV angeben, um die Erkennungsgenauigkeit schnell zu verbessern" beschrieben. Ich werde. Darüber hinaus ist der Code zum Lesen mehrerer Bilder im Ordner und zum Ausschneiden und Speichern des erkannten Gesichtsteils der Artikel "OpenCV erkennt das Gesicht aus mehreren Bilddateien und schneidet es aus und speichert es". Siehe / items / 457737530264572f5a5b).

import cv2

#Sortierverzeichnis(Erhalten von)
# https://github.com/opencv/opencv/blob/master/data/haarcascades/
# https://github.com/opencv/opencv_contrib/blob/master/modules/face/data/cascades/

cascade_path = "./models/haarcascade_frontalface_default.xml"

#Andere Modelldateien(Referenz)
#cascade_path = "./models/haarcascade_frontalface_alt.xml"
#cascade_path = "./models/haarcascade_frontalface_alt2.xml"
#cascade_path = "./models/haarcascade_frontalface_alt_tree.xml"
#cascade_path = "./models/haarcascade_profileface.xml"
#cascade_path = "./models/haarcascade_mcs_nose.xml"

#Verwendete Dateien und Eingabe- / Ausgabeverzeichnisse
image_file = "test.jpg "
image_path = "./inputs/" + image_file
output_path = "./outputs/" + image_file

#Zur Verzeichnisbestätigung(Denn wenn etwas schief geht)
#import os
#print(os.path.exists(image_path))

#Datei lesen
image = cv2.imread(image_path)

#Graustufenumwandlung
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
cascade = cv2.CascadeClassifier(cascade_path)

#Ausführung der Objekterkennung (Gesichtserkennung)
#image – CV_Matrix vom Typ 8U. In den hier gespeicherten Bildern werden Objekte erkannt
#Objekte - Ein Vektor, dessen Elemente Rechtecke sind. Jedes Rechteck enthält das erkannte Objekt
#scaleFactor - Stellt den Verkleinerungsbetrag bei jeder Bildskala dar
#minNeighbors - Kandidatenrechtecke müssen mindestens diese Anzahl von Nachbarn enthalten
#flags - Dieser Parameter wird in der neuen Kaskade nicht verwendet. Für ältere Kaskaden hat es dieselbe Bedeutung wie für die Funktion cvHaarDetectObjects.
#minSize - Die Mindestgröße, die ein Objekt annehmen kann. Objekte, die kleiner als diese sind, werden ignoriert
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))

#print(facerect)
color = (255, 255, 255) #Weiß

#Wenn erkannt
if len(facerect) > 0:
    
    #Erstellen Sie ein Rechteck, das das erkannte Gesicht umgibt
    for rect in facerect:
        cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)

    #Erkennungsergebnisse speichern
    cv2.imwrite(output_path, image)

Holen Sie sich die Datei des verwendeten trainierten Modells

Gesichtserkennung und Nasenerkennung von Git Hub Ich verwende die trainierte Modelldatei von modules / face / data / cascades / haarcascade_mcs_nose.xml).

Ich habe nicht überprüft, welches trainierte Modell mit [stackoverflow] verwendet werden soll (https://stackoverflow.com/questions/4440283/how-to-choose-the-cascade-file-for-face-detection). Der Artikel "Typen und Effekte von Cascade-Klassifizierern, die mit OpenCV verwendet werden können" ist hilfreich.

Gesichtserkennungsmethode "cascade.detectMultiScale"

Die Methode "cascade.detectMultiScale" wird zur Gesichtserkennung verwendet. Wie Sie auf der offiziellen Website sehen können, sind ähnliche Methoden "cascade.detectMultiScale2" und " Es gibt cascade.detectMultiScale3 ", aber die grundlegende Verarbeitung scheint sich nicht zu ändern, nur die Parameter sind unterschiedlich. Ich habe es unter [stackoverflow] gehört (https://stackoverflow.com/questions/45428619/three-detectmultiscale-methods-in-opencv). ** Die Parameter "scaleFactor" und "minNeighbors" sind sehr wichtig, um die Erkennungsgenauigkeit zu verbessern. ** Der Versuch und Irrtum des Autors ist im Artikel "Tipps zur effizienten Erkennung einer großen Anzahl von Bildern mit openCV" niedergeschrieben. Ich habe es unter Bezugnahme auf die folgenden Informationen verstanden.

Referenzlink

Dieses Mal werde ich die Seite, die ich zum Lernen verwendet habe, als Link veröffentlichen.

Seite? ˅ Kommentar
Gesichtserkennung mit Haar Cascades Japanische Übersetzung des offiziellen Tutorials
Prinzip der Gesichtserkennung, das selbst Affen verstehen können Es gibt eine leicht verständliche Erklärung zum Prinzip der Gesichtserkennung
Gesicht ausschneiden und erkennen Gesichtserkennung im Dia-Stil mit leicht verständlichen Erklärungen
OBJECT DETECTION : FACE DETECTION USING HAAR CASCADE CLASSFIERS DetaillierteErklärungderObjekterkennungmitCode(Englisch)
Heroku +Einfache Gesichtserkennungs-API mit OpenCV Es gibt eine Möglichkeit, Ihr Gesicht zu neigen, um die Genauigkeit zu verbessern
Python+Gesichtserkennung mit OpenCV-Probieren Sie den mit OpenCV gelieferten Evaluator aus Es gibt Überprüfungsergebnisse mit verschiedenen Modellen und Parametern
python+Versuchen Sie die Gesichtserkennung mit OpenCV Kopieren Sie die Quelle des Programms und fügen Sie sie ein

Recommended Posts

[Erklärung für Anfänger] OpenCV-Gesichtserkennungsmechanismus und -praxis (MultiScale erkennen)
Implementierung und Beschreibung mit XGBoost für Anfänger
[Deep Learning] Nogisaka Gesichtserkennung ~ Für Anfänger ~
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
[Erklärung für Anfänger] Grundlegende Syntax und Konzept von TensorFlow
[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV
OpenCV für Python-Anfänger
[Python] Zugreifen auf und Zuschneiden von Bildpixeln mit OpenCV (für Anfänger)
Gesichtserkennung mit Python + OpenCV
Anime-Gesichtserkennung mit OpenCV
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Gesichtserkennung aus mehreren Bilddateien mit openCV, ausschneiden und speichern