From 3c6747810c05691c46bc2cd7c4fe0884142c80c7 Mon Sep 17 00:00:00 2001 From: "[Assassin]" <49711232+ShyAssassin@users.noreply.github.com> Date: Sat, 6 Jan 2024 17:16:13 +0200 Subject: [PATCH] fix: fix visualizer memory leak --- TrackingBackend/app/processes/camera.py | 7 +++++-- TrackingBackend/app/processes/eye_processor.py | 7 +++++-- TrackingBackend/app/tracker.py | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/TrackingBackend/app/processes/camera.py b/TrackingBackend/app/processes/camera.py index 400d5c2..751bc05 100644 --- a/TrackingBackend/app/processes/camera.py +++ b/TrackingBackend/app/processes/camera.py @@ -4,8 +4,8 @@ from multiprocessing import Value import serial.tools.list_ports from cv2.typing import MatLike +from queue import Queue, Full from typing import Final -from queue import Queue import numpy as np import ctypes import serial @@ -201,7 +201,10 @@ def preprocess_frame(self, frame: MatLike) -> MatLike: frame = mat_rotate(frame, self.config.rotation) # send frame to frontend - self.frontend_queue.put(frame) + try: + self.frontend_queue.put(frame, block=False) + except Full: + pass frame = mat_crop(self.config.roi_x, self.config.roi_y, self.config.roi_w, self.config.roi_h, frame) return frame diff --git a/TrackingBackend/app/processes/eye_processor.py b/TrackingBackend/app/processes/eye_processor.py index f2a64f7..9493011 100644 --- a/TrackingBackend/app/processes/eye_processor.py +++ b/TrackingBackend/app/processes/eye_processor.py @@ -2,7 +2,7 @@ from app.config import AlgorithmConfig, TrackerConfig from app.utils import WorkerProcess, BaseAlgorithm from cv2.typing import MatLike -from queue import Queue +from queue import Queue, Full import queue import cv2 @@ -48,7 +48,10 @@ def run(self) -> None: break self.osc_queue.put(result) - self.frontend_queue.put(current_frame) + try: + self.frontend_queue.put(current_frame, block=False) + except Full: + pass self.window.imshow(self.process_name(), current_frame) def shutdown(self) -> None: diff --git a/TrackingBackend/app/tracker.py b/TrackingBackend/app/tracker.py index 88858d7..c66f8e3 100644 --- a/TrackingBackend/app/tracker.py +++ b/TrackingBackend/app/tracker.py @@ -21,8 +21,8 @@ def __init__(self, config: EyeTrackConfig, uuid: str, manager: SyncManager, rout self.osc_queue: Queue[EyeData] = self.manager.Queue() self.image_queue: Queue[MatLike] = self.manager.Queue() # Used purely for visualization in the frontend - self.camera_queue: Queue[MatLike] = self.manager.Queue() - self.algo_frame_queue: Queue[MatLike] = self.manager.Queue() + self.camera_queue: Queue[MatLike] = self.manager.Queue(maxsize=15) + self.algo_frame_queue: Queue[MatLike] = self.manager.Queue(maxsize=15) # processes self.processor = EyeProcessor(self.tracker_config, self.image_queue, self.osc_queue, self.algo_frame_queue) self.camera = Camera(self.tracker_config, self.image_queue, self.camera_queue)