lokesh341 commited on
Commit
3dfdd5f
·
1 Parent(s): 60a6bef

Update services/video_service.py

Browse files
Files changed (1) hide show
  1. services/video_service.py +56 -48
services/video_service.py CHANGED
@@ -1,79 +1,87 @@
1
  import cv2
2
  import os
 
3
 
4
- # Global variables
5
- cap = None
6
- frame_index = 0
7
- current_video_path = None
 
 
8
 
9
- def preload_video(video_path="sample.mp4"):
 
 
 
 
10
  """
11
  Preload the video file.
12
  Args:
13
- video_path (str): Path to the video file.
14
  Returns:
15
- str: Status message indicating success or failure.
16
  """
17
- global cap, frame_index, current_video_path
18
  try:
19
- # Reset previous capture if any
20
- if cap is not None:
21
- cap.release()
22
-
23
- # Check if video file exists
24
  if not os.path.exists(video_path):
25
- raise FileNotFoundError(f"Video file {video_path} not found. Please upload a video file named 'sample.mp4' or provide a different path.")
26
 
27
- # Initialize video capture
28
- cap = cv2.VideoCapture(video_path)
29
- if not cap.isOpened():
30
- raise RuntimeError(f"Failed to open video file {video_path}. Ensure the file is a valid video format (e.g., .mp4).")
31
 
32
- frame_index = 0
33
- current_video_path = video_path
34
- return f"Successfully loaded video: {video_path}"
 
35
  except Exception as e:
36
- cap = None
37
  return f"Error loading video: {str(e)}"
38
 
39
  def get_next_video_frame():
40
  """
41
  Get the next frame from the video.
42
  Returns:
43
- numpy array: Video frame
44
- Raises:
45
- RuntimeError: If video is not preloaded or frame cannot be read.
46
  """
47
- global cap, frame_index
48
- if cap is None:
49
- raise RuntimeError("Video not preloaded. Call preload_video() first.")
50
-
51
- ret, frame = cap.read()
52
- if not ret:
53
- # Loop the video
54
- cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
55
- frame_index = 0
56
- ret, frame = cap.read()
57
  if not ret:
58
- raise RuntimeError(f"Failed to read frame from video {current_video_path}.")
59
-
60
- frame_index += 1
61
- return frame
 
 
 
 
 
 
 
 
 
62
 
63
  def reset_video_index():
64
  """
65
- Reset the video frame index.
66
  """
67
- global frame_index
68
- frame_index = 0
69
- if cap is not None:
70
- cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
71
 
72
  def release_video():
73
  """
74
  Release the video capture object.
75
  """
76
- global cap
77
- if cap is not None:
78
- cap.release()
79
- cap = None
 
 
1
  import cv2
2
  import os
3
+ import logging
4
 
5
+ # Setup logging
6
+ logging.basicConfig(
7
+ filename="app.log",
8
+ level=logging.INFO,
9
+ format="%(asctime)s - %(levelname)s - %(message)s"
10
+ )
11
 
12
+ # Global video capture object
13
+ video_cap = None
14
+ current_frame_index = 0
15
+
16
+ def preload_video(video_path):
17
  """
18
  Preload the video file.
19
  Args:
20
+ video_path: Path to the video file
21
  Returns:
22
+ str: Status message
23
  """
24
+ global video_cap, current_frame_index
25
  try:
 
 
 
 
 
26
  if not os.path.exists(video_path):
27
+ raise FileNotFoundError(f"Video file not found at {video_path}")
28
 
29
+ video_cap = cv2.VideoCapture(video_path)
30
+ if not video_cap.isOpened():
31
+ raise RuntimeError("Failed to open video file.")
 
32
 
33
+ current_frame_index = 0
34
+ total_frames = int(video_cap.get(cv2.CAP_PROP_FRAME_COUNT))
35
+ logging.info(f"Preloaded video: {video_path} with {total_frames} frames.")
36
+ return f"Successfully loaded video: {video_path} ({total_frames} frames)"
37
  except Exception as e:
38
+ logging.error(f"Error preloading video: {str(e)}")
39
  return f"Error loading video: {str(e)}"
40
 
41
  def get_next_video_frame():
42
  """
43
  Get the next frame from the video.
44
  Returns:
45
+ numpy array: Frame if successful, None otherwise
 
 
46
  """
47
+ global video_cap, current_frame_index
48
+ if video_cap is None or not video_cap.isOpened():
49
+ logging.error("Video capture not initialized.")
50
+ return None
51
+
52
+ try:
53
+ # Set frame position
54
+ video_cap.set(cv2.CAP_PROP_POS_FRAMES, current_frame_index)
55
+ ret, frame = video_cap.read()
 
56
  if not ret:
57
+ # Loop back to the start
58
+ current_frame_index = 0
59
+ video_cap.set(cv2.CAP_PROP_POS_FRAMES, current_frame_index)
60
+ ret, frame = video_cap.read()
61
+ if not ret:
62
+ raise RuntimeError("Failed to read frame from video.")
63
+
64
+ current_frame_index += 1
65
+ logging.debug(f"Retrieved frame {current_frame_index} from video.")
66
+ return frame
67
+ except Exception as e:
68
+ logging.error(f"Error retrieving frame: {str(e)}")
69
+ return None
70
 
71
  def reset_video_index():
72
  """
73
+ Reset the frame index to the beginning.
74
  """
75
+ global current_frame_index
76
+ current_frame_index = 0
77
+ logging.info("Reset video frame index to 0.")
 
78
 
79
  def release_video():
80
  """
81
  Release the video capture object.
82
  """
83
+ global video_cap
84
+ if video_cap is not None:
85
+ video_cap.release()
86
+ video_cap = None
87
+ logging.info("Released video capture object.")