`ultralytics 8.0.156` fix PIL `*.png` EXIF bug (#4406)

single_channel
Glenn Jocher 1 year ago committed by GitHub
parent fb1ae9bfad
commit 8d7490f060
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -115,4 +115,4 @@ def test_mobilesam():
@pytest.mark.parametrize('task,model,data', TASK_ARGS)
def test_train_gpu(task, model, data):
run(f'yolo train {task} model={model}.yaml data={data} imgsz=32 epochs=1 device="0"') # single GPU
run(f'yolo train {task} model={model}.pt data={data} imgsz=32 epochs=1 device="0,1"') # Multi GPU
run(f'yolo train {task} model={model}.pt data={data} imgsz=32 epochs=1 device="0,1"') # multi GPU

@ -1,6 +1,6 @@
# Ultralytics YOLO 🚀, AGPL-3.0 license
__version__ = '8.0.155'
__version__ = '8.0.156'
from ultralytics.hub import start
from ultralytics.models import RTDETR, SAM, YOLO

@ -1,5 +1,6 @@
# Ultralytics YOLO 🚀, AGPL-3.0 license
import contextlib
import hashlib
import json
import os
@ -13,7 +14,7 @@ from tarfile import is_tarfile
import cv2
import numpy as np
from PIL import ExifTags, Image, ImageOps
from PIL import Image, ImageOps
from tqdm import tqdm
from ultralytics.nn.autobackend import check_class_names
@ -28,11 +29,6 @@ IMG_FORMATS = 'bmp', 'dng', 'jpeg', 'jpg', 'mpo', 'png', 'tif', 'tiff', 'webp',
VID_FORMATS = 'asf', 'avi', 'gif', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'ts', 'wmv', 'webm' # video suffixes
PIN_MEMORY = str(os.getenv('PIN_MEMORY', True)).lower() == 'true' # global pin_memory for dataloaders
# Get orientation exif tag
for orientation in ExifTags.TAGS.keys():
if ExifTags.TAGS[orientation] == 'Orientation':
break
def img2label_paths(img_paths):
"""Define label paths as a function of image paths."""
@ -51,11 +47,13 @@ def get_hash(paths):
def exif_size(img: Image.Image):
"""Returns exif-corrected PIL size."""
s = img.size # (width, height)
exif = img.getexif()
if exif:
rotation = exif.get(274, None) # the key for the orientation tag in the EXIF data is 274 (in decimal)
if rotation in [6, 8]: # rotation 270 or 90
s = s[1], s[0]
if img.format == 'JPEG': # only support JPEG images
with contextlib.suppress(Exception):
exif = img.getexif()
if exif:
rotation = exif.get(274, None) # the EXIF key for the orientation tag is 274
if rotation in [6, 8]: # rotation 270 or 90
s = s[1], s[0]
return s

Loading…
Cancel
Save