如何在Python中使用GPU计算FPS



我正在进行一个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,GPU在大多数情况下都处于50-60%,那么我们可能会得到正确的值。

有没有人用GPU计算过FPS。有没有任何预构建的库或方法可以用来获得GPU的FPS。请帮忙。感谢

  1. 我想你做得对,所以基本上,FPS=1/("当前操作时间"-"以前的操作时间"(。

  2. 还要检查你的相机是否真的是每秒60帧的流媒体。你可以在OpenCV中使用它。

    cap = cv2.VideoCapture(0)

    fps = cap.get(cv2.CAP_PROP_FPS)

  3. 大多数WebCam都以每秒30帧的速度锁定。

如果你已经想出了解决方案,一定要告诉我。

最新更新