From 730cbbcb0d213c4da36846487768f64d5ee195f9 Mon Sep 17 00:00:00 2001 From: Regis HANNA Date: Thu, 12 Jun 2025 12:19:58 +0200 Subject: [PATCH 1/3] Fixes hang when exiting using a camera --- deploy/pipeline/pipeline.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/deploy/pipeline/pipeline.py b/deploy/pipeline/pipeline.py index e09fdefbdf..1ee1455128 100644 --- a/deploy/pipeline/pipeline.py +++ b/deploy/pipeline/pipeline.py @@ -637,10 +637,12 @@ def predict_image(self, input): if self.cfg['visual']: self.visualize_image(batch_file, batch_input, self.pipeline_res) - def capturevideo(self, capture, queue): + def capturevideo(self, capture, queue, capture_end): frame_id = 0 while (1): - if queue.full(): + if capture_end.is_set(): + return + elif queue.full(): time.sleep(0.1) else: ret, frame = capture.read() @@ -728,9 +730,10 @@ def predict_video(self, video_file, thread_idx=0): cars_count = 0 retrograde_traj_len = 0 framequeue = queue.Queue(10) + capture_end = threading.Event() thread = threading.Thread( - target=self.capturevideo, args=(capture, framequeue)) + target=self.capturevideo, args=(capture, framequeue, capture_end)) thread.start() time.sleep(1) @@ -1089,6 +1092,7 @@ def predict_video(self, video_file, thread_idx=0): if cv2.waitKey(1) & 0xFF == ord('q'): break + capture_end.set() if self.cfg['visual'] and len(self.pushurl) == 0: writer.release() print('save result to {}'.format(out_path)) From 92b8b6f612b048e8ac6eafffbf5f05b917704e00 Mon Sep 17 00:00:00 2001 From: Regis HANNA Date: Thu, 12 Jun 2025 12:25:25 +0200 Subject: [PATCH 2/3] Fix video window not opening when using camera --- deploy/pipeline/pipeline.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/pipeline/pipeline.py b/deploy/pipeline/pipeline.py index 1ee1455128..0fdb962919 100644 --- a/deploy/pipeline/pipeline.py +++ b/deploy/pipeline/pipeline.py @@ -815,7 +815,7 @@ def predict_video(self, video_file, thread_idx=0): pushstream.pipe.stdin.write(im.tobytes()) else: writer.write(im) - if self.file_name is None: # use camera_id + if type(self.file_name) == int: # use camera_id cv2.imshow('Paddle-Pipeline', im) if cv2.waitKey(1) & 0xFF == ord('q'): break @@ -1087,7 +1087,7 @@ def predict_video(self, video_file, thread_idx=0): pushstream.pipe.stdin.write(im.tobytes()) else: writer.write(im) - if self.file_name is None: # use camera_id + if type(self.file_name) == int: # use camera_id cv2.imshow('Paddle-Pipeline', im) if cv2.waitKey(1) & 0xFF == ord('q'): break From cafd730eb7ef72fa57ec63af720272b62218dcb1 Mon Sep 17 00:00:00 2001 From: Regis HANNA Date: Thu, 12 Jun 2025 12:28:15 +0200 Subject: [PATCH 3/3] Fix incorrect parse of shared memory when the integer part is separated from the floating point part by a comma --- ppdet/data/shm_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ppdet/data/shm_utils.py b/ppdet/data/shm_utils.py index a929a809ce..c76fbccd4e 100644 --- a/ppdet/data/shm_utils.py +++ b/ppdet/data/shm_utils.py @@ -40,7 +40,8 @@ def _parse_size_in_M(size_str): num, unit = size_str[:-1], size_str[-1] assert unit in SIZE_UNIT, \ "unknown shm size unit {}".format(unit) - return float(num) * \ + num_dot = num.replace(',', '.') # To handle cases where the integer part is separated from the floating point part by a comma + return float(num_dot) * \ (1024 ** (SIZE_UNIT.index(unit) - 1))