From 399d8f1aefee2af191c2f104588dd2f2318eb9e2 Mon Sep 17 00:00:00 2001 From: Rcmcpe Date: Fri, 25 Mar 2022 13:12:23 +0800 Subject: [PATCH 01/10] Fix imwrite on non-ASCII paths --- detect.py | 3 ++- hubconf.py | 2 ++ utils/datasets.py | 5 +++-- utils/general.py | 13 +++++++++++++ utils/loggers/__init__.py | 7 +++---- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/detect.py b/detect.py index ccb9fbf5103f..8cb4a45285f5 100644 --- a/detect.py +++ b/detect.py @@ -41,11 +41,12 @@ from models.common import DetectMultiBackend from utils.datasets import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams -from utils.general import (LOGGER, check_file, check_img_size, check_imshow, check_requirements, colorstr, +from utils.general import (LOGGER, check_file, check_img_size, check_imshow, check_requirements, colorstr, imwrite, increment_path, non_max_suppression, print_args, scale_coords, strip_optimizer, xyxy2xywh) from utils.plots import Annotator, colors, save_one_box from utils.torch_utils import select_device, time_sync +cv2.imwrite = imwrite @torch.no_grad() def run(weights=ROOT / 'yolov5s.pt', # model.pt path(s) diff --git a/hubconf.py b/hubconf.py index 39fa614b2e34..bfda0e906131 100644 --- a/hubconf.py +++ b/hubconf.py @@ -130,6 +130,8 @@ def yolov5x6(pretrained=True, channels=3, classes=80, autoshape=True, verbose=Tr import cv2 import numpy as np from PIL import Image + from utils.general import imread + cv2.imread = imread imgs = ['data/images/zidane.jpg', # filename Path('data/images/zidane.jpg'), # Path diff --git a/utils/datasets.py b/utils/datasets.py index f212e54633be..0e72d28b5441 100755 --- a/utils/datasets.py +++ b/utils/datasets.py @@ -28,12 +28,13 @@ from tqdm import tqdm from utils.augmentations import Albumentations, augment_hsv, copy_paste, letterbox, mixup, random_perspective -from utils.general import (DATASETS_DIR, LOGGER, NUM_THREADS, check_dataset, check_requirements, check_yaml, clean_str, +from utils.general import (DATASETS_DIR, LOGGER, NUM_THREADS, check_dataset, check_requirements, check_yaml, clean_str, imread, imwrite, segments2boxes, xyn2xy, xywh2xyxy, xywhn2xyxy, xyxy2xywhn) from utils.torch_utils import torch_distributed_zero_first # Remap -cv2.imread = lambda x: cv2.imdecode(np.fromfile(x, np.uint8), cv2.IMREAD_COLOR) # for Chinese filenames +cv2.imread = imread +cv2.imwrite = imwrite # Parameters HELP_URL = 'https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data' diff --git a/utils/general.py b/utils/general.py index b0c5e9d69ab7..260de0a765ca 100755 --- a/utils/general.py +++ b/utils/general.py @@ -903,6 +903,19 @@ def increment_path(path, exist_ok=False, sep='', mkdir=False): path.mkdir(parents=True, exist_ok=True) # make directory return path +# For file paths containing non-ASCII characters + +def imread(path): + return cv2.imdecode(np.fromfile(path, np.uint8), cv2.IMREAD_COLOR) + + +def imwrite(path, img): + try: + cv2.imencode(Path(path).suffix, img)[1].tofile(path) + return True + except: + return False + # Variables NCOLS = 0 if is_docker() else shutil.get_terminal_size().columns # terminal window size for tqdm diff --git a/utils/loggers/__init__.py b/utils/loggers/__init__.py index ff6722ecd48a..f7bce0fe5e20 100644 --- a/utils/loggers/__init__.py +++ b/utils/loggers/__init__.py @@ -11,7 +11,7 @@ import torch from torch.utils.tensorboard import SummaryWriter -from utils.general import colorstr, emojis +from utils.general import colorstr, emojis, imread from utils.loggers.wandb.wandb_utils import WandbLogger from utils.plots import plot_images, plot_results from utils.torch_utils import de_parallel @@ -148,9 +148,8 @@ def on_train_end(self, last, best, plots, epoch, results): if self.tb: import cv2 - import numpy as np - - cv2.imread = lambda x: cv2.imdecode(np.fromfile(x, np.uint8), cv2.IMREAD_COLOR) # remap for Chinese files + cv2.imread = imread + for f in files: self.tb.add_image(f.stem, cv2.imread(str(f))[..., ::-1], epoch, dataformats='HWC') From 66609c3d02ea181bbb06e1fee08c6f57a36e2b6a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 25 Mar 2022 05:25:00 +0000 Subject: [PATCH 02/10] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- hubconf.py | 1 + utils/datasets.py | 4 ++-- utils/loggers/__init__.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hubconf.py b/hubconf.py index bfda0e906131..0b97b411fec7 100644 --- a/hubconf.py +++ b/hubconf.py @@ -130,6 +130,7 @@ def yolov5x6(pretrained=True, channels=3, classes=80, autoshape=True, verbose=Tr import cv2 import numpy as np from PIL import Image + from utils.general import imread cv2.imread = imread diff --git a/utils/datasets.py b/utils/datasets.py index 0e72d28b5441..e01d3183326f 100755 --- a/utils/datasets.py +++ b/utils/datasets.py @@ -28,8 +28,8 @@ from tqdm import tqdm from utils.augmentations import Albumentations, augment_hsv, copy_paste, letterbox, mixup, random_perspective -from utils.general import (DATASETS_DIR, LOGGER, NUM_THREADS, check_dataset, check_requirements, check_yaml, clean_str, imread, imwrite, - segments2boxes, xyn2xy, xywh2xyxy, xywhn2xyxy, xyxy2xywhn) +from utils.general import (DATASETS_DIR, LOGGER, NUM_THREADS, check_dataset, check_requirements, check_yaml, clean_str, + imread, imwrite, segments2boxes, xyn2xy, xywh2xyxy, xywhn2xyxy, xyxy2xywhn) from utils.torch_utils import torch_distributed_zero_first # Remap diff --git a/utils/loggers/__init__.py b/utils/loggers/__init__.py index f7bce0fe5e20..ffd1b7d5d75f 100644 --- a/utils/loggers/__init__.py +++ b/utils/loggers/__init__.py @@ -149,7 +149,7 @@ def on_train_end(self, last, best, plots, epoch, results): if self.tb: import cv2 cv2.imread = imread - + for f in files: self.tb.add_image(f.stem, cv2.imread(str(f))[..., ::-1], epoch, dataformats='HWC') From 7ac91ec0624c1976bc8d3e691f5c2ea65713edbb Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:18:49 +0100 Subject: [PATCH 03/10] Update general.py --- utils/general.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/utils/general.py b/utils/general.py index 260de0a765ca..07b49f329abf 100755 --- a/utils/general.py +++ b/utils/general.py @@ -903,19 +903,28 @@ def increment_path(path, exist_ok=False, sep='', mkdir=False): path.mkdir(parents=True, exist_ok=True) # make directory return path -# For file paths containing non-ASCII characters + +# OpenCV Chinese-friendly functions ------------------------------------------------------------------------------------ +imshow_ = cv2.imshow # copy to avoid recursion + def imread(path): return cv2.imdecode(np.fromfile(path, np.uint8), cv2.IMREAD_COLOR) -def imwrite(path, img): +def imwrite(path, im): try: - cv2.imencode(Path(path).suffix, img)[1].tofile(path) + cv2.imencode(Path(path).suffix, im)[1].tofile(path) return True - except: + except Exception: return False -# Variables +def imshow(path, im): + imshow_(path, im) + + +cv2.imread, cv2.imwrite, cv2.imshow = imread, imwrite, imshow # redefine + +# Variables ------------------------------------------------------------------------------------------------------------ NCOLS = 0 if is_docker() else shutil.get_terminal_size().columns # terminal window size for tqdm From e2a49490439926dca24d062ddcfa88819f91225e Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:19:27 +0100 Subject: [PATCH 04/10] Update __init__.py --- utils/loggers/__init__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/utils/loggers/__init__.py b/utils/loggers/__init__.py index ffd1b7d5d75f..eb63cc7028d0 100644 --- a/utils/loggers/__init__.py +++ b/utils/loggers/__init__.py @@ -11,7 +11,7 @@ import torch from torch.utils.tensorboard import SummaryWriter -from utils.general import colorstr, emojis, imread +from utils.general import colorstr, cv2, emojis, imread from utils.loggers.wandb.wandb_utils import WandbLogger from utils.plots import plot_images, plot_results from utils.torch_utils import de_parallel @@ -147,9 +147,6 @@ def on_train_end(self, last, best, plots, epoch, results): files = [(self.save_dir / f) for f in files if (self.save_dir / f).exists()] # filter if self.tb: - import cv2 - cv2.imread = imread - for f in files: self.tb.add_image(f.stem, cv2.imread(str(f))[..., ::-1], epoch, dataformats='HWC') From 3fcbd245a6077af2ea22b08ea897e29bf9ff696d Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:19:41 +0100 Subject: [PATCH 05/10] Update __init__.py --- utils/loggers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/loggers/__init__.py b/utils/loggers/__init__.py index eb63cc7028d0..bb8523c0219e 100644 --- a/utils/loggers/__init__.py +++ b/utils/loggers/__init__.py @@ -11,7 +11,7 @@ import torch from torch.utils.tensorboard import SummaryWriter -from utils.general import colorstr, cv2, emojis, imread +from utils.general import colorstr, cv2, emojis from utils.loggers.wandb.wandb_utils import WandbLogger from utils.plots import plot_images, plot_results from utils.torch_utils import de_parallel From aef3af4d76380c70b90c3da508763c26afd65062 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:20:43 +0100 Subject: [PATCH 06/10] Update datasets.py --- utils/datasets.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/utils/datasets.py b/utils/datasets.py index e01d3183326f..d0b35e808000 100755 --- a/utils/datasets.py +++ b/utils/datasets.py @@ -18,7 +18,6 @@ from urllib.parse import urlparse from zipfile import ZipFile -import cv2 import numpy as np import torch import torch.nn.functional as F @@ -29,13 +28,9 @@ from utils.augmentations import Albumentations, augment_hsv, copy_paste, letterbox, mixup, random_perspective from utils.general import (DATASETS_DIR, LOGGER, NUM_THREADS, check_dataset, check_requirements, check_yaml, clean_str, - imread, imwrite, segments2boxes, xyn2xy, xywh2xyxy, xywhn2xyxy, xyxy2xywhn) + cv2, segments2boxes, xyn2xy, xywh2xyxy, xywhn2xyxy, xyxy2xywhn) from utils.torch_utils import torch_distributed_zero_first -# Remap -cv2.imread = imread -cv2.imwrite = imwrite - # Parameters HELP_URL = 'https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data' IMG_FORMATS = 'bmp', 'dng', 'jpeg', 'jpg', 'mpo', 'png', 'tif', 'tiff', 'webp' # include image suffixes From d403b99d6a8d9e02ead6accfbe2ddafdcf4fcf51 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:21:29 +0100 Subject: [PATCH 07/10] Update hubconf.py --- hubconf.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hubconf.py b/hubconf.py index 0b97b411fec7..d719b80034af 100644 --- a/hubconf.py +++ b/hubconf.py @@ -127,12 +127,10 @@ def yolov5x6(pretrained=True, channels=3, classes=80, autoshape=True, verbose=Tr # Verify inference from pathlib import Path - import cv2 import numpy as np from PIL import Image - from utils.general import imread - cv2.imread = imread + from utils.general import cv2 imgs = ['data/images/zidane.jpg', # filename Path('data/images/zidane.jpg'), # Path From 7e4ed2b2827600bc327bf9b821b7858db329c5d5 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:22:05 +0100 Subject: [PATCH 08/10] Update detect.py --- detect.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/detect.py b/detect.py index 8cb4a45285f5..14902cc650d1 100644 --- a/detect.py +++ b/detect.py @@ -29,7 +29,6 @@ import sys from pathlib import Path -import cv2 import torch import torch.backends.cudnn as cudnn @@ -41,13 +40,11 @@ from models.common import DetectMultiBackend from utils.datasets import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams -from utils.general import (LOGGER, check_file, check_img_size, check_imshow, check_requirements, colorstr, imwrite, +from utils.general import (LOGGER, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2, increment_path, non_max_suppression, print_args, scale_coords, strip_optimizer, xyxy2xywh) from utils.plots import Annotator, colors, save_one_box from utils.torch_utils import select_device, time_sync -cv2.imwrite = imwrite - @torch.no_grad() def run(weights=ROOT / 'yolov5s.pt', # model.pt path(s) source=ROOT / 'data/images', # file/dir/URL/glob, 0 for webcam From a3924d2baada4603b566b1301da99c1ff35c42a9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 25 Mar 2022 12:22:15 +0000 Subject: [PATCH 09/10] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- detect.py | 1 + 1 file changed, 1 insertion(+) diff --git a/detect.py b/detect.py index 14902cc650d1..046f7ae57b5c 100644 --- a/detect.py +++ b/detect.py @@ -45,6 +45,7 @@ from utils.plots import Annotator, colors, save_one_box from utils.torch_utils import select_device, time_sync + @torch.no_grad() def run(weights=ROOT / 'yolov5s.pt', # model.pt path(s) source=ROOT / 'data/images', # file/dir/URL/glob, 0 for webcam From ae28df9bea9d96f8944de38bfdea71a5e8b65440 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 25 Mar 2022 13:22:51 +0100 Subject: [PATCH 10/10] Update general.py --- utils/general.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/utils/general.py b/utils/general.py index 07b49f329abf..dcdb58cb0f51 100755 --- a/utils/general.py +++ b/utils/general.py @@ -905,9 +905,6 @@ def increment_path(path, exist_ok=False, sep='', mkdir=False): # OpenCV Chinese-friendly functions ------------------------------------------------------------------------------------ -imshow_ = cv2.imshow # copy to avoid recursion - - def imread(path): return cv2.imdecode(np.fromfile(path, np.uint8), cv2.IMREAD_COLOR) @@ -920,11 +917,7 @@ def imwrite(path, im): return False -def imshow(path, im): - imshow_(path, im) - - -cv2.imread, cv2.imwrite, cv2.imshow = imread, imwrite, imshow # redefine +cv2.imread, cv2.imwrite = imread, imwrite # redefine # Variables ------------------------------------------------------------------------------------------------------------ NCOLS = 0 if is_docker() else shutil.get_terminal_size().columns # terminal window size for tqdm