Spaces:
Runtime error
Runtime error
| import cv2 | |
| import os | |
| # Global state | |
| VIDEO_DIR = "data" | |
| video_files = [os.path.join(VIDEO_DIR, file) for file in sorted(os.listdir(VIDEO_DIR)) if file.endswith((".mp4", ".avi"))] | |
| video_index = 0 | |
| cap = None | |
| FRAME_SKIP = 3 # Skip more frames for faster processing | |
| PRELOADED_FRAMES = [] | |
| def preload_video(): | |
| global cap, video_index, PRELOADED_FRAMES | |
| if not video_files: | |
| return | |
| cap = cv2.VideoCapture(video_files[video_index]) | |
| for _ in range(5): # Preload 5 frames | |
| ret, frame = cap.read() | |
| if ret: | |
| frame = cv2.resize(frame, (320, 240)) # Reduce resolution for faster loading | |
| PRELOADED_FRAMES.append(frame) | |
| else: | |
| break | |
| cap.release() | |
| cap = None | |
| def get_next_video_frame(): | |
| global cap, video_index, PRELOADED_FRAMES | |
| if not video_files: | |
| raise RuntimeError("No video files found in the 'data' directory.") | |
| if PRELOADED_FRAMES: | |
| frame = PRELOADED_FRAMES.pop(0) | |
| return frame | |
| if cap is None or not cap.isOpened(): | |
| cap = cv2.VideoCapture(video_files[video_index]) | |
| for _ in range(FRAME_SKIP): | |
| ret, frame = cap.read() | |
| if not ret: | |
| cap.release() | |
| video_index = (video_index + 1) % len(video_files) | |
| cap = cv2.VideoCapture(video_files[video_index]) | |
| ret, frame = cap.read() | |
| if not ret: | |
| raise RuntimeError(f"Cannot read video {video_files[video_index]}") | |
| break | |
| frame = cv2.resize(frame, (320, 240)) # Reduce resolution for faster processing | |
| return frame | |
| def reset_video_index(): | |
| global video_index | |
| video_index = 0 | |
| preload_video() |