#tensorflow #keras #deep-learning #computer-vision #python-imaging-library
#tensorflow #keras #глубокое обучение #компьютерное зрение #python-imaging-library
Вопрос:
Я пытался использовать ImageDataGenerator для создания изображений генератора для обучения моей модели, но я не могу этого сделать из-за PIL.Ошибка неопознанного изображения. Я пробовал разные наборы данных, и проблема относится только к моему набору данных.
Теперь я, к сожалению, не могу удалить все обучающие / тестовые изображения в качестве предложенного ответа, но я могу удалить файлы, вызывающие эту проблему. Как я могу обнаружить файлы, вызывающие ошибку?
Комментарии:
1. Создайте скрипт, который открывает каждое изображение итеративно с помощью PIL, а затем выведите, какие из них завершаются с ошибкой.
2. Иногда вместе с изображениями существуют другие файлы конфигурации, особенно в больших наборах данных. Создайте пользовательский цикл, выполните итерацию по каждой вложенной папке и изображению и проверьте, правильно ли указано расширение.
Ответ №1:
Это распространенная проблема, особенно если вы загружаете изображения, скажем, из Google. Я разработал функцию, которая, учитывая каталог, просматривает все подкаталоги и проверяет файлы в каждом подкаталоге, чтобы убедиться, что они имеют правильные расширения и являются допустимыми файлами изображений. Код приведен ниже. Он возвращает два списка. good_list — это список допустимых файлов изображений, а bad_list — список недопустимых файлов изображений. У вас должен быть установлен Opencv.Если он у вас не установлен, используйте pip install opencv-contrib-python.
def test_images(dir):
import os
import cv2
bad_list=[]
good_list=[]
good_exts=['jpg', 'png', 'bmp','tiff','jpeg', 'gif'] # make a list of acceptable image file types
for klass in os.listdir(dir) : # iterate through the sub directories
class_path=os.path.join (dir, klass) # create path to sub directory
if os.path.isdir(class_path):
for f in os.listdir(class_path): # iterate through image files
f_path=os.path.join(class_path, f) # path to image files
ext=f[f.rfind('.') 1:] # get the files extension
if ext not in good_exts:
print(f'file {f_path} has an invalid extension {ext}')
bad_list.append(f_path)
else:
try:
img=cv2.imread(f_path)
size=img.shape
good_list.append(f_path)
except:
print(f'file {f_path} is not a valid image file ')
bad_list.append(f_path)
else:
print(f'** WARNING ** directory {dir} has files in it, it should only contain sub directories')
return good_list, bad_list
Комментарии:
1. Спасибо. Это помогло.