123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- """
- 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()
|