无法计算输出视频流上的fps


甲基蓝
2025-03-17 08:41:41 (5天前)
  1. 我已经使用Tensorflowopen cv实现了实时对象检测,如本文和GitHub repo中所述。

对象检测效果很好,但我在实现…时遇到了问题

3 条回复
  1. 0# 夏花 | 2019-08-31 10-32



    你可以尝试这样的东西……虽然我不确定你是否想要这个或其他东西……




    1. import datetime

    2. class FPS:
      def init(self):


      self._elapsed = 0
      self._fps = 0

    3. def start(self, ttl):
    4.     self._startTime = datetime.datetime.now()
    5.     self._currentTime = datetime.datetime.now() + datetime.timedelta(seconds=ttl)
    6.     # print('counter started at --> ', self._startTime)
    7.     # print('counter stopped at --> ', self._currentTime)
    8.     return self._startTime, self._currentTime
    9. def elapsed_time(self):
    10.     self._elapsed = (self._currentTime - self._startTime).total_seconds()
    11.     return self._elapsed
    12. def update_frames(self):
    13.     curr, start = self._currentTime, self._startTime
    14.     if curr != start and curr != 0:
    15.         print('updatin frames ...')
    16.         for i in range(int(self._elapsed) + 1):
    17.             self._total_number_of_frames += i
    18.     else:
    19.         self._total_number_of_frames += 1
    20.     self.current_fps()
    21.     print("frames: {}, fps: {}, time spent: {}".format(
    22.         self._total_number_of_frames,
    23.         self._fps,
    24.         self._elapsed
    25.     ))
    26. def current_fps(self):
    27.     self._fps = self._total_number_of_frames / self._elapsed
    28.     return self._fps
    29. if name == main‘:
      fps = FPS()
      ttl = int(input(‘time-to-live in seconds: ‘))
      fps.start(ttl)
      fps.elapsed_time()
      fps.update_frames()

    30. </code>

  2. 1# 生如夏花 | 2019-08-31 10-32



    current_fps函数返回一个随时间增加的值,因为self._total_number_of_frames属性将继续增加,而经过的时间将随循环的每次迭代保持或多或少不变。基本上,分子将永远增加,而分母将保持在一个范围内,从而导致值随时间增加。



    为了避免这个问题,我们必须允许经过时间函数随着增加的帧一起向上扩展,或者使用一些其他常量来测量我们的fps。让我们选择后者并保持一个单独的计数器变量。



    所以你的代码可以像这样重写:




    1. import time # The time module is easier for our purpose.

    2. class FramesPerSecond:
      def init(self):
      self.startTime = None
      self.total_number_of_frames = 0
      self.counter = 0
      self.frameRate = 1 # The number of seconds to wait for each measurement.

    3. def start(self):
    4.     self.startTime = time.time()  # Returns a UNIX timestamp.
    5. def update_frames(self):
    6.     self.total_number_of_frames += 1
    7. def elapsed_time(self):
    8.     return time.time() - self.startTime
    9. def current_fps(self):
    10.     return self.counter / self.elapsed_time()  # We are measuring against the counter instead of no. of frames.
    11. fps = FramesPerSecond()
      fps.start()

    12. while True: # Your main loop.

    13. # Rest of your code here #
    14. fps.update_frames()
    15. fps.counter += 1  # Count will increase until the if condition executes.
    16. if fps.elapsed_time() > fps.frameRate:  # We measure the fps only after 1 second has passed.
    17.     print("FPS: ", fps.current_fps()) # The frames per second. 
    18.     fps.counter = 0  # reset the counter for next iteration.
    19.     fps.start()  # reset the start time.
    20. </code>


    希望这可以帮助!


登录 后才能参与评论