jukrapopk commited on
Commit
e2c8d12
·
1 Parent(s): c62986f

show cpu usage

Browse files
Files changed (1) hide show
  1. app.py +22 -15
app.py CHANGED
@@ -4,12 +4,14 @@ from cv2.typing import MatLike
4
  import threading
5
  import time
6
  import os
 
7
 
8
  class Session:
9
- def __init__(self, id: str, latest_frame: MatLike, measured_fps: float, show_fps: bool):
10
  self.id = id
11
  self.latest_frame: MatLike = latest_frame
12
  self.measured_fps = measured_fps
 
13
  self.show_fps = show_fps
14
 
15
  app = Flask(__name__)
@@ -38,29 +40,32 @@ def frame_processor(session_id: str):
38
  while True:
39
  ret, frame = cap.read()
40
 
 
 
 
 
 
 
 
 
 
41
  if not ret:
42
  cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
43
  continue
44
  else:
45
  if session.show_fps:
46
- text = f"{session_id}: {session.measured_fps:.0f}"
47
  font = cv2.FONT_HERSHEY_SIMPLEX
48
  font_scale = 1
49
  thickness = 2
50
  color = (0, 255, 0)
51
- (text_width, text_height), _ = cv2.getTextSize(text, font, font_scale, thickness)
52
- x = frame.shape[1] - text_width - 10
53
- y = 30
54
- cv2.putText(frame, text, (x, y), font, font_scale, color, thickness, cv2.LINE_AA)
55
- session.latest_frame = frame
56
 
57
- # measure FPS
58
- frame_count += 1
59
- now = time.time()
60
- if now - last_time >= rolling_duration:
61
- session.measured_fps = frame_count / (now - last_time)
62
- frame_count = 0
63
- last_time = now
64
 
65
  # control framerate
66
  next_frame_time += frame_duration
@@ -70,6 +75,8 @@ def frame_processor(session_id: str):
70
  else:
71
  next_frame_time = time.time()
72
 
 
 
73
  def stream_mjpeg(session_id: str):
74
  global sessions
75
 
@@ -93,7 +100,7 @@ def video_feed():
93
  session_id = request.args.get("id", "default")
94
 
95
  if session_id not in [s.id for s in sessions]:
96
- session = Session(session_id, None, 0, True)
97
  sessions.add(session)
98
  threading.Thread(target=frame_processor, args=[session_id], daemon=True).start()
99
 
 
4
  import threading
5
  import time
6
  import os
7
+ import psutil
8
 
9
  class Session:
10
+ def __init__(self, id: str, latest_frame: MatLike, measured_fps: float, cpu_usage: float, show_fps: bool):
11
  self.id = id
12
  self.latest_frame: MatLike = latest_frame
13
  self.measured_fps = measured_fps
14
+ self.cpu_usage = cpu_usage
15
  self.show_fps = show_fps
16
 
17
  app = Flask(__name__)
 
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_fps:
 
57
  font = cv2.FONT_HERSHEY_SIMPLEX
58
  font_scale = 1
59
  thickness = 2
60
  color = (0, 255, 0)
61
+ text = f"ID: {session_id}\n FPS: {session.measured_fps:.0f}\n CPU: {session.cpu_usage:02.0f}%"
 
 
 
 
62
 
63
+ y0, dy = 30, 36
64
+ for i, line in enumerate(text.split('\n')):
65
+ (text_width, text_height), _ = cv2.getTextSize(line, font, font_scale, thickness)
66
+ x = frame.shape[1] - text_width - 10
67
+ y = y0 + i*dy
68
+ cv2.putText(frame, line, (x, y), font, font_scale, color, thickness, cv2.LINE_AA)
 
69
 
70
  # control framerate
71
  next_frame_time += frame_duration
 
75
  else:
76
  next_frame_time = time.time()
77
 
78
+ session.latest_frame = frame
79
+
80
  def stream_mjpeg(session_id: str):
81
  global sessions
82
 
 
100
  session_id = request.args.get("id", "default")
101
 
102
  if session_id not in [s.id for s in sessions]:
103
+ session = Session(session_id, None, 0, 0, True)
104
  sessions.add(session)
105
  threading.Thread(target=frame_processor, args=[session_id], daemon=True).start()
106