Skip to content
Inhalt dieser Seite
Inhalt dieser Seite

Analyse

Computer Vision mit Python

Wir analysieren das von Google veröffentliche Python-Skript für die Gesichtserkennung mit mediapipe.

Vorbereitung

Wir laden cv2 und mediapipe. cv2 ist ein weit verbreitetes Python-Paket für computer vision von OpenCV.

Anschliessend machen wir uns zwei Variablen. Eine zur Gesichtserkennungs-Lösung von mediapipe und eine zu den Zeichnungs-Tools, damit wir im Bild das erkannte Gesicht markieren können.

python
import cv2
import mediapipe as mp
mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils

Bild-Quellen

Als Quelle für die Bilder können klassische Bilddateien dienen, man kann aber auch gleich den Input der Webcam weiterverarbeiten. In beiden Fällen (Liste von Dateien, Webcam-Input) werden die Bilder in einer Schleife abgearbeitet:

Liste von Dateien

Wir gehen die Liste der Bilddateien in einer for-Schleife durch. Wir lesen die einzelnen Dateien und verwandeln diese vom Farbmodell BGR (so liest cv2) nach RGB.

python
IMAGE_FILES = ["selfie.jpg"]
for file in IMAGE_FILES:
   image = cv2.imread(file)
   converted = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

Webcam-Input

Wir öffnen die erste Webcam des Systems. Anschliessend holen wir in der while-Schleife einzelne Bilder und bereiten diese vor.

python
cap = cv2.VideoCapture(0)

while cap.isOpened():
   (success, image) = cap.read()
   if not success:
      print("Ignoring empty camera frame.")    
      continue

   converted = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

Gesichter erkennen

Nun wird ein neues Objekt für die Gesichtserkennung erzeugt. Dem Konstruktor von FaceDetection können diverse Argumente mitgeliefert werden.

python
with mp_face_detection.FaceDetection(model_selection=1, min_detection_confidence=0.5) as face_detection:
	results = face_detection.process(image)

Wenn wir dann ein image haben, können wir darauf die Erkennung anwenden:

Ausgabe sichtbar machen

Als Bilddatei speichern

Falls nichts erkannt wurde soll nichts getan werden. Sonst wird das eingelesene Bild kopiert und für jedes erkannte Gesicht werden die Koordinaten der Nasenspitze in der Konsole ausgegeben und die Erkennung mit der vordefinierten Funktion draw_detection eingezeichnet.

python
if not results.detections:
   continue

annotated_image = image.copy()

for detection in results.detections:
   print(mp_face_detection.get_key_point(detection, mp_face_detection.FaceKeyPoint.NOSE_TIP))
   mp_drawing.draw_detection(annotated_image, detection)

cv2.imwrite('output.png', annotated_image)

Schlussendlich wird das kopierte Bild mit den erkannten Gesichtern als Bilddatei abgespeichert.

Direkt anzeigen (Webcam)

Fürs Anzeigen mit cv2 wird das Bild wieder ins BGR-Format konvertiert. Anschliessend wird für jedes erkannte Gesicht eine Markierung ins Bild gezeichnet. Das Bild wird schlussendlich angezeigt.

python
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

if results.detections:
   for detection in results.detections:
      mp_drawing.draw_detection(image, detection)
	  
   cv2.imshow('MediaPipe Face Detection', image)

Gymnasium Kirchenfeld, fts