Как подать изображения в модель Keras - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть набор данных для самостоятельного вождения автомобиля. Мои X значения являются названиями изображений. Примером будет

array([['img_2.png'],
       ['img_3.png'],
       ['img_4.png'],
       ...,
       ['img_6405.png'],
       ['img_6406.png'],
       ['img_6407.png']], dtype=object)

Я узнал, что модель работает хорошо, если у нас есть batch_generator. Я нашел этот код шаблона.

def batch_generator(image_paths, steering_ang, batch_size, istraining):

  while True:
    batch_img = []
    batch_steering = []

    for i in range(batch_size):
      random_index = random.randint(0, len(image_paths) - 1)

      if istraining:
        im = random_augment(image_paths[random_index])
        steering = steering_ang[random_index]
      else:
        im = mpimg.imread(image_paths[random_index])
        steering = steering_ang[random_index]

      im = img_preprocess(im)
      batch_img.append(im)
      batch_steering.append(steering)
    yield (np.asarray(batch_img), np.asarray(batch_steering))  

Я изменил эту функцию для моего использования, но когда я применил ее.

x_train_gen, y_train_gen = next(batch_generator(X_train, y_train, 1, 1))
x_valid_gen, y_valid_gen = next(batch_generator(X_valid, y_valid, 1, 0))

Я получаю следующую ошибку TypeError: Object does not appear to be a 8-bit string path or a Python file-like object. Я понимаю ошибку, изображение не массив, а строка. Как я могу преобразовать строку пути изображения в массив

Ответы [ 2 ]

0 голосов
/ 05 августа 2019

Это потому, что в какой-то момент вы конвертировали X_train и y_train в пустые массивы вместо путей к изображениям.

Вот почему питон жалуется. Возможно, вы делали что-то еще с кодом, который требовал от вас преобразования всего набора обучающих данных, но теперь вам это не нужно, потому что у вас есть imread() в функции batch_generator. Я вернусь к предыдущему коду и воссоздаю X_train и y_train как пути к файлам с изображениями, а затем повторно запускаю эту часть кода.

0 голосов
/ 08 ноября 2018

Я не знаю, что вы делаете в функции img_preprocess(), но из того, что я вижу, есть 2 возможных проблемы:

  1. Вы должны добавить путь кизображение к имени изображения: path_to_image = path_to_image_dir + '/' + image

  2. Вы должны фактически открыть изображение, чтобы получить его массив.Вы можете использовать подушку или OpenCV: PIL.Image.open(path_to_image) или cv2.imread(path_to_image)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...