cleaning up a bit i don't remember whatever
This commit is contained in:
		
							parent
							
								
									a70949804b
								
							
						
					
					
						commit
						0d43c980af
					
				
							
								
								
									
										1
									
								
								Pipfile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Pipfile
									
									
									
									
									
								
							| @ -5,7 +5,6 @@ name = "pypi" | ||||
| 
 | ||||
| [packages] | ||||
| opencv-python = "*" | ||||
| python-ffmpeg = "*" | ||||
| 
 | ||||
| [dev-packages] | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										27
									
								
								Pipfile.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										27
									
								
								Pipfile.lock
									
									
									
										generated
									
									
									
								
							| @ -1,7 +1,7 @@ | ||||
| { | ||||
|     "_meta": { | ||||
|         "hash": { | ||||
|             "sha256": "96b4a3ab781c5962dc20f7beaae76ca7d30cf6dd4e193b0b04e985235aabc5cb" | ||||
|             "sha256": "9cd65918174126dae7310623cabe06ec6e5ce3f1bb0e255262749a78a55d3839" | ||||
|         }, | ||||
|         "pipfile-spec": 6, | ||||
|         "requires": { | ||||
| @ -80,31 +80,6 @@ | ||||
|             "index": "pypi", | ||||
|             "markers": "python_version >= '3.6'", | ||||
|             "version": "==4.10.0.84" | ||||
|         }, | ||||
|         "pyee": { | ||||
|             "hashes": [ | ||||
|                 "sha256:5d346a7d0f861a4b2e6c47960295bd895f816725b27d656181947346be98d7c1", | ||||
|                 "sha256:b53af98f6990c810edd9b56b87791021a8f54fd13db4edd1142438d44ba2263f" | ||||
|             ], | ||||
|             "markers": "python_version >= '3.8'", | ||||
|             "version": "==11.1.0" | ||||
|         }, | ||||
|         "python-ffmpeg": { | ||||
|             "hashes": [ | ||||
|                 "sha256:19ac80af5a064a2f53c245af1a909b2d7648ea045500d96d3bcd507b88d43dc7", | ||||
|                 "sha256:d86697da8dfb39335183e336d31baf42fb217468adf5ac97fd743898240faae3" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "markers": "python_version >= '3.7'", | ||||
|             "version": "==2.0.12" | ||||
|         }, | ||||
|         "typing-extensions": { | ||||
|             "hashes": [ | ||||
|                 "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", | ||||
|                 "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" | ||||
|             ], | ||||
|             "markers": "python_version >= '3.8'", | ||||
|             "version": "==4.12.2" | ||||
|         } | ||||
|     }, | ||||
|     "develop": {} | ||||
|  | ||||
| @ -1 +1,7 @@ | ||||
| run it in python3 after `pipenv install opencv-python`  | ||||
| run it with python3 after `pipenv install opencv-python`  | ||||
| 
 | ||||
| this progrram opens a fullscreen window showing a feed from camera 0 with a delay. | ||||
| it will collect a lot of video files in the videos/ folder, and use them for showing a long (multiple minutes) delay | ||||
| it also holds ontoo a buffer of a couple hundred frames to show shorter delays (like 5 oor 30 seconds) | ||||
| it doesn't currently do anything to handle missing files, but it would be nice to give it a "default" swirly portal looking video to show | ||||
| hopefully this'll run on a raspberry pi in the desert. | ||||
							
								
								
									
										55
									
								
								webcam.py
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								webcam.py
									
									
									
									
									
								
							| @ -1,72 +1,83 @@ | ||||
| from datetime import datetime, date, time, timedelta | ||||
| import os | ||||
| import cv2 | ||||
| 
 | ||||
| 
 | ||||
| def five_minute_segment_from(the_time): | ||||
|     return the_time.replace(minute=(the_time.minute // 1)*1, second=0, microsecond=0) | ||||
| 
 | ||||
| def video_address_for(time_stamp): | ||||
| def path_to_video_at(time_stamp): | ||||
|     return 'videos/' + str(time_stamp) + '.mkv' | ||||
| 
 | ||||
| #delay for long delay | ||||
| long_delay = timedelta(hours=1) | ||||
| 
 | ||||
| 
 | ||||
| queue = [(False, None)] * 100 #queue of recent frames | ||||
| last_time_stamp = five_minute_segment_from(datetime.now())  | ||||
|    | ||||
| # live webcam feed | ||||
| camera = cv2.VideoCapture(0)  | ||||
| camera.set(cv2.CAP_PROP_FPS, 30.0) | ||||
| if not camera.isOpened(): | ||||
|     print("Cannot open camera") | ||||
|     exit() | ||||
| 
 | ||||
| # video writer | ||||
| fourcc = cv2.VideoWriter_fourcc(*'H264') | ||||
| out = cv2.VideoWriter(video_address_for(last_time_stamp), fourcc, camera.get(cv2.CAP_PROP_FPS), (int(camera.get(3)),int(camera.get(4)))) | ||||
| out = cv2.VideoWriter(path_to_video_at(last_time_stamp), fourcc, camera.get(cv2.CAP_PROP_FPS), (int(camera.get(3)),int(camera.get(4)))) | ||||
| 
 | ||||
| # video feed from previously captured video | ||||
| old_time = cv2.VideoCapture(video_address_for(last_time_stamp)) | ||||
| old_time = cv2.VideoCapture(path_to_video_at(last_time_stamp)) | ||||
| 
 | ||||
| cv2.namedWindow("mirror", cv2.WINDOW_NORMAL) | ||||
| cv2.setWindowProperty("mirror", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) | ||||
| 
 | ||||
| idx = 0  | ||||
| offset = 0 | ||||
| longterm = False | ||||
| while(True):  | ||||
|     if last_time_stamp != five_minute_segment_from(datetime.now()): | ||||
|         # find file older than our long delay | ||||
|         old_file = path_to_video_at(five_minute_segment_from(datetime.now() - long_delay - timedelta(minutes=5))) | ||||
|         print(f"deleting old file {old_file}") | ||||
|         os.remove(old_file) | ||||
| 
 | ||||
|         out.release() | ||||
|         out = cv2.VideoWriter(video_address_for(last_time_stamp),  | ||||
|         out = cv2.VideoWriter(path_to_video_at(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(minutes=10)))) | ||||
| 
 | ||||
|         new_file = path_to_video_at(five_minute_segment_from(datetime.now() - timedelta(minutes=10))) | ||||
|         pint(f"opening the previously recorded file {new_file} to read from for long mirror") | ||||
|         old_time = cv2.VideoCapture(new_file) | ||||
| 
 | ||||
|     last_time_stamp = five_minute_segment_from(datetime.now()) | ||||
| 
 | ||||
|     ret, frame = camera.read()  | ||||
|     frame = cv2.flip(frame, 1) | ||||
| 
 | ||||
|     #recod the frame | ||||
|     # record the frame to the appropriate file, and also to the short term buffer | ||||
|     out.write(frame) | ||||
|     queue[idx] = ret, frame | ||||
| 
 | ||||
|     prev_frame_valid, prev_frame = queue[(idx - offset) % len(queue)] | ||||
|     old_frame_valid, old_frame = old_time.read() | ||||
|     if not longterm and prev_frame_valid: | ||||
|         cv2.imshow('mirror', prev_frame) | ||||
|     elif longterm and old_frame_valid: | ||||
|         cv2.imshow('mirror', old_frame) | ||||
| 
 | ||||
|     showo, fr = queue[(idx - offset) % len(queue)] | ||||
|     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'):  | ||||
|     key = cv2.waitKey(16) # listen for keyprress for some number of ms | ||||
|     if key & 0xFF == ord('q') or key == 27: # q or esc  | ||||
|         break | ||||
|     if key == ord('a'): | ||||
|     if key & 0xFF == ord('a'): | ||||
|         offset += 1 | ||||
|     if key == ord('d'): | ||||
|     if key & 0xFF == ord('d'): | ||||
|         offset -= 1 | ||||
|     if key == ord('z'): | ||||
|     if key & 0xFF == ord('z'): | ||||
|         longterm = not longterm | ||||
| 
 | ||||
|     idx = (idx + 1) % len(queue) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user