需求
项目中经常遇到不是摄像头就是网线的问题,曾经遇到一个项目算法日志一直报 warning,经过好几个小时的远程排查,发现是摄像头的 fps 不稳定,而且出现 fps 逐渐降低的情况,所以算法跑着跑着就挂了。
于是就需要开发一个测试 fps 的工具,工具倒是不复杂,主要依赖 opencv-python 库读取摄像头视频流。
代码
最基础版本
import argparse
import sys
import time
import cv2
parser = argparse.ArgumentParser()
ip = parser.add_argument("-i", "--ip", type=str)
args = parser.parse_args()
frame_id = 0
cap = cv2.VideoCapture(f"rtsp://username:password@{
args.ip}:554/Streaming/Channels/101")
while True:
try:
ret, frame = cap.read()
if not ret:
break
else:
frame_id += 1
if frame_id < 100:
remainder = frame_id % 5
if remainder == 0:
print(f"wait:{
'-' * (frame_id // 5)}>", end="\r")
if frame_id == 100:
time_start = time.time()
if frame_id > 100:
time_end = time.time()
print(
f"fps: {
(frame_id - 100) / (time_end - time_start)}",
end="\r",
)
except KeyboardInterrupt:
exit(-1)
\r 是回车符,光标会回到行首。但是只有一串数字输出,所以经过我的改良有了下面的一版: 改良版本
import argparse
import atexit
import sys
import time