说明:
用于代码计算帧率fps,帧率fps = 每秒运行帧数(f/s)。
常用函数两种:time(),timeit.default_timer()
一、time()
time.time():返回当前时间的时间(从1970纪元开始的浮点秒数)
import time
print(time.time())
运行结果:1583933719.603091,大约计算一下1970-2020年60*60*24*30*12*50=1.56*e9,差不离。单位为秒
用在测试视频的代码中:
sum_time = 0.0 #当前耗费总时长
fps_curr = 0.0 #当前帧率
frame_num = 0 #当前读入总帧数
video_capture = cv2.VideoCapture(video_path)
while True:
starttime = time.time()
frame_num = frame_num +1
ret, frame = video_capture.read() # 循环读入每一帧
if ret != True:
break
--------------------------
程序主体
--------------------------
endtime = time.time()
sum_time = endtime - starttime + sum_time
fps_curr = sum_time/frame_num
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()
二、 timeit.default_timer()
timeit.default_timer()
默认的计时器,一般是 time.perf_counter(),time.perf_counter() 方法能够在任一平台提供最高精度的计时器(它也只是记录了自然时间,记录自然时间会被很多其他因素影响,例如计算机的负载)。
from timeit import default_timer as timer
accum_time = 0
curr_fps = 0
fps = "FPS: ??"
prev_time = timer()
vid = cv2.VideoCapture(video_path)
while True:
return_value, frame = vid.read()
------------------------------
程序主体(例如
image = Image.fromarray(frame)
image = yolo.detect_image(image)
------------------------------
curr_time = timer()
exec_time = curr_time - prev_time
prev_time = curr_time
accum_time = accum_time + exec_time
curr_fps = curr_fps + 1
if accum_time > 1:
accum_time = accum_time - 1
fps = "FPS: " + str(curr_fps)
curr_fps = 0
if cv2.waitKey(1) & 0xFF == ord('q'):
break
注:此例来源于yolov3_keras;另注意import的方式