Forráskód Böngészése

added image reading retry logic

Dimitri Korsch 5 éve
szülő
commit
92712c4f09
2 módosított fájl, 14 hozzáadás és 6 törlés
  1. 1 1
      cvdatasets/_version.py
  2. 13 5
      cvdatasets/dataset/image.py

+ 1 - 1
cvdatasets/_version.py

@@ -1 +1 @@
-__version__ = "0.5.3"
+__version__ = "0.5.3.1"

+ 13 - 5
cvdatasets/dataset/image.py

@@ -16,10 +16,19 @@ def should_have_parts(func):
 
 class ImageWrapper(object):
 	@staticmethod
-	def read_image(im_path, mode="RGB"):
-		# im = imread(im_path, pilmode=mode)
-		im = Image.open(im_path, mode="r")
-		return im
+	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:
+			for i in range(n_retries):
+				try:
+					return _read()
+				except Exception as e:
+					pass
+
+			raise RuntimeError("Reading image \"{}\" failed after {} n_retries! ({})".format(im_path, n_retries, e))
 
 
 	def __init__(self, im_path, label, parts=None, mode="RGB", part_rescale_size=None, center_cropped=True):
@@ -67,7 +76,6 @@ class ImageWrapper(object):
 	@im.setter
 	def im(self, value):
 		if isinstance(value, str):
-			assert isfile(value), "Image \"{}\" does not exist!".format(value)
 			self._im = ImageWrapper.read_image(value, mode=self.mode)
 			self._im_path = value
 		else: