|
@@ -1,14 +1,12 @@
|
|
|
-from PIL import Image
|
|
|
-from imageio import imread
|
|
|
-from os.path import isfile
|
|
|
-
|
|
|
import copy
|
|
|
import numpy as np
|
|
|
|
|
|
-from .part import Parts
|
|
|
-from .part import UniformParts
|
|
|
-from .part import SurrogateType
|
|
|
+from PIL import Image
|
|
|
+
|
|
|
from cvdatasets import utils
|
|
|
+from cvdatasets.dataset.part import Parts
|
|
|
+from cvdatasets.dataset.part import SurrogateType
|
|
|
+from cvdatasets.dataset.part import UniformParts
|
|
|
|
|
|
def should_have_parts(func):
|
|
|
def inner(self, *args, **kwargs):
|
|
@@ -17,21 +15,6 @@ def should_have_parts(func):
|
|
|
return inner
|
|
|
|
|
|
class ImageWrapper(object):
|
|
|
- @staticmethod
|
|
|
- def read_image(im_path, mode="RGB", n_retries=5):
|
|
|
- _read = lambda: Image.open(im_path, mode="r")
|
|
|
- if n_retries <= 0:
|
|
|
- assert isfile(im_path), "Image \"{}\" does not exist!".format(im_path)
|
|
|
- return _read()
|
|
|
- else:
|
|
|
- error = None
|
|
|
- for i in range(n_retries):
|
|
|
- try:
|
|
|
- return _read()
|
|
|
- except Exception as e:
|
|
|
- error = e
|
|
|
-
|
|
|
- raise RuntimeError("Reading image \"{}\" failed after {} n_retries! ({})".format(im_path, n_retries, error))
|
|
|
|
|
|
|
|
|
def __init__(self, im_path, label,
|
|
@@ -64,16 +47,21 @@ class ImageWrapper(object):
|
|
|
@property
|
|
|
def im_array(self):
|
|
|
if self._im_array is None:
|
|
|
+
|
|
|
if isinstance(self._im, Image.Image):
|
|
|
_im = self._im.convert(self.mode)
|
|
|
self._im_array = utils.asarray(_im)
|
|
|
+
|
|
|
elif isinstance(self._im, np.ndarray):
|
|
|
if self.mode == "RGB" and self._im.ndim == 2:
|
|
|
self._im_array = np.stack((self._im,) * 3, axis=-1)
|
|
|
+
|
|
|
elif self._im.ndim in (3, 4):
|
|
|
self._im_array = self._im
|
|
|
+
|
|
|
else:
|
|
|
raise ValueError()
|
|
|
+
|
|
|
else:
|
|
|
raise ValueError()
|
|
|
return self._im_array
|
|
@@ -87,7 +75,7 @@ class ImageWrapper(object):
|
|
|
@im.setter
|
|
|
def im(self, value):
|
|
|
if isinstance(value, str):
|
|
|
- self._im = ImageWrapper.read_image(value, mode=self.mode)
|
|
|
+ self._im = utils.read_image(value, n_retries=5)
|
|
|
self._im_path = value
|
|
|
else:
|
|
|
self._im = value
|