Importieren der OpenCV-Bibliothek
Der erste Schritt bei der Erstellung einer Gesichtserkennungsanwendung besteht darin, die OpenCV-Bibliothek zu importieren.
Dadurch erhalten Sie Zugriff auf die Funktionen und Algorithmen, die für die Bildverarbeitung und Computer Vision erforderlich sind.
import cv2
Dieser Befehl importiert die OpenCV-Bibliothek und macht sie in Ihrem Python-Skript verfügbar. Sie können dann Funktionen wie cv2.imread()
, cv2.cvtColor()
und cv2.CascadeClassifier()
verwenden, um Bilder zu laden, zu verarbeiten und Gesichter zu erkennen.
Zugriff auf die Webcam
Um eine Echtzeit-Gesichtserkennungsanwendung zu erstellen, müssen Sie auf die Webcam Ihres Computers zugreifen.
OpenCV bietet eine einfache Möglichkeit, dies zu tun:
imgcap = cv2.VideoCapture(0)
Dieser Code erstellt ein VideoCapture
-Objekt, das mit der Webcam verbunden ist. Der Parameter 0
gibt die Standard-Webcam an. Wenn Sie mehrere Kameras haben, können Sie andere Indizes verwenden, z. B. 1
oder -1
. Mit diesem Objekt können Sie Videostreams erfassen und einzelne Bilder daraus extrahieren.
Anpassen der Bildauflösung
Um die Leistung und Genauigkeit der Gesichtserkennung zu verbessern, können Sie die Auflösung des von der Webcam erfassten Bildes anpassen. OpenCV ermöglicht Ihnen, die Breite und Höhe des Bildes festzulegen:
imgcap.set(3, 640)
imgcap.set(4, 480)
Diese Zeilen setzen die Breite auf 640 Pixel und die Höhe auf 480 Pixel. Eine niedrigere Auflösung kann die Verarbeitungsgeschwindigkeit erhöhen, während eine höhere Auflösung möglicherweise mehr Details erfasst. Die Wahl der optimalen Auflösung hängt von den spezifischen Anforderungen Ihrer Anwendung und der verfügbaren Rechenleistung ab. Es ist ratsam, mit verschiedenen Auflösungen zu experimentieren, um die beste Balance zwischen Geschwindigkeit und Genauigkeit zu finden.
Laden des Haar-Kaskaden-Klassifikators
Der Haar-Kaskaden-Klassifikator ist ein vortrainiertes Modell, das verwendet wird, um Gesichter in Bildern zu erkennen. Um diesen Klassifikator zu verwenden, müssen Sie ihn zunächst laden:
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
Dieser Code lädt den Haar-Kaskaden-Klassifikator für die Erkennung von Frontalgesichtern. OpenCV enthält mehrere vortrainierte Klassifikatoren für verschiedene Objekterkennungsaufgaben, z. B. für Augen, Körper und andere Objekte. Sie können diese Klassifikatoren in Ihrem Code verwenden, indem Sie den entsprechenden Pfad zur XML-Datei angeben.
Echtzeit-Gesichtserkennung durchführen
Nachdem Sie die OpenCV-Bibliothek importiert, auf die Webcam zugegriffen und den Haar-Kaskaden-Klassifikator geladen haben, können Sie mit der Echtzeit-Gesichtserkennung beginnen. Dies umfasst das Erfassen von Bildern von der Webcam, das Konvertieren in Graustufen und das Verwenden des Klassifikators, um Gesichter zu erkennen:
while True:
success, img = imgcap.read()
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(imgGray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv2.imshow("face_detect", img)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
imgcap.release()
cv2.destroyWindow()
Dieser Code führt folgende Schritte aus:
- Erfasst ein Bild von der Webcam mit
imgcap.read()
.
- Konvertiert das Bild in Graustufen mit
cv2.cvtColor()
. Dies ist wichtig, da Haar-Kaskaden-Klassifikatoren in der Regel auf Graustufenbildern trainiert werden.
- Erkennt Gesichter im Graustufenbild mit
faceCascade.detectMultiScale()
. Diese Funktion gibt eine Liste von Rechtecken zurück, die die erkannten Gesichter umgeben.
- Zeichnet Rechtecke um die erkannten Gesichter mit
cv2.rectangle()
. Die Parameter geben die Position und Größe des Rechtecks sowie die Farbe und Dicke der Linie an.
- Zeigt das Bild mit den erkannten Gesichtern in einem Fenster mit
cv2.imshow()
an.
- Wartet auf Tastendruck mit
cv2.waitKey()
. Wenn die Taste "q" gedrückt wird, wird die Schleife beendet.
- Gibt die Webcam-Ressourcen frei mit
imgcap.release()
und zerstört das Fenster mit cv2.destroyWindow()
, um Speicherlecks zu vermeiden.
Integrieren von Augenerkennung
Erfahren Sie, wie Sie die Gesichtserkennung durch Einbeziehung der Augenerkennung verbessern. Erstellen Sie zunächst einen weiteren Cascade Classifier für die Augenerkennung:
eyeCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_eye_tree_eyeglasses.xml")
Ergänzen Sie dann den Code in der Gesichtserkennungsschleife, um Augen innerhalb jedes Gesichts zu erkennen und zu markieren:
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (255, 0, 0), 2)
Diese Ergänzung zeigt, wie leicht weitere Erkennungsfunktionen in den bestehenden Code integriert werden können, was die Vielseitigkeit von OpenCV unterstreicht.