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

  1. Laden Sie das Modell des Haar-Merkmalsklassifikators:Verwenden Siecv2.CascadeClassifier()Laden Sie das vortrainierte Gesichtsdetektionsmodell.

  2. Lesen Sie das Bild:Verwenden Siecv2.imread()Lesen Sie das zu detektierende Bild.

  3. In Graustufen konvertieren:Konvertieren Sie das Bild in Graustufen, da der Haar-Merkmalsklassifikator auf Graustufenbildern schneller läuft.

  4. Gesichter erkennen:Verwenden SiedetectMultiScale()Methode zum Erkennen von Gesichtern im Bild.

  5. Detektionsergebnisse zeichnen:Zeichnen Sie Rechtecke um die detektierten Gesichter im Bild.

  6. 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

import cv2

# 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

# Bild einlesen
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

# In Graustufenbild umwandeln
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

# Gesichtserkennung durchführen
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

# Erkennungsergebnisse zeichnen
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

# Ergebnis anzeigen
cv2.imshow('Detected Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Vollständiges Codebeispiel

Das Folgende ist ein vollständiges OpenCV-Codebeispiel zur Gesichtserkennung:

Beispiel

import cv2

# 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()
Andere Erweiterungen