diff --git a/utils/__init__.py b/utils/__init__.py index e69de29bb2d1..649b288b3588 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -0,0 +1,16 @@ +from pathlib import Path + +import torch +from PIL import ImageFont + +FILE = Path(__file__).absolute() +ROOT = FILE.parents[1] # yolov5/ dir + +# Check YOLOv5 Annotator font +font = 'Arial.ttf' +try: + ImageFont.truetype(font) +except Exception as e: # download if missing + url = "https://ultralytics.com/assets/" + font + print(f'Downloading {url} to {ROOT / font}...') + torch.hub.download_url_to_file(url, str(ROOT / font)) diff --git a/utils/plots.py b/utils/plots.py index ddfdb42201ee..eae295e09bed 100644 --- a/utils/plots.py +++ b/utils/plots.py @@ -48,7 +48,7 @@ def hex2rgb(h): # rgb order (PIL) class Annotator: # YOLOv5 Annotator for train/val mosaics and jpgs and detect/hub inference annotations def __init__(self, im, line_width=None, font_size=None, font='Arial.ttf', pil=True): - assert im.data.contiguous, 'Image not contiguous. Apply np.ascontiguousarray(im) to plot_on_box() input image.' + assert im.data.contiguous, 'Image not contiguous. Apply np.ascontiguousarray(im) to Annotator() input images.' self.pil = pil if self.pil: # use PIL self.im = im if isinstance(im, Image.Image) else Image.fromarray(im) @@ -57,11 +57,10 @@ def __init__(self, im, line_width=None, font_size=None, font='Arial.ttf', pil=Tr f = font_size or max(round(s * 0.035), 12) try: self.font = ImageFont.truetype(font, size=f) - except Exception as e: # download TTF if missing - print(f'WARNING: Annotator font {font} not found: {e}') - url = "https://github.com/ultralytics/yolov5/releases/download/v1.0/" + font + except Exception as e: # download if missing + url = "https://ultralytics.com/assets/" + font + print(f'Downloading {url} to {font}...') torch.hub.download_url_to_file(url, font) - print(f'Annotator font successfully downloaded from {url} to {font}') self.font = ImageFont.truetype(font, size=f) self.fh = self.font.getsize('a')[1] - 3 # font height else: # use cv2