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.
Das Gesicht wurde für ein Personenbild erkannt und von einem quadratischen Rahmen umgeben.
Mehrere Personen sind in Ordnung. Beeindruckend!
Es erkennt sogar seltsame Gesichter! (Die Person dahinter kann ebenfalls erkannt werden)
Sie können auch von der Gesichtserkennung zur Nasenerkennung wechseln.
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 ...
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).
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.
Die Gesichtsbeurteilung wird unter Verwendung eines Haar-ähnlichen Detektors durchgeführt. Der Beurteilungsprozess sieht so aus. 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.
Als Schwachstelle sinkt die Erkennungsgenauigkeit erheblich, wenn Sie keine Vorderseite haben. Beispielsweise konnte das unten gezeigte Profil nicht erkannt werden.
Auch wenn ich mein Gesicht drehte, konnte es nicht erkannt werden.
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)
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.
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.
- Versuchen Sie die Objekterkennung (detectMultiScale) mit verschiedenen Parametern (scaleFactor Edition)
- [Versuchen Sie, detectMultiScale mit verschiedenen Parametern (minNeighbors) zu erkennen] (http://workpiles.com/2015/04/opencv-detectmultiscale-minneighbors/)
- OpenCV detectMultiScale() minNeighbors parameter
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