EVM/code/processing.py

65 lines
2.0 KiB
Python
Raw Normal View History

2024-01-03 14:37:33 +00:00
"""
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")