PIL «OSError: невозможно идентифицировать файл изображения» при открытии изображения - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь загрузить набор данных изображений, используя keras.load_img , который возвращает экземпляр изображения PIL , но не могу сделать это из-за некоторых причина. Изображение было создано с помощью следующих строк кода после его создания модулем imagaug из python, который возвращает numpy массив :

img = augmenter(image=image)
img = Image.fromarray(img)
img.save(os.path.join(os.path.dirname(__file__), 'Roll 1_Augmented', 'PaperPrintImgAug' + str(i+1) + '_' + str(j) + '.jpg'))

Кажется, что iamges успешно сохранены, и я могу открыть их с помощью любого средства просмотра изображений. Поэтому я не думаю, что они испорчены. Но всякий раз, когда я пытаюсь открыть изображения с помощью load_img, я получаю следующую ошибку:

Traceback (most recent call last):
  File "ae.py", line 61, in readImages
    img = load_img(folder_path[i], target_size=inputShape)
  File "/home/ies/billa/miniconda3/envs/pfprint/lib/python3.6/site-packages/keras_preprocessing/image/utils.py", line 114, in load_img
    img = pil_image.open(io.BytesIO(f.read()))
  File "/home/ies/billa/miniconda3/envs/pfprint/lib/python3.6/site-packages/PIL/Image.py", line 2896, in open
    "cannot identify image file %r" % (filename if filename else fp)
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f7350df9e08>

Я пробовал различные решения, предоставленные онлайн и в stackoverflow, но ситуации, похоже, не совпадают с моими. После загрузки последней версии Pillow я получил следующее изменение в трассировке:

  File "/home/ies/billa/miniconda3/envs/pfprint/lib/python3.6/site-packages/keras_preprocessing/image/utils.py", line 114, in load_img
    img = pil_image.open(io.BytesIO(f.read()))
  File "/home/ies/billa/miniconda3/envs/pfprint/lib/python3.6/site-packages/PIL/Image.py", line 2006, in open
    raise IOError("cannot identify image file")
OSError: cannot identify image file

Я подозреваю, что это может быть проблема с кодировкой изображения. Может ли кто-нибудь помочь мне с этим, пожалуйста?

EDIT:

Проблема была решена путем сохранения изображений как png файлов.

Для проблема с файлами JPEG, я использовал следующий код:

from tensorflow.python.keras.preprocessing.image import load_img

def readImages(folder_path):
    images = []
    for i in range(len(folder_path)):
        img = load_img(folder_path[i], target_size=inputShape)
        img = np.array(img)
        images.append(img)

    images = np.array(images)
    return images

augdata = glob('/home/ies/billa/Roll 1_Augmented/*')
augmentedImages = readImages(augdata)
...