From 7f78fad8baceb41ba5e3f5af7b85b3e83930dd12 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Wed, 20 Sep 2023 00:50:30 +0200 Subject: [PATCH] Update matplotlib backend switching (#4987) --- docker/Dockerfile | 3 ++- ultralytics/models/fastsam/prompt.py | 2 +- ultralytics/utils/__init__.py | 8 ++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4feeb1f1..f876a4b4 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -23,8 +23,9 @@ RUN apt upgrade --no-install-recommends -y openssl tar WORKDIR /usr/src/ultralytics # Copy contents +COPY . /usr/src/ultralytics # COPY . /usr/src/ultralytics # git permission issues inside container -RUN git clone https://github.com/ultralytics/ultralytics -b main /usr/src/ultralytics +# RUN git clone https://github.com/ultralytics/ultralytics -b main /usr/src/ultralytics ADD https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt /usr/src/ultralytics/ # Install pip packages diff --git a/ultralytics/models/fastsam/prompt.py b/ultralytics/models/fastsam/prompt.py index d09e978c..9d5ae253 100644 --- a/ultralytics/models/fastsam/prompt.py +++ b/ultralytics/models/fastsam/prompt.py @@ -143,7 +143,7 @@ class FastSAMPrompt: save_path = Path(output) / result_name save_path.parent.mkdir(exist_ok=True, parents=True) - image = Image.frombytes('RGB', fig.canvas.get_width_height(), fig.canvas.buffer_rgba()) + image = Image.frombytes('RGB', fig.canvas.get_width_height(), fig.canvas.tostring_rgb()) image.save(save_path) plt.close() pbar.set_description(f'Saving {result_name} to {save_path}') diff --git a/ultralytics/utils/__init__.py b/ultralytics/utils/__init__.py index c8a91109..bcf4c805 100644 --- a/ultralytics/utils/__init__.py +++ b/ultralytics/utils/__init__.py @@ -208,12 +208,16 @@ def plt_settings(rcparams=None, backend='Agg'): def wrapper(*args, **kwargs): """Sets rc parameters and backend, calls the original function, and restores the settings.""" original_backend = plt.get_backend() - plt.switch_backend(backend) + if backend != original_backend: + plt.close('all') # auto-close()ing of figures upon backend switching is deprecated since 3.8 + plt.switch_backend(backend) with plt.rc_context(rcparams): result = func(*args, **kwargs) - plt.switch_backend(original_backend) + if backend != original_backend: + plt.close('all') + plt.switch_backend(original_backend) return result return wrapper