Gesichts- und Mimikenerkennung mit Python

Vorbereitung

  1. Installation v. cv2, numpy und imutils
  2. Download der xml-Dateien
  3. Organisation der zu analysierenden Videofiles

Code-Anpassungen

  1. „minSize“ beschreibt die Mind.-Gesichtsgröße in Pixel
  2. „minNeighbors“ & „scaleFactor“ beschreibt div. Tuningmetriken
  3. „cv2.VideoCapture“ beschreibt die Quelle. cv2.VideoCapture(0) -> Webcam

Code

import cv2
import numpy as np
import imutils
from tensorflow.keras.models import load_model
# Gesichtserkennungs-Modell laden
# face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + ‚haarcascade_profileface.xml‘)
face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + ‚haarcascade_frontalface_default.xml‘)
# Mimik-Erkennungs-Modell laden
# emotion_classifier = load_model(“, compile=True)
emotion_classifier = load_model(‚fer_model.h5‘, compile=True)
emotion_labels = {0: ‚Angry‘, 1: ‚Disgust‘, 2: ‚Fear‘, 3: ‚Happy‘, 4: ‚Sad‘, 5: ‚Surprise‘, 6: ‚Neutral‘}
# Video-Stream initialisieren
cap = cv2.VideoCapture(„Dateiname“)
while True:
ret, frame = cap.read()
if not ret:
break
# Gesichtserkennung
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(150, 150), flags=cv2.CASCADE_SCALE_IMAGE)
for (x, y, w, h) in faces:
# Gesichtsausschnitt extrahieren
face = gray[y:y + h, x:x + w]
face = cv2.resize(face, (48, 48))
face = face.astype(„float“) / 255.0
face = np.expand_dims(face, axis=0)
face = np.expand_dims(face, axis=-1)
# Mimik erkennen
predictions = emotion_classifier.predict(face)[0]
emotion_probability = np.max(predictions)
label = emotion_labels[np.argmax(predictions)]
# Rechteck um das Gesicht zeichnen
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Text mit der erkannten Mimik hinzufügen
cv2.putText(frame, label, (x, y – 10), cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 255, 0), 2)
cv2.imshow(‚frame‘, frame)
if cv2.waitKey(1) & 0xFF == ord(‚q‘):
break
cap.release()
cv2.destroyAllWindows()

Viele (!) CSV-Dateien zu einer CSV zusammen führen

Bedingt durch das Datamining bei div. Jobs werden viele dieser Daten hier generiert u. weil ich zu faul bin, die Objekte mühsam u. händisch in die SQLite-Imports zu werfen, gehe ich so vor:

Windows10 -> Eingabeaufforderung -> copy *.csv newfile.csv

Import via SQLitestudio