【问题标题】:fps - how to divide count by time function to determine fpsfps - 如何将计数除以时间函数以确定 fps
【发布时间】:2017-05-03 13:08:01
【问题描述】:

我有一个计数器可以计算每一帧。我想要做的是除以时间来确定我的程序的 FPS。但是我不确定如何在python中对计时函数进行操作。

我尝试将时间初始化为

fps_time = time.time 
fps_time = float(time.time)
fps_time = np.float(time.time)
fps_time = time()

然后用于计算fps,

FPS = (counter / fps_time)
FPS = float(counter / fps_time)
FPS = float(counter (fps_time))

但我得到的错误是对象不可调用或不支持 /: 'int' 和 'buildin functions' 的操作数

提前感谢您的帮助!

【问题讨论】:

  • counter 如果您遇到此错误,则必须是一个函数(顺便说一句,请分享给错误)。你可以查看给你print type(counter)的内容,以了解它是哪种类型。

标签: python opencv time frame-rate operations


【解决方案1】:
  • 这是在每一帧打印程序的帧速率的一种非常简单的方法(不需要计数器):

    import time
    
    while True:
        start_time = time.time() # start time of the loop
    
        ########################
        # your fancy code here #
        ########################
    
        print("FPS: ", 1.0 / (time.time() - start_time)) # FPS = 1 / time to process loop
    
  • 如果您希望 平均 帧速率超过 x 秒,您可以这样做(需要计数器):

    import time
    
    start_time = time.time()
    x = 1 # displays the frame rate every 1 second
    counter = 0
    while True:
    
        ########################
        # your fancy code here #
        ########################
    
        counter+=1
        if (time.time() - start_time) > x :
            print("FPS: ", counter / (time.time() - start_time))
            counter = 0
            start_time = time.time()
    

希望对你有帮助!

【讨论】:

  • 如果对您有帮助,请考虑接受答案。 ;)
【解决方案2】:

像魅力一样工作

import time
import collections

class FPS:
    def __init__(self,avarageof=50):
        self.frametimestamps = collections.deque(maxlen=avarageof)
    def __call__(self):
        self.frametimestamps.append(time.time())
        if(len(self.frametimestamps) > 1):
            return len(self.frametimestamps)/(self.frametimestamps[-1]-self.frametimestamps[0])
        else:
            return 0.0
fps = FPS()
for i in range(100):
    time.sleep(0.1)
    print(fps())

确保每帧调用一次 fps

【讨论】:

  • 我建议使用比 time.time() 更精确的 datetime.now().timestamp()
【解决方案3】:

您可能想做一些符合这种口味的事情:

def program():
  start_time = time.time() #record start time of program
  frame_counter = 0

  # random logic 
  for i in range(0, 100):
    for j in range(0, 100):
      # do stuff that renders a new frame
      frame_counter += 1 # count frame

  end_time = time.time() #record end time of program
  fps = frame_counter / float(end_time - start_time)

当然,您不必等待程序结束来计算 end_timefps,您可以不时进行,然后将 FPS 报告为程序运行。在报告当前 FPS 估计后重新初始化 start_time 也有助于报告更精确的 FPS 估计。

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多