65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
![]() |
"""
|
||
|
Abhängigkeiten:
|
||
|
- pyramids (für den Aufbau der Bildpyramiden)
|
||
|
- heartrate (zur Berechnung der Herzfrequenz)
|
||
|
- preprocessing (für die Video-Vorverarbeitung)
|
||
|
- eulerian (für die Euler'sche Video-Magnifikation)
|
||
|
- tkinter und constants (für die GUI und Konstantenverwaltung)
|
||
|
|
||
|
Autor: Roberto Gelsinger
|
||
|
Datum: 07.12.2023
|
||
|
Version: Modulversion
|
||
|
"""
|
||
|
|
||
|
import pyramids
|
||
|
import heartrate
|
||
|
import facedetection
|
||
|
import eulerian
|
||
|
import tkinter as tk
|
||
|
from constants import freq_max, freq_min
|
||
|
|
||
|
def process_video(selected_video_name):
|
||
|
"""
|
||
|
Verarbeitet ein ausgewähltes Video, um die Herzfrequenz der abgebildeten Person zu ermitteln.
|
||
|
|
||
|
Dieser Prozess umfasst die Vorverarbeitung des Videos, den Aufbau einer Laplace-Pyramide,
|
||
|
die Anwendung von FFT-Filterung und Euler'scher Magnifikation, und schließlich die Berechnung
|
||
|
der Herzfrequenz aus den Video-Daten.
|
||
|
|
||
|
Args:
|
||
|
selected_video_name (str): Der Name des zu verarbeitenden Videos.
|
||
|
|
||
|
Returns:
|
||
|
None: Die Funktion gibt direkt die berechnete Herzfrequenz auf der Konsole aus.
|
||
|
"""
|
||
|
# Hier folgt Ihr bisheriger Code für die process_video Funktion
|
||
|
|
||
|
# Preprocessing phase
|
||
|
print("Reading + preprocessing video...")
|
||
|
video_frames, frame_ct, fps = facedetection.read_video("videos/"+selected_video_name)
|
||
|
|
||
|
# Build Laplacian video pyramid
|
||
|
print("Building Laplacian video pyramid...")
|
||
|
lap_video = pyramids.build_video_pyramid(video_frames)
|
||
|
|
||
|
|
||
|
|
||
|
for i, video in enumerate(lap_video):
|
||
|
if i == 0 or i == len(lap_video)-1:
|
||
|
continue
|
||
|
|
||
|
# Eulerian magnification with temporal FFT filtering
|
||
|
print("Running FFT and Eulerian magnification...")
|
||
|
result, fft, frequencies = eulerian.fft_filter(video, freq_min, freq_max, fps)
|
||
|
lap_video[i] += result
|
||
|
|
||
|
# Calculate heart rate
|
||
|
print("Calculating heart rate...")
|
||
|
heart_rate = heartrate.find_heart_rate(fft, frequencies, freq_min, freq_max)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# Output heart rate and final video
|
||
|
print("Heart rate: ", heart_rate, "bpm")
|