From 48b00dbc0df672837a4af0a185210304b778dd44 Mon Sep 17 00:00:00 2001 From: Egor Orel <45142931+EgOrlukha@users.noreply.github.com> Date: Fri, 8 Oct 2021 13:26:43 +0700 Subject: [PATCH] Re-open IP-camera videostream if disconnected (#5074) * Re-open IP-camera videostream if disconnected. Provide IP-streaming analysis stability * Re-open IP-camera videostream if disconnected. Provide IP-streaming analysis stability * `self.imgs[i] *= 0` bug fix and cleanup Co-authored-by: Glenn Jocher --- utils/datasets.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/utils/datasets.py b/utils/datasets.py index cff6dc5..715dd63 100755 --- a/utils/datasets.py +++ b/utils/datasets.py @@ -312,7 +312,7 @@ class LoadStreams: self.frames[i] = max(int(cap.get(cv2.CAP_PROP_FRAME_COUNT)), 0) or float('inf') # infinite stream fallback _, self.imgs[i] = cap.read() # guarantee first frame - self.threads[i] = Thread(target=self.update, args=([i, cap]), daemon=True) + self.threads[i] = Thread(target=self.update, args=([i, cap, s]), daemon=True) print(f" success ({self.frames[i]} frames {w}x{h} at {self.fps[i]:.2f} FPS)") self.threads[i].start() print('') # newline @@ -323,7 +323,7 @@ class LoadStreams: if not self.rect: print('WARNING: Different stream shapes detected. For optimal performance supply similarly-shaped streams.') - def update(self, i, cap): + def update(self, i, cap, stream): # Read stream `i` frames in daemon thread n, f, read = 0, self.frames[i], 1 # frame number, frame array, inference every 'read' frame while cap.isOpened() and n < f: @@ -332,7 +332,12 @@ class LoadStreams: cap.grab() if n % read == 0: success, im = cap.retrieve() - self.imgs[i] = im if success else self.imgs[i] * 0 + if success: + self.imgs[i] = im + else: + print('WARNING: Video stream unresponsive, please check your IP camera connection.') + self.imgs[i] *= 0 + cap.open(stream) # re-open stream if signal was lost time.sleep(1 / self.fps[i]) # wait time def __iter__(self):