You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

recording.py 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. """
  2. Abhängigkeiten:
  3. - cv2 (OpenCV-Paket)
  4. - threading
  5. - os
  6. Autor: Roberto Gelsinger
  7. Datum: 07.12.2023
  8. Version: Modulversion
  9. """
  10. import cv2
  11. import threading
  12. import os
  13. from tkinter import simpledialog
  14. recording_normal = False
  15. recording = False # Globale Variable, um den Aufnahmestatus zu verfolgen
  16. recording_finished_event = threading.Event()
  17. def start_recording(video_name="aufgenommenes_video", length=5,testcase_resolution1=2560,testcase_resolution2=1440,testcase_fps=20):
  18. """
  19. Startet die Videoaufnahme in einem separaten Thread.
  20. Args:
  21. video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video").
  22. """
  23. global recording
  24. recording = True
  25. thread = threading.Thread(target=record_video, args=(video_name, length,testcase_resolution1,testcase_resolution2,testcase_fps))
  26. thread.start()
  27. def stop_recording():
  28. """
  29. Beendet die Videoaufnahme, indem der globale 'recording'-Status auf False gesetzt wird.
  30. """
  31. global recording
  32. recording = False
  33. def record_video(video_name="aufgenommenes_video", length=5,testcase_resolution1=2560,testcase_resolution2=1440,testcase_fps=20):
  34. """
  35. Nimmt ein Video auf und speichert es im AVI-Format.
  36. Die Funktion initialisiert eine Videoaufnahme über die Webcam und speichert das Video in einem vordefinierten Ordner.
  37. Die Aufnahme läuft, solange die globale Variable 'recording' auf True gesetzt ist.
  38. Args:
  39. video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video").
  40. """
  41. output_folder = "code/videos"
  42. output_file = os.path.join(output_folder, video_name + ".avi")
  43. frame_rate = testcase_fps
  44. cap = cv2.VideoCapture(0)
  45. cap.set(cv2.CAP_PROP_FRAME_WIDTH, testcase_resolution1)
  46. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, testcase_resolution2)
  47. cap.set(cv2.CAP_PROP_FPS, testcase_fps)
  48. if not cap.isOpened():
  49. print("Fehler beim Öffnen der Kamera.")
  50. return
  51. fourcc = cv2.VideoWriter_fourcc(*'XVID')
  52. out = cv2.VideoWriter(output_file, fourcc,testcase_fps,(testcase_resolution1, testcase_resolution2) )
  53. total_frames = int(frame_rate * length) # Gesamtzahl der aufzunehmenden Frames
  54. frame_count = 0 # Frame-Zähler
  55. while frame_count < total_frames:
  56. ret, frame = cap.read()
  57. if not ret:
  58. break
  59. out.write(frame)
  60. frame_count += 1
  61. cv2.imshow('Recording', frame)
  62. if cv2.waitKey(1) & 0xFF == ord('q'):
  63. break
  64. recording_finished_event.set()
  65. recording = False
  66. cap.release()
  67. out.release()
  68. cv2.destroyAllWindows()
  69. def stop_normal_recording():
  70. """
  71. Beendet die Videoaufnahme, indem der globale 'recording'-Status auf False gesetzt wird.
  72. """
  73. global recording_normal
  74. recording_normal = False
  75. def start_normal_recording(video_name="aufgenommenes_video",video_resolution1=2560,video_resolution2=1440, fps=20):
  76. """
  77. Startet die Videoaufnahme in einem separaten Thread.
  78. Args:
  79. video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video").
  80. """
  81. global recording_normal
  82. recording_normal = True
  83. thread = threading.Thread(target=record_normal_video, args=(video_name,video_resolution1,video_resolution2,fps))
  84. thread.start()
  85. def record_normal_video(video_name="aufgenommenes_video",video_resolution1=2560,video_resolution2=1440, fps=20):
  86. """
  87. Nimmt ein Video auf und speichert es im AVI-Format.
  88. Die Funktion initialisiert eine Videoaufnahme über die Webcam und speichert das Video in einem vordefinierten Ordner.
  89. Die Aufnahme läuft, solange die globale Variable 'recording' auf True gesetzt ist.
  90. Args:
  91. video_name (str): Der Basisname der Videodatei (Standard ist "aufgenommenes_video").
  92. """
  93. output_folder = "code/videos"
  94. output_file = os.path.join(output_folder, video_name + ".avi")
  95. cap = cv2.VideoCapture(0)
  96. cap.set(cv2.CAP_PROP_FRAME_WIDTH, video_resolution1)
  97. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, video_resolution2)
  98. cap.set(cv2.CAP_PROP_FPS, fps)
  99. if not cap.isOpened():
  100. print("Fehler beim Öffnen der Kamera.")
  101. return
  102. #usefull if you have problems with cam resolutions , for manual debugging
  103. #print("video_resolution1:", video_resolution1, "type:", type(video_resolution1))
  104. #print("video_resolution2:", video_resolution2, "type:", type(video_resolution2))
  105. #print("fps:", fps, "type:", type(fps))
  106. #actual_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
  107. #actual_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
  108. #actual_fps = cap.get(cv2.CAP_PROP_FPS)
  109. #print("Actual width:", actual_width)
  110. #print("Actual height:", actual_height)
  111. #print("Actual FPS:", actual_fps)
  112. fourcc = cv2.VideoWriter_fourcc(*'XVID')
  113. out = cv2.VideoWriter(output_file, fourcc, fps, (video_resolution1, video_resolution2))
  114. if not out.isOpened():
  115. print("Fehler beim Öffnen der Videoausgabedatei.")
  116. cap.release()
  117. return
  118. while recording_normal:
  119. ret, frame = cap.read()
  120. if not ret:
  121. break
  122. cv2.imshow('Recording', frame)
  123. out.write(frame)
  124. if cv2.waitKey(1) & 0xFF == ord('q'):
  125. break
  126. cap.release()
  127. out.release()
  128. cv2.destroyAllWindows()