Как открыть изображение из списка файлов изображений JPEG в текстовом файле - формирование переменной - PullRequest
1 голос
/ 31 января 2020

У меня есть текстовый файл, содержащий пути к изображениям в формате JPEG, которые я хочу импортировать в свой скрипт. Я использую пример кода, предоставленного курсом Udemy: «Глубокое обучение с Python - новичок в Pro!» который обнаруживает улыбки в изображениях. У меня возникли проблемы с преобразованием изображений в матрицы / двумерные массивы:

def img2array(f, detection=False, ii_size=(64, 64)):
"""
Convert images into matrixes/two-dimensional arrays.

detection - if True we will resize an image to fit the
            shape of a data that our first convolutional
            layer is accepting which is 32x32 array,
            used only on detection.

ii_size - this is the size that our input images have.
"""
rf=None
if detection:
    rf=f.rsplit('.')
    rf=rf[0]+'-resampled.'+rf[1]
    im = Image.open(f)
    # Create a smaller scalled down thumbnail
    # of our image.
    im.thumbnail(ii_size)
    # Our thumbnail might not be of a perfect
    # dimensions, so we need to create a new
    # image and paste the thumbnail in.
    newi = Image.new('L', ii_size)
    newi.paste(im, (0,0))
    newi.save(rf, "JPEG")
    f=rf
# Turn images into an array.
data=imread(f, as_gray=True)
# Downsample it from 64x64 to 32x32
# (that's what we need to feed into our first convolutional layer).
data=block_reduce(data, block_size=(2, 2), func=np.mean)
if rf:
    remove(rf)
return data

Функция вызывается в другом сценарии:

    img_data=prep_array(img2array(filename, detection=True), detection=True)

Я не уверен, что делать имя «имя файла», чтобы этот код работал правильно. Когда я даю ему путь к текстовому файлу, я получаю сообщение об ошибке:

UnidentifiedImageError: невозможно определить файл изображения 'filepath \ imagelist.txt

Я новичок в Python, и мне нужна помощь в импорте правильной переменной 'filename', чтобы эта функция работала.

1 Ответ

1 голос
/ 31 января 2020

Судя по сообщениям об ошибках, вы передаете путь к файлу текстового файла (содержащий пути к изображениям) как filename

Анализ текстового файла на предмет путей к изображениям и его передача в вашу функцию.

with open("path/to/imagelist.txt", "r") as fp:
    filepaths = fp.read().splitlines()
    for filename in filepaths:
        img_data=prep_array(img2array(filename, detection=True), detection=True)

...