如何将图像输入模型Keras

时间:2018-11-08 02:46:06

标签: python image-processing keras neural-network deep-learning

我有一个自动驾驶汽车的数据集。我的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 :(得分:1)

这是因为您有时将X_trainy_train转换为numpy数组而不是图像路径。

这就是python抱怨的原因。您可能正在使用需要转换整个训练数据集的代码做其他事情,但是现在您不需要了,因为imread()函数中有batch_generator。我将回到代码的前面,并重新创建X_trainy_train作为图像的文件路径,然后重新运行代码的这一部分。

答案 1 :(得分:0)

我不知道您在img_preprocess()函数中正在做什么,但是从我看来,有两个可能的问题:

  1. 您必须将图像的路径附加到图像名称:path_to_image = path_to_image_dir + '/' + image

  2. 您必须实际打开图像以获取它的数组。您可以使用Pillow或OpenCV: PIL.Image.open(path_to_image)cv2.imread(path_to_image)