From 3d57d56f4dbd3807b3889741871851866944ae4a Mon Sep 17 00:00:00 2001 From: ben-milanko Date: Mon, 12 Apr 2021 00:04:49 +1000 Subject: [PATCH] stream framerate fix --- utils/datasets.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/utils/datasets.py b/utils/datasets.py index 09f1ef199199..f8d3a6cad4ed 100755 --- a/utils/datasets.py +++ b/utils/datasets.py @@ -284,10 +284,11 @@ def __init__(self, sources='streams.txt', img_size=640, stride=32): assert cap.isOpened(), f'Failed to open {s}' w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - fps = cap.get(cv2.CAP_PROP_FPS) % 100 + self.fps = cap.get(cv2.CAP_PROP_FPS) % 100 + _, self.imgs[i] = cap.read() # guarantee first frame thread = Thread(target=self.update, args=([i, cap]), daemon=True) - print(f' success ({w}x{h} at {fps:.2f} FPS).') + print(f' success ({w}x{h} at {self.fps:.2f} FPS).') thread.start() print('') # newline @@ -306,9 +307,12 @@ def update(self, index, cap): cap.grab() if n == 4: # read every 4th frame success, im = cap.retrieve() + if not success: + cap.release() + raise StopIteration # This does not correctly throw in a thread self.imgs[index] = im if success else self.imgs[index] * 0 n = 0 - time.sleep(0.01) # wait time + time.sleep(1/self.fps) # wait time def __iter__(self): self.count = -1