Spaces:
Sleeping
Sleeping
refactor: optimize frame processing by removing sleep
Browse files
app.py
CHANGED
@@ -38,48 +38,43 @@ def frame_processor(session_id: str):
|
|
38 |
next_frame_time = time.time()
|
39 |
|
40 |
while True:
|
41 |
-
ret, frame = cap.read()
|
42 |
-
|
43 |
-
# measure FPS
|
44 |
-
frame_count += 1
|
45 |
-
now = time.time()
|
46 |
-
if now - last_time >= rolling_duration:
|
47 |
-
session.measured_fps = frame_count / (now - last_time)
|
48 |
-
session.cpu_usage = psutil.cpu_percent(interval=None)
|
49 |
-
frame_count = 0
|
50 |
-
last_time = now
|
51 |
-
|
52 |
-
if not ret:
|
53 |
-
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
54 |
-
continue
|
55 |
-
else:
|
56 |
-
if session.show_stats:
|
57 |
-
font = cv2.FONT_HERSHEY_SIMPLEX
|
58 |
-
font_scale = 1
|
59 |
-
thickness = 2
|
60 |
-
color = (0, 255, 0)
|
61 |
-
text =f"""
|
62 |
-
ID: {session_id}
|
63 |
-
FPS: {session.measured_fps:.0f}
|
64 |
-
CPU: {session.cpu_usage:02.0f}%
|
65 |
-
"""
|
66 |
-
|
67 |
-
y0, dy = 30, 36
|
68 |
-
for i, line in enumerate(text.split('\n')):
|
69 |
-
(text_width, text_height), _ = cv2.getTextSize(line, font, font_scale, thickness)
|
70 |
-
x = frame.shape[1] - text_width - 10
|
71 |
-
y = y0 + (i - 1) * dy
|
72 |
-
cv2.putText(frame, line, (x, y), font, font_scale, color, thickness, cv2.LINE_AA)
|
73 |
-
|
74 |
# control framerate
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
def stream_mjpeg(session_id: str):
|
85 |
global sessions
|
|
|
38 |
next_frame_time = time.time()
|
39 |
|
40 |
while True:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
# control framerate
|
42 |
+
if time.time() >= next_frame_time:
|
43 |
+
ret, frame = cap.read()
|
44 |
+
|
45 |
+
# measure FPS
|
46 |
+
frame_count += 1
|
47 |
+
now = time.time()
|
48 |
+
if now - last_time >= rolling_duration:
|
49 |
+
session.measured_fps = frame_count / (now - last_time)
|
50 |
+
session.cpu_usage = psutil.cpu_percent(interval=None)
|
51 |
+
frame_count = 0
|
52 |
+
last_time = now
|
53 |
+
|
54 |
+
if not ret:
|
55 |
+
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
56 |
+
continue
|
57 |
+
else:
|
58 |
+
if session.show_stats:
|
59 |
+
font = cv2.FONT_HERSHEY_SIMPLEX
|
60 |
+
font_scale = 1
|
61 |
+
thickness = 2
|
62 |
+
color = (0, 255, 0)
|
63 |
+
text =f"""
|
64 |
+
ID: {session_id}
|
65 |
+
FPS: {session.measured_fps:.0f}
|
66 |
+
CPU: {session.cpu_usage:02.0f}%
|
67 |
+
"""
|
68 |
+
|
69 |
+
y0, dy = 30, 36
|
70 |
+
for i, line in enumerate(text.split('\n')):
|
71 |
+
(text_width, text_height), _ = cv2.getTextSize(line, font, font_scale, thickness)
|
72 |
+
x = frame.shape[1] - text_width - 10
|
73 |
+
y = y0 + (i - 1) * dy
|
74 |
+
cv2.putText(frame, line, (x, y), font, font_scale, color, thickness, cv2.LINE_AA)
|
75 |
+
session.latest_frame = frame
|
76 |
+
|
77 |
+
next_frame_time += frame_duration
|
78 |
|
79 |
def stream_mjpeg(session_id: str):
|
80 |
global sessions
|