如何将图像输入到模型Keras中



我有一个自动驾驶汽车的数据集。我的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。我理解这个错误,图像不是数组而是字符串。如何将图像路径的字符串转换为阵列

这是因为在某个时刻,您将X_trainy_train转换为numpy数组,而不是图像路径。

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

我不知道你在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)

最新更新