""" | |||||
Abhängigkeiten: | |||||
- cv2 (OpenCV-Paket) | |||||
- numpy | |||||
Autor: Ihr Name | |||||
Datum: Erstellungs- oder Änderungsdatum | |||||
Version: Modulversion | |||||
""" | |||||
import cv2 | |||||
import numpy as np | |||||
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_alt2.xml") | |||||
eyeCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_eye.xml") | |||||
def read_video(path): | |||||
""" | |||||
Liest ein Video, erkennt Gesichter und extrahiert Regionen von Interesse (ROIs). | |||||
Diese Funktion nimmt einen Pfad zu einer Videodatei und liest das Video. Während des Lesens erkennt sie | |||||
Gesichter im Video und extrahiert die ROIs (Gesichtsbereiche), die anschließend in einer Liste von Frames | |||||
gespeichert werden. Die Frames werden für spätere Verarbeitungsschritte skaliert. | |||||
Args: | |||||
path (str): Der Pfad zur Videodatei. | |||||
Returns: | |||||
tuple: Ein Tupel, bestehend aus: | |||||
- video_frames (list): Eine Liste von Frames, die die ROIs (Gesichtsbereiche) darstellen. | |||||
- frame_ct (int): Die Anzahl der extrahierten Frames. | |||||
- fps (int): Die Bildrate (Frames pro Sekunde) des Videos. | |||||
""" | |||||
cap = cv2.VideoCapture(path) | |||||
fps = int(cap.get(cv2.CAP_PROP_FPS)) | |||||
video_frames = [] | |||||
while cap.isOpened(): | |||||
ret, img = cap.read() | |||||
if not ret: | |||||
break | |||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |||||
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) | |||||
for (x, y, w, h) in faces: | |||||
face_roi_gray = gray[y:y+h, x:x+w] | |||||
face_roi_color = img[y:y+h, x:x+w] | |||||
eyes = eyeCascade.detectMultiScale(face_roi_gray) | |||||
# Annahme: Wir brauchen mindestens zwei Augen für die Berechnung | |||||
if len(eyes) == 2: | |||||
# Berechne die Position und Größe des Stirnbereichs | |||||
eye1_x, eye1_y, eye1_w, eye1_h = eyes[0] | |||||
eye2_x, eye2_y, eye2_w, eye2_h = eyes[1] | |||||
# Bestimme die horizontale Position und Breite des Stirnbereichs | |||||
forehead_x = min(eye1_x, eye2_x) | |||||
forehead_w = max(eye1_x + eye1_w, eye2_x + eye2_w) - forehead_x | |||||
# Bestimme die vertikale Position und Höhe des Stirnbereichs | |||||
forehead_y = 0 | |||||
forehead_h = int((min(eye1_y, eye2_y) - forehead_y) / 3) | |||||
# Extrahiere und skaliere den Stirnbereich | |||||
forehead_roi = face_roi_color[forehead_y:forehead_y + forehead_h, forehead_x:forehead_x + forehead_w] | |||||
forehead_resized = cv2.resize(forehead_roi, (500, 500)) | |||||
video_frames.append(forehead_resized.astype("float") / 255.0) | |||||
cap.release() | |||||
for frame in video_frames: | |||||
cv2.imshow("frame", frame) | |||||
cv2.waitKey(20) | |||||
cv2.destroyAllWindows() | |||||
return video_frames, len(video_frames), fps |
""" | |||||
Abhängigkeiten: | |||||
- cv2 (OpenCV-Paket) | |||||
- numpy | |||||
Autor: Ihr Name | |||||
Datum: Erstellungs- oder Änderungsdatum | |||||
Version: Modulversion | |||||
""" | |||||
import cv2 | |||||
import numpy as np | |||||
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_alt2.xml") | |||||
eyeCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_eye.xml") | |||||
def read_video(path): | |||||
""" | |||||
Liest ein Video, erkennt Gesichter und extrahiert Regionen von Interesse (ROIs). | |||||
Diese Funktion nimmt einen Pfad zu einer Videodatei und liest das Video. Während des Lesens erkennt sie | |||||
Gesichter im Video und extrahiert die ROIs (Gesichtsbereiche), die anschließend in einer Liste von Frames | |||||
gespeichert werden. Die Frames werden für spätere Verarbeitungsschritte skaliert. | |||||
Args: | |||||
path (str): Der Pfad zur Videodatei. | |||||
Returns: | |||||
tuple: Ein Tupel, bestehend aus: | |||||
- video_frames (list): Eine Liste von Frames, die die ROIs (Gesichtsbereiche) darstellen. | |||||
- frame_ct (int): Die Anzahl der extrahierten Frames. | |||||
- fps (int): Die Bildrate (Frames pro Sekunde) des Videos. | |||||
""" | |||||
cap = cv2.VideoCapture(path) | |||||
fps = int(cap.get(cv2.CAP_PROP_FPS)) | |||||
video_frames = [] | |||||
while cap.isOpened(): | |||||
ret, img = cap.read() | |||||
if not ret: | |||||
break | |||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |||||
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) | |||||
for (x, y, w, h) in faces: | |||||
face_roi_gray = gray[y:y+h, x:x+w] | |||||
face_roi_color = img[y:y+h, x:x+w] | |||||
eyes = eyeCascade.detectMultiScale(face_roi_gray) | |||||
# Annahme: Wir brauchen mindestens zwei Augen für die Berechnung | |||||
if len(eyes) == 2: | |||||
# Berechne die Position und Größe des Stirnbereichs | |||||
eye1_x, eye1_y, eye1_w, eye1_h = eyes[0] | |||||
eye2_x, eye2_y, eye2_w, eye2_h = eyes[1] | |||||
# Bestimme die horizontale Position und Breite des Stirnbereichs | |||||
forehead_x = min(eye1_x, eye2_x) | |||||
forehead_w = max(eye1_x + eye1_w, eye2_x + eye2_w) - forehead_x | |||||
# Bestimme die vertikale Position und Höhe des Stirnbereichs | |||||
forehead_y = 0 | |||||
forehead_h = int((min(eye1_y, eye2_y) - forehead_y) / 3) | |||||
# Extrahiere und skaliere den Stirnbereich | |||||
forehead_roi = face_roi_color[forehead_y:forehead_y + forehead_h, forehead_x:forehead_x + forehead_w] | |||||
forehead_resized = cv2.resize(forehead_roi, (500, 500)) | |||||
video_frames.append(forehead_resized.astype("float") / 255.0) | |||||
cap.release() | |||||
for frame in video_frames: | |||||
cv2.imshow("frame", frame) | |||||
cv2.waitKey(20) | |||||
cv2.destroyAllWindows() | |||||
return video_frames, len(video_frames), fps |
""" | |||||
Abhängigkeiten: | |||||
- cv2 (OpenCV-Paket) | |||||
- numpy | |||||
Autor: Ihr Name | |||||
Datum: Erstellungs- oder Änderungsdatum | |||||
Version: Modulversion | |||||
""" | |||||
import cv2 | |||||
import numpy as np | |||||
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_alt2.xml") | |||||
def read_video(path): | |||||
""" | |||||
Liest ein Video, erkennt Gesichter und extrahiert Regionen von Interesse (ROIs). | |||||
Diese Funktion nimmt einen Pfad zu einer Videodatei und liest das Video. Während des Lesens erkennt sie | |||||
Gesichter im Video und extrahiert die ROIs (Gesichtsbereiche), die anschließend in einer Liste von Frames | |||||
gespeichert werden. Die Frames werden für spätere Verarbeitungsschritte skaliert. | |||||
Args: | |||||
path (str): Der Pfad zur Videodatei. | |||||
Returns: | |||||
tuple: Ein Tupel, bestehend aus: | |||||
- video_frames (list): Eine Liste von Frames, die die ROIs (Gesichtsbereiche) darstellen. | |||||
- frame_ct (int): Die Anzahl der extrahierten Frames. | |||||
- fps (int): Die Bildrate (Frames pro Sekunde) des Videos. | |||||
""" | |||||
cap = cv2.VideoCapture(path) | |||||
fps = int(cap.get(cv2.CAP_PROP_FPS)) | |||||
video_frames = [] | |||||
while cap.isOpened(): | |||||
ret, img = cap.read() | |||||
if not ret: | |||||
break | |||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |||||
# Detect faces | |||||
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) | |||||
# Extract ROIs and resize | |||||
for (x, y, w, h) in faces: | |||||
face_roi = cv2.resize(img[y:y+h, x:x+w], (500, 500)) | |||||
frame = face_roi.astype("float") / 255.0 | |||||
video_frames.append(frame) | |||||
cap.release() | |||||
for frame in video_frames: | |||||
cv2.imshow("frame", frame) | |||||
cv2.waitKey(20) | |||||
cv2.destroyAllWindows() | |||||
return video_frames, len(video_frames), fps |