我有一个自动驾驶汽车的数据集。我的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
。我了解错误,图片不是数组而是字符串。如何将图像路径的字符串转换为数组
答案 0 :(得分:1)
这是因为您有时将X_train
和y_train
转换为numpy数组而不是图像路径。
这就是python抱怨的原因。您可能正在使用需要转换整个训练数据集的代码做其他事情,但是现在您不需要了,因为imread()
函数中有batch_generator
。我将回到代码的前面,并重新创建X_train
和y_train
作为图像的文件路径,然后重新运行代码的这一部分。
答案 1 :(得分:0)
我不知道您在img_preprocess()
函数中正在做什么,但是从我看来,有两个可能的问题:
您必须将图像的路径附加到图像名称:path_to_image = path_to_image_dir + '/' + image
您必须实际打开图像以获取它的数组。您可以使用Pillow或OpenCV:
PIL.Image.open(path_to_image)
或cv2.imread(path_to_image)