From 2bafb798dacf7bcb6d8e88b1348da329f5d490c5 Mon Sep 17 00:00:00 2001 From: shoofle Date: Sun, 28 Jul 2024 16:34:17 -0400 Subject: [PATCH] mvp --- .gitignore | 1 + datetimes.py | 7 ------- webcam.py | 51 ++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 .gitignore delete mode 100644 datetimes.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e75c7cc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +videos/*.mp4 diff --git a/datetimes.py b/datetimes.py deleted file mode 100644 index 0bb722a..0000000 --- a/datetimes.py +++ /dev/null @@ -1,7 +0,0 @@ -from datetime import datetime, date, time - -print(datetime.now()) - -def five_minute_segment_from(the_time, actually_do_five_seconds=False): - minute = the_time.replace(second=0, microsecond=0) - return minute.replace(minute=(minute.minute // 5)*5) \ No newline at end of file diff --git a/webcam.py b/webcam.py index 914ab42..daa0c48 100644 --- a/webcam.py +++ b/webcam.py @@ -1,7 +1,14 @@ - -# import the opencv library +from datetime import datetime, date, time, timedelta import cv2 - + + +def five_minute_segment_from(the_time): + return the_time.replace(second=(the_time.second // 5)*5, microsecond=0) + #minute = the_time.replace(second=0, microsecond=0) + #return minute.replace(minute=(minute.minute // 5)*5) + +def video_address_for(time_stamp): + return 'videos/' + str(time_stamp) + '.mp4' # define a video capture object camera = cv2.VideoCapture(0) @@ -11,15 +18,31 @@ if not camera.isOpened(): exit() queue = [(False, None)] * 100 - + +last_time_stamp = five_minute_segment_from(datetime.now()) + +old_time = cv2.VideoCapture(video_address_for(last_time_stamp)) + # Define the codec and create VideoWriter object fourcc = cv2.VideoWriter_fourcc(*'mp4v') -#out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (int(camera.get(3)),int(camera.get(4)))) - +out = cv2.VideoWriter("videos/" + str(last_time_stamp) + ".mp4", fourcc, camera.get(cv2.CAP_PROP_FPS), (int(camera.get(3)),int(camera.get(4)))) + idx = 0 offset = 0 +longterm = False while(True): - + if last_time_stamp != five_minute_segment_from(datetime.now()): + out.release() + out = cv2.VideoWriter(video_address_for(last_time_stamp), + fourcc, + camera.get(cv2.CAP_PROP_FPS), + (int(camera.get(3)), int(camera.get(4))) + ) + if old_time.isOpened(): + old_time.release() + old_time = cv2.VideoCapture(video_address_for(five_minute_segment_from(datetime.now() - timedelta(seconds=30)))) + + last_time_stamp = five_minute_segment_from(datetime.now()) # Capture the video frame # by frame ret, frame = camera.read() @@ -27,27 +50,33 @@ while(True): frame = cv2.flip(frame, 1) #recod the frame - #out.write(frame) + out.write(frame) queue[idx] = ret, frame + showo, fr = queue[(idx - offset) % len(queue)] - if showo: + if longterm: + ret2, frame2 = old_time.read() + if ret2: + cv2.imshow('vid', frame2) + elif showo: cv2.imshow('vid', fr) # the 'q' button is set as the quitting button you may use any desired button of your choice key = cv2.waitKey(1) & 0xFF if key == ord('q'): break - if key == ord('a'): offset += 1 if key == ord('d'): offset -= 1 + if key == ord('z'): + longterm = not longterm idx = (idx + 1) % len(queue) # After the loop release the cap object camera.release() -#out.release() +out.release() # Destroy all the windows cv2.destroyAllWindows()