Spaces:
Runtime error
Runtime error
thinh-huynh-re
commited on
Commit
•
6b89aad
1
Parent(s):
0d6e19f
Recording
Browse files- .gitignore +1 -0
- run_opencv.py +26 -7
- utils/frame_rate.py +7 -2
- utils/img_container.py +3 -0
.gitignore
CHANGED
@@ -2,3 +2,4 @@ __pycache__
|
|
2 |
env
|
3 |
tmp/*
|
4 |
!tmp/.gitkeep
|
|
|
|
2 |
env
|
3 |
tmp/*
|
4 |
!tmp/.gitkeep
|
5 |
+
*.mp4
|
run_opencv.py
CHANGED
@@ -83,12 +83,23 @@ SKIP_FRAMES = 4
|
|
83 |
num_skips = 0
|
84 |
|
85 |
# define a video capture object
|
86 |
-
|
87 |
|
88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
# Capture the video frame
|
90 |
# by frame
|
91 |
-
ret, frame =
|
92 |
|
93 |
num_skips = (num_skips + 1) % SKIP_FRAMES
|
94 |
|
@@ -97,19 +108,27 @@ while vid.isOpened():
|
|
97 |
|
98 |
if num_skips == 0:
|
99 |
img_container.add_frame(frame)
|
100 |
-
inference()
|
101 |
-
rs = img_container.frame_rate.show_fps(frame)
|
102 |
|
103 |
# Display the resulting frame
|
104 |
cv2.imshow("ActivityTracking", rs)
|
105 |
|
|
|
|
|
|
|
106 |
# the 'q' button is set as the
|
107 |
# quitting button you may use any
|
108 |
# desired button of your choice
|
109 |
-
|
|
|
|
|
110 |
break
|
|
|
|
|
111 |
|
112 |
# After the loop release the cap object
|
113 |
-
|
|
|
114 |
# Destroy all the windows
|
115 |
cv2.destroyAllWindows()
|
|
|
83 |
num_skips = 0
|
84 |
|
85 |
# define a video capture object
|
86 |
+
camera = cv2.VideoCapture(0)
|
87 |
|
88 |
+
frame_width = int(camera.get(3))
|
89 |
+
frame_height = int(camera.get(4))
|
90 |
+
size = (frame_width, frame_height)
|
91 |
+
|
92 |
+
video_output = cv2.VideoWriter(
|
93 |
+
"activities.mp4", cv2.VideoWriter_fourcc(*"MJPG"), 10, size
|
94 |
+
)
|
95 |
+
|
96 |
+
if camera.isOpened() == False:
|
97 |
+
print("Error reading video file")
|
98 |
+
|
99 |
+
while camera.isOpened():
|
100 |
# Capture the video frame
|
101 |
# by frame
|
102 |
+
ret, frame = camera.read()
|
103 |
|
104 |
num_skips = (num_skips + 1) % SKIP_FRAMES
|
105 |
|
|
|
108 |
|
109 |
if num_skips == 0:
|
110 |
img_container.add_frame(frame)
|
111 |
+
# inference()
|
112 |
+
rs = img_container.frame_rate.show_fps(frame, img_container.is_recording)
|
113 |
|
114 |
# Display the resulting frame
|
115 |
cv2.imshow("ActivityTracking", rs)
|
116 |
|
117 |
+
if img_container.is_recording:
|
118 |
+
video_output.write(rs)
|
119 |
+
|
120 |
# the 'q' button is set as the
|
121 |
# quitting button you may use any
|
122 |
# desired button of your choice
|
123 |
+
k = cv2.waitKey(1)
|
124 |
+
|
125 |
+
if k == ord("q"):
|
126 |
break
|
127 |
+
elif k == ord("r"):
|
128 |
+
img_container.toggle_recording()
|
129 |
|
130 |
# After the loop release the cap object
|
131 |
+
camera.release()
|
132 |
+
video_output.release()
|
133 |
# Destroy all the windows
|
134 |
cv2.destroyAllWindows()
|
utils/frame_rate.py
CHANGED
@@ -27,9 +27,9 @@ class FrameRate:
|
|
27 |
self.fps = self.NO_FRAMES / (end_time - self.start_time)
|
28 |
self.start_time = end_time
|
29 |
|
30 |
-
def show_fps(self, image: np.ndarray) -> np.ndarray:
|
31 |
if self.fps != -1:
|
32 |
-
|
33 |
image,
|
34 |
f"FPS {self.fps:.0f} _ {self.label}",
|
35 |
(50, 50),
|
@@ -38,5 +38,10 @@ class FrameRate:
|
|
38 |
color=(255, 0, 0),
|
39 |
thickness=2,
|
40 |
)
|
|
|
|
|
|
|
|
|
|
|
41 |
else:
|
42 |
return image
|
|
|
27 |
self.fps = self.NO_FRAMES / (end_time - self.start_time)
|
28 |
self.start_time = end_time
|
29 |
|
30 |
+
def show_fps(self, image: np.ndarray, is_recording=False) -> np.ndarray:
|
31 |
if self.fps != -1:
|
32 |
+
image = cv2.putText(
|
33 |
image,
|
34 |
f"FPS {self.fps:.0f} _ {self.label}",
|
35 |
(50, 50),
|
|
|
38 |
color=(255, 0, 0),
|
39 |
thickness=2,
|
40 |
)
|
41 |
+
if is_recording:
|
42 |
+
image = cv2.circle(
|
43 |
+
image, (50, 100), radius=10, color=(0, 0, 255), thickness=-1
|
44 |
+
)
|
45 |
+
return image
|
46 |
else:
|
47 |
return image
|
utils/img_container.py
CHANGED
@@ -20,6 +20,9 @@ class ImgContainer:
|
|
20 |
self.imgs.pop(0)
|
21 |
self.imgs.append(frame)
|
22 |
|
|
|
|
|
|
|
23 |
@property
|
24 |
def ready(self):
|
25 |
return len(self.imgs) == self.frames_per_video
|
|
|
20 |
self.imgs.pop(0)
|
21 |
self.imgs.append(frame)
|
22 |
|
23 |
+
def toggle_recording(self) -> None:
|
24 |
+
self.is_recording = not self.is_recording
|
25 |
+
|
26 |
@property
|
27 |
def ready(self):
|
28 |
return len(self.imgs) == self.frames_per_video
|