如何在Python中使用GPU计算FPS

问题描述 投票:0回答:1

我正在从事一个计算机视觉项目,其中所有处理或推理都在 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?

python-3.x computer-vision video-streaming gpu frame-rate
1个回答
0
投票
  1. 我想你做得对,所以基本上,FPS = 1/('当前操作时间' - '先前操作时间')。

  2. 还要检查您的相机是否确实以 60 fps 进行流传输。您可以使用它在 OpenCV 中完成此操作。

    cap = cv2.VideoCapture(0)

    fps =  cap.get(cv2.CAP_PROP_FPS)

  3. 大多数网络摄像头都锁定在 30 fps。

如果您找到解决方案,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.