Spaces:
Running
Running
improvement: FPS counter + frame timing
Browse files- src/app.py +25 -9
src/app.py
CHANGED
@@ -7,31 +7,47 @@ app = Flask(__name__)
|
|
7 |
|
8 |
latest_frame = None
|
9 |
lock = threading.Lock()
|
|
|
10 |
|
11 |
def video_reader():
|
12 |
-
global latest_frame
|
|
|
13 |
cap = cv2.VideoCapture('videos/classroom.mp4')
|
14 |
framerate = cap.get(cv2.CAP_PROP_FPS)
|
15 |
-
frame_duration = 1
|
16 |
-
|
17 |
-
latest_frame_accessed_time = time.time()
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
while True:
|
20 |
-
start_time = time.time()
|
21 |
ret, frame = cap.read()
|
22 |
|
|
|
23 |
ret, jpeg = cv2.imencode('.jpg', frame)
|
24 |
if ret:
|
25 |
with lock:
|
26 |
latest_frame = jpeg.tobytes()
|
27 |
-
|
28 |
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
31 |
|
32 |
-
|
|
|
|
|
33 |
if sleep_time > 0:
|
34 |
time.sleep(sleep_time)
|
|
|
|
|
35 |
|
36 |
def generate():
|
37 |
while True:
|
|
|
7 |
|
8 |
latest_frame = None
|
9 |
lock = threading.Lock()
|
10 |
+
measured_fps = 0
|
11 |
|
12 |
def video_reader():
|
13 |
+
global latest_frame, lock, measured_fps
|
14 |
+
|
15 |
cap = cv2.VideoCapture('videos/classroom.mp4')
|
16 |
framerate = cap.get(cv2.CAP_PROP_FPS)
|
17 |
+
frame_duration = 1 / framerate
|
|
|
|
|
18 |
|
19 |
+
# variables to measure FPS
|
20 |
+
frame_count = 0
|
21 |
+
last_time = time.time()
|
22 |
+
rolling_duration = 0.5
|
23 |
+
|
24 |
+
# variables to control framerate
|
25 |
+
next_frame_time = time.time()
|
26 |
+
|
27 |
while True:
|
|
|
28 |
ret, frame = cap.read()
|
29 |
|
30 |
+
cv2.putText(frame, f"{measured_fps: .0f}", (frame.shape[1] - 70, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
|
31 |
ret, jpeg = cv2.imencode('.jpg', frame)
|
32 |
if ret:
|
33 |
with lock:
|
34 |
latest_frame = jpeg.tobytes()
|
35 |
+
frame_count += 1
|
36 |
|
37 |
+
# measure FPS
|
38 |
+
now = time.time()
|
39 |
+
if now - last_time >= rolling_duration:
|
40 |
+
measured_fps = frame_count / (now - last_time)
|
41 |
+
frame_count = 0
|
42 |
+
last_time = now
|
43 |
|
44 |
+
# control framerate
|
45 |
+
next_frame_time += frame_duration
|
46 |
+
sleep_time = next_frame_time - time.time()
|
47 |
if sleep_time > 0:
|
48 |
time.sleep(sleep_time)
|
49 |
+
else:
|
50 |
+
next_frame_time = time.time()
|
51 |
|
52 |
def generate():
|
53 |
while True:
|