web-dev-qa-db-ja.com

fps-カウントを時間関数で除算してfpsを決定する方法

すべてのフレームをカウントするカウンターが動作しています。私がやりたいことは、これを時間で割ってプログラムの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'のオペランドです

助けてくれてありがとう!

6
S price
  • これは、プログラムのフレームレートを各フレームに出力する非常に簡単な方法です(カウンターは不要)。

    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()
    

それが役に立てば幸い!

20
Elouarn Laine

魅力のように働く

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が呼び出されることを確認してください

0
Menua

あなたはこの味で何かをしたいかもしれません:

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_timeおよびfpsを計算する必要はありません。プログラムを実行するたびにFPSを報告するために、時々それを実行できます。 。現在のFPS推定を報告した後にstart_timeを再初期化すると、より正確なFPS推定の報告にも役立ちます。

0
tony