After having left the app to run for a couple of hours, I noticed that the memory had more than doubled.
From 70MB to 150MB of "Real Memory" as Mac's Activity Monitor puts it.
What was happening is that I had created a list that was growing with each frame in order to calculate the average of the frames.
I decided to get rid of this, first creating a circular counter in Python using a generator that resets to 0 when reaches a max value. Then initiating a fixed-size list that the generator will fill the fps in a circular manner.
It looks like this:
def circular_counter(max): """helper function that creates an eternal counter till a max value""" x = 0 while True: if x == max: x = 0 x += 1 yield x class CvTimer(object): def __init__(self): self.tick_frequency = cv2.getTickFrequency() self.tick_at_init = cv2.getTickCount() self.last_tick = self.tick_at_init self.fps_len = 100 self.l_fps_history = [ 10 for x in range(self.fps_len)] self.fps_counter = circular_counter(self.fps_len) def reset(self): self.last_tick = cv2.getTickCount() def get_tick_now(self): return cv2.getTickCount() @property def fps(self): fps = self.tick_frequency / (self.get_tick_now() - self.last_tick) self.l_fps_history[self.fps_counter.next() - 1] = fps return fps @property def avg_fps(self): return sum(self.l_fps_history) / float(self.fps_len)In your frame-by-frame while loop:
#Timecv: cv2.putText(self.a_frame, "fps=%s avg=%s" % (timer.fps, timer.avg_fps), (10, 75), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255))And finally in the app window: