python - 如何解决“TypeError:预期的 str、bytes 或 os.PathLike 对象,而不是列表”

我正在尝试从掌纹做我的人检测项目。

有001、002、003、004、......、091、092形式的文件夹,每个文件夹有7个训练数据。我想把所有的数据一个一个地拿来训练它们。

示例文件路径:

'Dataset/TrainWithROI/001/001-Train1.JPG', 
'Dataset/TrainWithROI/001/001-Train2.JPG', 
'Dataset/TrainWithROI/001/001-Train3.JPG', 
'Dataset/TrainWithROI/001/001-Train4.JPG', 
'Dataset/TrainWithROI/001/001-Train5.JPG', 
'Dataset/TrainWithROI/001/001-Train6.JPG', 
'Dataset/TrainWithROI/001/001-Train7.JPG',

但是在我开始训练模型之前,我遇到了这样的错误。

def open_images(path):
    image = load_img(path, color_mode = 'rgb')
    image = np.array(image)/255.0
    return image

def get_labels(paths):

    label = []
    for path in paths:
        path = path.split('/')[-2]
        label.append(labels.index(path))
    return label

def data_gen(data_paths, batch_size=1):
    img=[]
    lab=[]
    for i in range(0, len(data_paths), batch_size):
        paths = data_paths[i:i+batch_size]
        images = open_images(paths)
        img.append(open_images(paths).reshape(224, 224, 3))
        labels = get_labels(paths)
        lab.append(get_labels(paths))
        
        #yield images,np.array(labels)
    return np.array(img) , np.array(lab)

模型:

X_train, y_train = data_gen(train_paths)
X_test, y_test = data_gen(test_paths)

错误:

TypeError: 预期的 str、bytes 或 os.PathLike 对象,而不是列表

回答1

您正在提供 open_images 函数的路径列表,但未对其进行编码以支持该路径。你可以修改这个函数来处理这个问题,试试这个代码:

def open_images(path):
    images = []
    for path in paths:
        image = load_img(path, color_mode = 'rgb')
        image = np.array(image)/255.0
        images.append(image)
    return np.array(images)

回答2

您将图像列表传递给您的函数 open_images,但此函数仅用于打开一个图像,而不是列表。

试试这个:

def data_gen(data_paths, batch_size=1):
    img=[]
    lab=[]
    for i in range(0, len(data_paths), batch_size):
        paths = data_paths[i:i+batch_size]
        for x in paths:
            images = open_images(x)
            img.append(open_images(x).reshape(224, 224, 3))
            labels = get_labels(x)
            lab.append(get_labels(x))

相似文章

sql - 在列中使用 SQL 分隔字母和数字

我有记录,有时带有一个文本和一个数字,有时带有两个、三个或四个,它们用两点“:”分隔。我想将数字和文本拆分为多列。这是一个记录示例:3月:4月1日:5月2日:6月10日:1期望的结果:Str_1ite...

最新文章