|
|
@@ -0,0 +1,173 @@ |
|
|
|
""" |
|
|
|
Abhängigkeiten: |
|
|
|
- cv2 (OpenCV-Paket) |
|
|
|
- threading |
|
|
|
- os |
|
|
|
|
|
|
|
Autor: Roberto Gelsinger |
|
|
|
Datum: 07.12.2023 |
|
|
|
Version: Modulversion |
|
|
|
""" |
|
|
|
|
|
|
|
import cv2 |
|
|
|
import threading |
|
|
|
import os |
|
|
|
from tkinter import simpledialog |
|
|
|
|
|
|
|
|
|
|
|
recording_normal = False |
|
|
|
recording = False # Globale Variable, um den Aufnahmestatus zu verfolgen |
|
|
|
recording_finished_event = threading.Event() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def start_recording(video_name="aufgenommenes_video", length=5,testcase_resolution1=2560,testcase_resolution2=1440,testcase_fps=20): |
|
|
|
""" |
|
|
|
Startet die Videoaufnahme in einem separaten Thread. |
|
|
|
|
|
|
|
Args: |
|
|
|
video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video"). |
|
|
|
""" |
|
|
|
global recording |
|
|
|
recording = True |
|
|
|
thread = threading.Thread(target=record_video, args=(video_name, length,testcase_resolution1,testcase_resolution2,testcase_fps)) |
|
|
|
thread.start() |
|
|
|
|
|
|
|
def stop_recording(): |
|
|
|
""" |
|
|
|
Beendet die Videoaufnahme, indem der globale 'recording'-Status auf False gesetzt wird. |
|
|
|
""" |
|
|
|
global recording |
|
|
|
recording = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def record_video(video_name="aufgenommenes_video", length=5,testcase_resolution1=2560,testcase_resolution2=1440,testcase_fps=20): |
|
|
|
""" |
|
|
|
Nimmt ein Video auf und speichert es im AVI-Format. |
|
|
|
|
|
|
|
Die Funktion initialisiert eine Videoaufnahme über die Webcam und speichert das Video in einem vordefinierten Ordner. |
|
|
|
Die Aufnahme läuft, solange die globale Variable 'recording' auf True gesetzt ist. |
|
|
|
|
|
|
|
Args: |
|
|
|
video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video"). |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
output_folder = "code/videos" |
|
|
|
output_file = os.path.join(output_folder, video_name + ".avi") |
|
|
|
frame_rate = testcase_fps |
|
|
|
|
|
|
|
cap = cv2.VideoCapture(0) |
|
|
|
cap.set(cv2.CAP_PROP_FRAME_WIDTH, testcase_resolution1) |
|
|
|
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, testcase_resolution2) |
|
|
|
cap.set(cv2.CAP_PROP_FPS, testcase_fps) |
|
|
|
if not cap.isOpened(): |
|
|
|
print("Fehler beim Öffnen der Kamera.") |
|
|
|
return |
|
|
|
|
|
|
|
fourcc = cv2.VideoWriter_fourcc(*'XVID') |
|
|
|
out = cv2.VideoWriter(output_file, fourcc,testcase_fps,(testcase_resolution1, testcase_resolution2) ) |
|
|
|
|
|
|
|
|
|
|
|
total_frames = int(frame_rate * length) # Gesamtzahl der aufzunehmenden Frames |
|
|
|
frame_count = 0 # Frame-Zähler |
|
|
|
|
|
|
|
while frame_count < total_frames: |
|
|
|
ret, frame = cap.read() |
|
|
|
if not ret: |
|
|
|
break |
|
|
|
|
|
|
|
out.write(frame) |
|
|
|
frame_count += 1 |
|
|
|
|
|
|
|
cv2.imshow('Recording', frame) |
|
|
|
if cv2.waitKey(1) & 0xFF == ord('q'): |
|
|
|
break |
|
|
|
|
|
|
|
recording_finished_event.set() |
|
|
|
|
|
|
|
recording = False |
|
|
|
cap.release() |
|
|
|
out.release() |
|
|
|
cv2.destroyAllWindows() |
|
|
|
|
|
|
|
def stop_normal_recording(): |
|
|
|
""" |
|
|
|
Beendet die Videoaufnahme, indem der globale 'recording'-Status auf False gesetzt wird. |
|
|
|
""" |
|
|
|
global recording_normal |
|
|
|
recording_normal = False |
|
|
|
|
|
|
|
|
|
|
|
def start_normal_recording(video_name="aufgenommenes_video",video_resolution1=2560,video_resolution2=1440, fps=20): |
|
|
|
""" |
|
|
|
Startet die Videoaufnahme in einem separaten Thread. |
|
|
|
|
|
|
|
Args: |
|
|
|
video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video"). |
|
|
|
""" |
|
|
|
global recording_normal |
|
|
|
recording_normal = True |
|
|
|
thread = threading.Thread(target=record_normal_video, args=(video_name,video_resolution1,video_resolution2,fps)) |
|
|
|
thread.start() |
|
|
|
|
|
|
|
def record_normal_video(video_name="aufgenommenes_video",video_resolution1=2560,video_resolution2=1440, fps=20): |
|
|
|
""" |
|
|
|
Nimmt ein Video auf und speichert es im AVI-Format. |
|
|
|
|
|
|
|
Die Funktion initialisiert eine Videoaufnahme über die Webcam und speichert das Video in einem vordefinierten Ordner. |
|
|
|
Die Aufnahme läuft, solange die globale Variable 'recording' auf True gesetzt ist. |
|
|
|
|
|
|
|
Args: |
|
|
|
video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video"). |
|
|
|
""" |
|
|
|
output_folder = "code/videos" |
|
|
|
output_file = os.path.join(output_folder, video_name + ".avi") |
|
|
|
|
|
|
|
cap = cv2.VideoCapture(0) |
|
|
|
cap.set(cv2.CAP_PROP_FRAME_WIDTH, video_resolution1) |
|
|
|
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, video_resolution2) |
|
|
|
cap.set(cv2.CAP_PROP_FPS, fps) |
|
|
|
|
|
|
|
if not cap.isOpened(): |
|
|
|
print("Fehler beim Öffnen der Kamera.") |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
#usefull if you have problems with cam resolutions , for manual debugging |
|
|
|
#print("video_resolution1:", video_resolution1, "type:", type(video_resolution1)) |
|
|
|
#print("video_resolution2:", video_resolution2, "type:", type(video_resolution2)) |
|
|
|
#print("fps:", fps, "type:", type(fps)) |
|
|
|
#actual_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) |
|
|
|
#actual_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) |
|
|
|
#actual_fps = cap.get(cv2.CAP_PROP_FPS) |
|
|
|
#print("Actual width:", actual_width) |
|
|
|
#print("Actual height:", actual_height) |
|
|
|
#print("Actual FPS:", actual_fps) |
|
|
|
|
|
|
|
fourcc = cv2.VideoWriter_fourcc(*'XVID') |
|
|
|
out = cv2.VideoWriter(output_file, fourcc, fps, (video_resolution1, video_resolution2)) |
|
|
|
|
|
|
|
if not out.isOpened(): |
|
|
|
print("Fehler beim Öffnen der Videoausgabedatei.") |
|
|
|
cap.release() |
|
|
|
return |
|
|
|
|
|
|
|
while recording_normal: |
|
|
|
|
|
|
|
ret, frame = cap.read() |
|
|
|
if not ret: |
|
|
|
break |
|
|
|
|
|
|
|
cv2.imshow('Recording', frame) |
|
|
|
out.write(frame) |
|
|
|
|
|
|
|
if cv2.waitKey(1) & 0xFF == ord('q'): |
|
|
|
break |
|
|
|
|
|
|
|
cap.release() |
|
|
|
out.release() |
|
|
|
cv2.destroyAllWindows() |