【发布时间】:2022-08-03 03:43:42
【问题描述】:
我正在处理一个computer vision 项目,所有处理或推理都在 GPU 上进行。我需要计算从视频流中获得的实时 FPS。此视频流可以是视频文件或 RTSP 视频流。
我写了一个简单的逻辑来计算 FPS。如下所示:
cap = cv2.VideoCapture(0)
fps_start_time = datetime.datetime.now()
fps = 0
total_frames = 1
while True:
ret, frame = cap.read()
total_frames = total_frames + 1
\"\"\"
All the processing and
inferencing happens here
\"\"\"
fps_end_time = datetime.datetime.now()
time_diff = fps_end_time - fps_start_time
fps = (total_frames / time_diff.seconds)
fps_text = \"FPS: {:.2f}\".format(fps)
print(fps_text)
cv2.putText(frame, fps_text, (5, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
cv2.imshow(\"Application\", frame)
key = cv2.waitKey(1)
if key == ord(\'q\'):
break
只是为了解释上述逻辑,我在开始推理之前使用fps_start_time。推理完成后,我将采用fps_end_time,然后用开始时间减去结束时间并将时间差异除以帧以获得 FPS。如果您在 CPU 上进行所有推理,这可以正常工作。但是,如果您的推理是在 GPU 上进行的,则会显示不正确的值。
我有一个定制的硬件,其中 GPU 非常高端,而 CPU 很低,因此在推断时我可以在输出视频中看到,没有滞后/延迟,但 FPS 仍然保持在 6-7 左右,实际上它看起来像 25 -30。发生这种情况的原因是,推理时的 CPU 使用率始终在 95% 左右,因此 FPS 很低。如果我们使用 GPU 进行 FPS,大部分时间为 50-60%,那么我们可能会得到正确的值。
有没有人用GPU计算过FPS。是否有任何可用的预构建库或方法可用于获取 GPU 的 FPS。请帮忙。谢谢
-
有同样的问题,没有其他解决方案?
标签: python-3.x computer-vision video-streaming gpu frame-rate