Dieses Mal möchte ich OpenCV verwenden, um Gesichter zu erkennen. Es gibt verschiedene Gesichtserkennungsmethoden, aber dieses Mal werden wir die Haar-Kaskade verwenden.
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. 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) Abbildung. Hoch abstrahiertes Gesicht
Denken Sie in der obigen Abbildung nicht, dass die Augen beispielsweise von links in "Schwarzweiß" angeordnet sind? 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. 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
Jetzt möchte ich das Gesicht einer Person anhand einer Haarkaskade erkennen. Das verwendete Bild ist das folgende Bild (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
Es ist richtig erkannt! Als nächstes werde ich nur die Punkte im Code erklären.
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.
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:
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)
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