mirror of
https://github.com/THU-MIG/yolov10.git
synced 2025-05-23 21:44:22 +08:00
ultralytics 8.0.156
fix PIL *.png
EXIF bug (#4406)
This commit is contained in:
parent
fb1ae9bfad
commit
8d7490f060
@ -115,4 +115,4 @@ def test_mobilesam():
|
|||||||
@pytest.mark.parametrize('task,model,data', TASK_ARGS)
|
@pytest.mark.parametrize('task,model,data', TASK_ARGS)
|
||||||
def test_train_gpu(task, model, data):
|
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}.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
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||||
|
|
||||||
__version__ = '8.0.155'
|
__version__ = '8.0.156'
|
||||||
|
|
||||||
from ultralytics.hub import start
|
from ultralytics.hub import start
|
||||||
from ultralytics.models import RTDETR, SAM, YOLO
|
from ultralytics.models import RTDETR, SAM, YOLO
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||||
|
|
||||||
|
import contextlib
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
@ -13,7 +14,7 @@ from tarfile import is_tarfile
|
|||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from PIL import ExifTags, Image, ImageOps
|
from PIL import Image, ImageOps
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from ultralytics.nn.autobackend import check_class_names
|
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
|
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
|
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):
|
def img2label_paths(img_paths):
|
||||||
"""Define label paths as a function of image paths."""
|
"""Define label paths as a function of image paths."""
|
||||||
@ -51,11 +47,13 @@ def get_hash(paths):
|
|||||||
def exif_size(img: Image.Image):
|
def exif_size(img: Image.Image):
|
||||||
"""Returns exif-corrected PIL size."""
|
"""Returns exif-corrected PIL size."""
|
||||||
s = img.size # (width, height)
|
s = img.size # (width, height)
|
||||||
exif = img.getexif()
|
if img.format == 'JPEG': # only support JPEG images
|
||||||
if exif:
|
with contextlib.suppress(Exception):
|
||||||
rotation = exif.get(274, None) # the key for the orientation tag in the EXIF data is 274 (in decimal)
|
exif = img.getexif()
|
||||||
if rotation in [6, 8]: # rotation 270 or 90
|
if exif:
|
||||||
s = s[1], s[0]
|
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
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user