lokesh341 commited on
Commit
7010de5
·
1 Parent(s): 88fa89f

Update services/video_service.py

Browse files
Files changed (1) hide show
  1. services/video_service.py +37 -44
services/video_service.py CHANGED
@@ -1,57 +1,50 @@
 
1
  import cv2
2
  import os
3
 
4
- # Global state
5
- VIDEO_DIR = "data"
6
- video_files = [os.path.join(VIDEO_DIR, file) for file in sorted(os.listdir(VIDEO_DIR)) if file.endswith((".mp4", ".avi"))]
7
- video_index = 0
8
  cap = None
9
- FRAME_SKIP = 3 # Skip more frames for faster processing
10
- PRELOADED_FRAMES = []
11
 
12
  def preload_video():
13
- global cap, video_index, PRELOADED_FRAMES
14
- if not video_files:
15
- return
16
- cap = cv2.VideoCapture(video_files[video_index])
17
- for _ in range(5): # Preload 5 frames
18
- ret, frame = cap.read()
19
- if ret:
20
- frame = cv2.resize(frame, (320, 240)) # Reduce resolution for faster loading
21
- PRELOADED_FRAMES.append(frame)
22
- else:
23
- break
24
- cap.release()
25
- cap = None
26
 
27
  def get_next_video_frame():
28
- global cap, video_index, PRELOADED_FRAMES
29
-
30
- if not video_files:
31
- raise RuntimeError("No video files found in the 'data' directory.")
32
-
33
- if PRELOADED_FRAMES:
34
- frame = PRELOADED_FRAMES.pop(0)
35
- return frame
36
-
37
- if cap is None or not cap.isOpened():
38
- cap = cv2.VideoCapture(video_files[video_index])
39
-
40
- for _ in range(FRAME_SKIP):
 
41
  ret, frame = cap.read()
42
  if not ret:
43
- cap.release()
44
- video_index = (video_index + 1) % len(video_files)
45
- cap = cv2.VideoCapture(video_files[video_index])
46
- ret, frame = cap.read()
47
- if not ret:
48
- raise RuntimeError(f"Cannot read video {video_files[video_index]}")
49
- break
50
-
51
- frame = cv2.resize(frame, (320, 240)) # Reduce resolution for faster processing
52
  return frame
53
 
54
  def reset_video_index():
55
- global video_index
56
- video_index = 0
57
- preload_video()
 
 
 
 
 
1
+ # services/video_service.py
2
  import cv2
3
  import os
4
 
5
+ # Global variables
6
+ video_path = "sample.mp4" # Default video file
 
 
7
  cap = None
8
+ frame_index = 0
 
9
 
10
  def preload_video():
11
+ """
12
+ Preload the video file.
13
+ """
14
+ global cap
15
+ if not os.path.exists(video_path):
16
+ raise FileNotFoundError(f"Video file {video_path} not found.")
17
+ cap = cv2.VideoCapture(video_path)
18
+ if not cap.isOpened():
19
+ raise RuntimeError("Failed to open video file.")
 
 
 
 
20
 
21
  def get_next_video_frame():
22
+ """
23
+ Get the next frame from the video.
24
+ Returns:
25
+ numpy array: Video frame
26
+ """
27
+ global cap, frame_index
28
+ if cap is None:
29
+ raise RuntimeError("Video not preloaded. Call preload_video() first.")
30
+
31
+ ret, frame = cap.read()
32
+ if not ret:
33
+ # Loop the video
34
+ cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
35
+ frame_index = 0
36
  ret, frame = cap.read()
37
  if not ret:
38
+ raise RuntimeError("Failed to read video frame.")
39
+
40
+ frame_index += 1
 
 
 
 
 
 
41
  return frame
42
 
43
  def reset_video_index():
44
+ """
45
+ Reset the video frame index.
46
+ """
47
+ global frame_index
48
+ frame_index = 0
49
+ if cap is not None:
50
+ cap.set(cv2.CAP_PROP_POS_FRAMES, 0)