Spaces:
Sleeping
Sleeping
Update services/video_service.py
Browse files- services/video_service.py +40 -11
services/video_service.py
CHANGED
@@ -1,28 +1,48 @@
|
|
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 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
@@ -35,7 +55,7 @@ def get_next_video_frame():
|
|
35 |
frame_index = 0
|
36 |
ret, frame = cap.read()
|
37 |
if not ret:
|
38 |
-
raise RuntimeError("Failed to read video
|
39 |
|
40 |
frame_index += 1
|
41 |
return frame
|
@@ -47,4 +67,13 @@ def reset_video_index():
|
|
47 |
global frame_index
|
48 |
frame_index = 0
|
49 |
if cap is not None:
|
50 |
-
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
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
|
|
|
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
|