[Python] Gesichtserkennung durch OpenCV (Haar Cascade)

Einführung

Dieses Mal möchte ich OpenCV verwenden, um Gesichter zu erkennen. Es gibt verschiedene Gesichtserkennungsmethoden, aber dieses Mal werden wir die Haar-Kaskade verwenden.

Umgebung

MacOS Mojave Python 3.7

Haar Casecade? Aus der Merkmalsmenge (Haar-Merkmalsmenge), die die Gesichtsbehandlung ausdrückt, ist dies ein Klassifikator, der beurteilt, ob es sich um ein Gesicht handelt oder nicht. Dieser Klassifikator wird als Cascade-Klassifikator bezeichnet, da er aus mehreren Klassifikatoren besteht, die aus Gründen der Geschwindigkeit kombiniert werden. Die folgenden Schwarzweißmerkmale werden als Haarmerkmale verwendet. スクリーンショット 2020-03-24 16.45.21.png Abbildung. Haarmerkmale (Bildquelle: http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)

Ich frage mich, warum dieses Schwarz-Weiß ... Lassen Sie uns darüber nachdenken, wie das menschliche Gesicht aussieht.

Wenn das menschliche Gesicht stark abstrahiert ist, ist es ungefähr wie folgt (vielleicht ... w) スクリーンショット 2020-03-24 16.53.30.png Abbildung. Hoch abstrahiertes Gesicht

Denken Sie in der obigen Abbildung nicht, dass die Augen beispielsweise von links in "Schwarzweiß" angeordnet sind? スクリーンショット 2020-03-24 17.01.59.png Abbildung. Hoch abstrahierte weiße und schwarze Gesichtsanordnung

Die Haar-Merkmalsmenge repräsentiert diese stark abstrahierte weiße und schwarze Gesichtsanordnung. Ein beliebiger Bereich wird aus dem Eingabebild ausgeschnitten, und wenn es viele dieser Merkmale gibt, wird es als Gesicht beurteilt. スクリーンショット 2020-03-24 16.45.32.png Abbildung. Das Bild wird als Gesicht beurteilt (es gibt viele Haarmerkmale wie die Augen). (Bildquelle: http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)

Dies ist nur eine grobe Erklärung des Bildes. Wenn Sie weitere Details erfahren möchten, lesen Sie bitte das folgende Dokument. https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf

Gesichtserkennung

Jetzt möchte ich das Gesicht einer Person anhand einer Haarkaskade erkennen. Das verwendete Bild ist das folgende Bild (woman.jpg). woman.jpg

Der ausgeführte Code sieht folgendermaßen aus:

python


import cv2
import matplotlib.pyplot as plt

#Laden von Bildern(Bild 1066 x 1600)
img = cv2.imread("woman.jpg ")
#Laden Sie den Gesichtskaskadenklassifikator
face_cascade = cv2.CascadeClassifier("haarcascades/haarcascade_frontalface_default.xml")
#Machen Sie das Bild Graustufen
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Gesichtserkennung durchführen!
faces = face_cascade.detectMultiScale(gray)
#Da die Position des Gesichts in Gesichtern enthalten ist, lesen Sie sie mit der for-Anweisung
for (x,y,w,h) in faces:
    #Zeichnen Sie ein Rechteck an der Gesichtsposition
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),10)
#Ändern Sie die Reihenfolge der Farben
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#Ausgabe
plt.imshow(img)
plt.show()

Ergebnis スクリーンショット 2020-03-24 17.27.20.png

Es ist richtig erkannt! Als nächstes werde ich nur die Punkte im Code erklären.

Lesen des Kaskadenklassifikators

python


#Laden Sie den Gesichtskaskadenklassifikator
face_cascade = cv2.CascadeClassifier("haarcascades/haarcascade_frontalface_default.xml")

In diesem Teil laden wir den Kaskadenklassifikator zum Klassifizieren der oben genannten Gesichter. wenn

OpenCV(4.2.0) /Users/travis/build/skvark/opencv-python/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

Wenn Sie eine Nachricht wie diese sehen, verfügen Sie wahrscheinlich nicht über die XML-Datei für den Cascade Classifier. Laden Sie sie daher herunter (oder klonen Sie sie) von: https://github.com/opencv/opencv

Legen Sie nach dem Herunterladen den Ordner data / haarcascades im selben Ordner wie Ihre Python-Datei (oder ipynb) ab und führen Sie ihn aus.

Rechteckige Zeichnung

python


for (x,y,w,h) in faces:
    #Zeichnen Sie ein Rechteck an der Gesichtsposition
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),10)

Die Position des Gesichts wird als (x, y, Breite, Höhe) ausgegeben. Es sieht aus wie das: スクリーンショット 2020-03-24 17.44.01.png

Die Argumente von cv2.reactangle lauten wie folgt. cv2.reactangle (Bild, (oben links x, oben links y), (unten rechts x, unten rechts y), (Farbe), Linienstärke) スクリーンショット 2020-03-24 17.47.45.png

Am Ende

Der Kaskadenklassifikator kann nicht nur das Gesicht, sondern auch den Körper, den Unterkörper und die Katzen erkennen. Ich möchte diesen Artikel bald schreiben. Wenn Sie Kommentare oder Fehler zum Artikel haben, kommentieren Sie diese bitte.

Twitter Ich sende es auch auf Twitter. Bitte folgen Sie mir, wenn Sie möchten ...! https://twitter.com/ryuji33722052

Recommended Posts

[Python] Gesichtserkennung durch OpenCV (Haar Cascade)
Gesichtserkennung mit Python + OpenCV
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Gesichtserkennung mit Python + dlib
[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV
Zusammenfassung der Gesichtserkennung in Python
Gesichtserkennung mit Haar Cascades
Anime-Gesichtserkennung mit OpenCV
Verbessern Sie schnell die Erkennungsgenauigkeit, indem Sie Parameter mit openCV-Gesichtserkennung angeben
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Gesichtserkennung mit einem Kaskadenklassifikator
Speichern Sie Videos Frame für Frame mit Python OpenCV
Dlib-Gesichtserkennung und Blinkzähler von Python
Gesichtserkennung durch Sammeln von Bildern von Angers.
[python, openCV] base64 Gesichtserkennung in Bildern
Python2.7 + CentOS7 + OpenCV3
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
OpenCV-Beispiele (Python)
[Hinweis] openCV + Python
Größenänderung, Mosaik, Gesichtserkennung mit OpenCV, manchmal Elefantenstempel
JPEG-Bilderzeugung durch Angabe der Qualität mit Python + OpenCV
Primzahlbeurteilung durch Python
Python OpenCV Installation (Memo)
Visualisierungsnotiz von Python
Kommunikationsverarbeitung durch Python
Binarisierung mit OpenCV / Python
Zusammenfassung über Python3 + OpenCV3
Einführung in OpenCV (Python) - (2)
Liste der Python-APIs für OpenCV3
Python OpenCV Tutorial Memo
Beamformer-Antwort von Python
Python, OpenCV-Kameraerfassung
OpenCV für Python-Anfänger
Gesichtserkennung in Echtzeit mit von getUserMedia [HTML5, openCV] aufgenommenem Video
Ein Memo, wenn mit Python + OpenCV schnell ein Gesicht erkannt wird
Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
Schneiden Sie mit Python + OpenCV jede Sekunde ein Bild aus einem Video aus