2016-12-18 6 views
0

Мне нужен способ обнаружения файлов с поврежденными изображениями в огромной коллекции (десятки тысяч изображений). То, как я это делаю сейчас, - это использовать PIL следующим образом:Найти недопустимые изображения в огромной коллекции

try: 
    im = PIL.Image.open(f) 
    # image valid 
except: 
    # image invalid 
    ... 

Но это слишком медленно. Для проверки всех файлов потребуется несколько часов.

Есть ли более быстрый способ найти все недопустимые изображения в папке с помощью Python?

imghdr Недостаточно, к сожалению, потому что он не обнаруживает усеченных изображений.

+0

Не похоже, чтобы это было - вы должны попытаться открыть файл, чтобы определить, урезаны ли данные изображения. – jonrsharpe

+0

Да, наверное. Но я подумал, что есть способ с меньшими накладными расходами на декодирование и что бы то ни было сделано во время Image.open –

+0

Некоторые другие варианты: http://photo.stackexchange.com/questions/46919/is-there-a-tool-to -проверить-на-файл-целостности из-а-серии-оф-изображений – Hugo

ответ

1

Вы можете ускорить его, свернув код с вашего вопроса в функции. Затем создайте список всех имен файлов, которые нужно протестировать, и используйте Pool.map из модуля multiprocessing, чтобы применить эту функцию параллельно ко всем файлам, используя столько ядер, что и ваш компьютер.

Если ваша машина имеет N ядер, это может привести к ускорению фактора N. На практике это будет меньше из-за multiprocessing служебных и возможно ограничений пропускной способности ввода-вывода.