[PYTHON] Gesichtserkennung mit einem Kaskadenklassifikator

1. Hintergrund

Derzeit schreibe ich ein Gesichtserkennungsprogramm mit Deep Learning. Zunächst wurde eine große Anzahl von Gesichtsbildern als Trainingsdaten erstellt. Zu diesem Zeitpunkt wurde das Gesicht aus dem Bild der Person erkannt und nur der Gesichtsteil wurde ausgeschnitten. Von diesen wurde ein Kaskadenklassifikator als Methode zur Erkennung von Gesichtern verwendet. Dieser Artikel beschreibt den Kaskadenklassifikator.

2. Was ist ein Kaskadenklassifikator?

Ein Kaskadenklassifikator ist ein Klassifikator, der aus mehreren einfachen Klassifikatoren besteht. Diese einfachen Klassifizierer werden nacheinander auf das Zielbild angewendet. Es wird erkannt, nachdem alle Klassifikatoren durchlaufen wurden. Wenn es andererseits von einem einfachen Klassifizierer einmal abgelehnt wird, wird es zu diesem Zeitpunkt nicht erkannt. Daher werden Bilder, die eindeutig nicht dem Erfassungsziel entsprechen, im Anfangsstadium zurückgewiesen, was schnell ist. OpenCV bietet einen Kaskadenklassifikator, der HAAR-ähnliche Funktionen verwendet.

OpenCV-Kaskadendatei https://github.com/opencv/opencv/tree/master/data/haarcascades

Die HAAR-ähnliche Merkmalsmenge ist die Merkmalsmenge in Abhängigkeit von der Helligkeit des Bildes. Es ist durch den Unterschied zwischen dem weißen und dem schwarzen Bereich im lokalen Bereich des Bildes gekennzeichnet. Daher ist es üblich, das Bild vor der Verwendung in Graustufen umzuwandeln.

3. Kaskadenklassifikator in OpenCV

In OpenCV wird nach dem Lesen der Kaskadendatei, die den Kaskadenklassifizierer enthält, die Erkennung durch detect.MultiScake () durchgeführt. Der Rückgabewert von detect.MultiScake () ist eine N × 4-Matrix, wobei N die erkannte Zahl und 4 die 4 Elemente von [x, y, Breite, Höhe] sind. Diese vier Elemente sind der Bereich, der im erkannten Bereich von einem Rechteck umgeben ist. x ist die obere linke x-Koordinate des Rechtecks, y ist die obere linke y-Koordinate des Rechtecks, width ist die Breite des Rechtecks und height ist die Höhe des Rechtecks. Wenn Sie das erkannte Teil markieren möchten, öffnen Sie die Funktion openCV Schreiben Sie mit rechteck () Rechteck (Bild, (x, y), (x + Breite, y + Höhe), (255,0,0), 2) und so weiter. Probieren Sie es auf dem Bild unten aus. PB1-3.jpg

Der Quellcode wird unten angezeigt.

face_detect.py


import cv2

#Bild laden
image = cv2.imread('sample.jpg')

#Bild in Graustufen konvertieren
image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

#Klassifikator aus Datei lesen
cascade = cv2.CascadeClassifier("/opencv/data/haarcascades/haarcascade_frontalface_alt.xml")

#Mit einem Klassifikator erkennen
faces = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

#detectMultiScale()Geben Sie den Rückgabewert von aus(Zur Bestätigung)
print(faces)

#Markieren Sie den Teil des erkannten Gesichtsbildes mit einem Rechteck
for (x,y,width,height) in faces:
    cv2.rectangle(image,(x,y),(x+width,y+height),(255,0,0),2)

#Bild anzeigen
cv2.imshow('result',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Das Ausführungsergebnis ist wie folgt. Es gibt nur eine Fehlerkennung, aber alle Gesichter können erkannt werden. nogizaka.jpg Übrigens, da der Rückgabewert von detectMultiScale () ausgegeben wurde, wenn Sie sich das Ausgabeergebnis ansehen ... image.png Wie oben gezeigt, werden die Informationen der oberen linken Koordinaten, der Breite und der Höhe im erkannten Bereich (rechteckig) zurückgegeben.

4. Nebenbei

Im vorherigen Artikel habe ich gelernt, wie man nur einen Teil eines Bildes mit dem von imread zurückgegebenen Array ausschneidet.

[OpenCV] Informationen zu dem von imread zurückgegebenen Array https://qiita.com/Castiel/items/53ecbee3c06b9d92759e

Und dieses Mal habe ich gelernt, wie man ein Gesicht erkennt. Wenn Sie diese verwenden, sollten Sie in der Lage sein, Lerndaten von Gesichtsbildern beim Deep Learning zu sammeln. Nächstes Mal werde ich daran arbeiten, Trainingsdaten für Gesichtsbilder zu erstellen.

Recommended Posts

Gesichtserkennung mit einem Kaskadenklassifikator
Erstellen Sie mit TensorFlow eine Gesichtserkennung
Ich habe mit TensorFlow - (1) Introduction einen Dir en grey face-Klassifikator erstellt
Ich habe mit der TensorFlow-④-Gesichtsextraktion einen Dir en grey-Gesichtsklassifikator erstellt
Gesichtserkennung mit OpenCV (Haar-like Feature Classifier)
[Python] Gesichtserkennung durch OpenCV (Haar Cascade)
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
Ich habe mit dem TensorFlow --⑩ Gesichtsklassifizierungstest einen Dir-Grau-Gesichtsklassifikator erstellt
Ich habe mit TensorFlow - Dir Playing (final) einen Dir en grey face-Klassifikator erstellt.
Ich habe mit TensorFlow --⑧ Learning Execution einen Dir en Grey Face Classifier erstellt
Ich habe mit TensorFlow --⑫ Web Release einen Dir en Grey Face Classifier erstellt
Ich habe mit dem TensorFlow --⑦ Lernmodell einen Dir en grey Gesichtsklassifikator erstellt
Ich habe mit der TensorFlow --② - Umgebungskonstruktion einen Dir en grey face-Klassifikator erstellt
Ich habe mit TensorFlow --⑪ Web Release Preparation einen Dir en Grey Face Classifier erstellt
Ähnliche Gesichtsbilderkennung mit Gesichtserkennung und PCA- und K-Mittel-Clustering
Feature-Erkennung mit opencv (Eckenerkennung)
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
[PyTorch Tutorial ④] AUSBILDUNG EINES KLASSIFIERERS
Gesichtserkennung mit Python + dlib
Verwenden eines Druckers mit Debian 10
Gesichtserkennung mit Python + OpenCV
Zusammenfassung der Gesichtserkennung in Python
Gesichtserkennung mit Haar Cascades
Umrisse das Gesicht mit Dlib (1)
Erstellung eines Kaskadenklassifikators mit opencv
Ein Memorandum zur Verwendung von eigen3
Anime-Gesichtserkennung mit OpenCV
Ich habe versucht, einen Transvestitenwettbewerb mit der Detect-API von Face ++ zu bewerten