surveillance / services /video_service.py
lokesh341's picture
Update services/video_service.py
0f1ca3c
raw
history blame
1.69 kB
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()