@@ -0,0 +1,77 @@ | |||
""" | |||
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 |
@@ -0,0 +1,77 @@ | |||
""" | |||
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 |
@@ -0,0 +1,61 @@ | |||
""" | |||
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 |