surveillance143 / services /video_service.py
lokesh341's picture
Update services/video_service.py
2d452c2
raw
history blame
2.58 kB
import cv2
import os
import logging
# Setup logging
logging.basicConfig(
filename="app.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
# Global video capture object
video_cap = None
current_frame_index = 0
def preload_video(video_path):
"""
Preload the video file.
Args:
video_path: Path to the video file
Returns:
str: Status message
"""
global video_cap, current_frame_index
try:
if not os.path.exists(video_path):
raise FileNotFoundError(f"Video file not found at {video_path}")
video_cap = cv2.VideoCapture(video_path)
if not video_cap.isOpened():
raise RuntimeError("Failed to open video file.")
current_frame_index = 0
total_frames = int(video_cap.get(cv2.CAP_PROP_FRAME_COUNT))
logging.info(f"Preloaded video: {video_path} with {total_frames} frames.")
return f"Successfully loaded video: {video_path} ({total_frames} frames)"
except Exception as e:
logging.error(f"Error preloading video: {str(e)}")
return f"Error loading video: {str(e)}"
def get_next_video_frame():
"""
Get the next frame from the video.
Returns:
numpy array: Frame if successful, None otherwise
"""
global video_cap, current_frame_index
if video_cap is None or not video_cap.isOpened():
logging.error("Video capture not initialized.")
return None
try:
# Set frame position
video_cap.set(cv2.CAP_PROP_POS_FRAMES, current_frame_index)
ret, frame = video_cap.read()
if not ret:
# Loop back to the start
current_frame_index = 0
video_cap.set(cv2.CAP_PROP_POS_FRAMES, current_frame_index)
ret, frame = video_cap.read()
if not ret:
raise RuntimeError("Failed to read frame from video.")
current_frame_index += 1
logging.debug(f"Retrieved frame {current_frame_index} from video.")
return frame
except Exception as e:
logging.error(f"Error retrieving frame: {str(e)}")
return None
def reset_video_index():
"""
Reset the frame index to the beginning.
"""
global current_frame_index
current_frame_index = 0
logging.info("Reset video frame index to 0.")
def release_video():
"""
Release the video capture object.
"""
global video_cap
if video_cap is not None:
video_cap.release()
video_cap = None
logging.info("Released video capture object.")