OpenCV Gesichtsdetektion
Die Gesichtsdetektion ist ein klassisches Problem der Computer Vision, und OpenCV bietet eine Gesichtsdetektionsmethode auf Basis des Haar-Merkmalsklassifikators, die einfach zu verwenden und effektiv ist.
Dieser Artikel beschreibt ausführlich, wie man diecv2.CascadeClassifier()zur Gesichtsdetektion verwendet.
Einführung in den Haar-Merkmalsklassifikator
Der Haar-Merkmalsklassifikator ist eine auf Haar-ähnlichen Merkmalen basierende Methode des maschinellen Lernens, die 2001 von Paul Viola und Michael Jones vorgeschlagen wurde. Er extrahiert Haar-ähnliche Merkmale aus Bildern und verwendet den AdaBoost-Algorithmus zum Training, wodurch schließlich ein Klassifikator erzeugt wird, um Ziele (wie Gesichter) in Bildern zu erkennen.
Haar-ähnliche Merkmale sind einfache rechteckige Merkmale, die durch Berechnung der Pixelwertdifferenzen zwischen verschiedenen Regionen in einem Bild extrahiert werden. Beispielsweise kann ein Haar-ähnliches Merkmal die Differenz zwischen den Summen der Pixelwerte zweier benachbarter Rechtecke sein. Diese Merkmale können strukturelle Informationen wie Kanten und Linien in einem Bild erfassen.
Haar-Merkmalsklassifikator in OpenCV
OpenCV bietet vortrainierte Haar-Merkmalsklassifikatoren, die direkt zur Gesichtsdetektion verwendet werden können. Diese Klassifikatoren werden als XML-Dateien gespeichert, die die trainierten Modellparameter enthalten.
In OpenCV wird diecv2.CascadeClassifier()Klasse zum Laden und Verwenden dieser Klassifikatoren verwendet.
Implementierungsschritte für die Gesichtsdetektion
Laden Sie das Modell des Haar-Merkmalsklassifikators:Verwenden Sie
cv2.CascadeClassifier()Laden Sie das vortrainierte Gesichtsdetektionsmodell.Lesen Sie das Bild:Verwenden Sie
cv2.imread()Lesen Sie das zu detektierende Bild.In Graustufen konvertieren:Konvertieren Sie das Bild in Graustufen, da der Haar-Merkmalsklassifikator auf Graustufenbildern schneller läuft.
Gesichter erkennen:Verwenden Sie
detectMultiScale()Methode zum Erkennen von Gesichtern im Bild.Detektionsergebnisse zeichnen:Zeichnen Sie Rechtecke um die detektierten Gesichter im Bild.
Ergebnis anzeigen:Zeigen Sie das Detektionsergebnis an.
Laden des Haar-Merkmalsklassifikators
Bevor Sie den Haar-Merkmalsklassifikator verwenden, müssen Sie zunächst das vortrainierte Klassifikatormodell laden. OpenCV bietet mehrere vortrainierte Klassifikatoren, z. B. den für die Gesichtsdetektion.haarcascade_frontalface_default.xml。
Beispiel
# Haar-Merkmalsklassifikator laden
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
Ein Bild einlesen
Bevor Sie die Gesichtserkennung durchführen, müssen Sie das zu erkennende Bild einlesen. OpenCV bietet diecv2.imread()Funktion zum Einlesen eines Bildes.
Beispiel
image = cv2.imread('image.jpg')
Konvertierung in ein Graustufenbild
Der Haar-Merkmalsklassifikator führt die Erkennung üblicherweise auf Graustufenbildern durch, daher ist es erforderlich, das Farbbild in ein Graustufenbild umzuwandeln.
Beispiel
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Gesichtserkennung durchführen
Verwenden Siecv2.CascadeClassifier.detectMultiScale()Methode zur Durchführung der Gesichtserkennung. Diese Methode gibt für jeden erkannten Gesichtsbereich ein Rechteck (x, y, w, h) zurück, wobei (x, y) die Koordinate der oberen linken Ecke des Rechtecks ist und w und h die Breite bzw. Höhe des Rechtecks sind.
Beispiel
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
scaleFactor: Gibt das Verhältnis an, um das die Bildgröße jedes Mal reduziert wird, um die Bildpyramide aufzubauen. Der Standardwert ist 1.1.minNeighbors: Gibt die Anzahl der Nachbarn an, die jedes Kandidatenrechteck beibehalten soll. Der Standardwert ist 5.minSize: Gibt die minimale Größe des Erkennungsziels an. Der Standardwert ist (30, 30).
Erkennungsergebnisse zeichnen
Nachdem Gesichter erkannt wurden, können Sie diecv2.rectangle()Methode verwenden, um Rechtecke auf dem Bild zu zeichnen und die Positionen der Gesichter zu markieren.
Beispiel
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
Ergebnisse anzeigen
Verwenden Sie schließlich diecv2.imshow()Methode, um die Erkennungsergebnisse anzuzeigen.
Beispiel
cv2.imshow('Detected Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Vollständiges Codebeispiel
Das Folgende ist ein vollständiges OpenCV-Codebeispiel zur Gesichtserkennung:
Beispiel
# Haar-Merkmalsklassifikator laden
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Bild einlesen
image = cv2.imread('image.jpg')
# In Graustufenbild umwandeln
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Gesichtserkennung durchführen
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# Erkennungsergebnisse zeichnen
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Ergebnis anzeigen
cv2.imshow('Detected Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()