Spaces:
Sleeping
Sleeping
Update services/video_service.py
Browse files- services/video_service.py +27 -4
services/video_service.py
CHANGED
@@ -6,14 +6,34 @@ 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 =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
def get_next_video_frame():
|
12 |
-
global cap, video_index
|
13 |
|
14 |
if not video_files:
|
15 |
raise RuntimeError("No video files found in the 'data' directory.")
|
16 |
|
|
|
|
|
|
|
|
|
17 |
if cap is None or not cap.isOpened():
|
18 |
cap = cv2.VideoCapture(video_files[video_index])
|
19 |
|
@@ -26,9 +46,12 @@ def get_next_video_frame():
|
|
26 |
ret, frame = cap.read()
|
27 |
if not ret:
|
28 |
raise RuntimeError(f"Cannot read video {video_files[video_index]}")
|
29 |
-
|
|
|
|
|
30 |
return frame
|
31 |
|
32 |
def reset_video_index():
|
33 |
global video_index
|
34 |
-
video_index = 0
|
|
|
|
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 |
|
|
|
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()
|