创建多个类别的图像数据集

时间:2019-04-10 04:06:37

标签: python keras

我是python的新用户,需要我的图像数据集代码的一些帮助,我想以(x_train,y_train),(x_test,y_test)的形式制作数据集。我的目录中已经有图像。我的数据集目录中有多个类,其中包含train和test文件夹。

我想从目录中读取整个图像。我已经尝试过一些代码,但是会引发错误。

row = 256
column = 256
channel = 3
class = 30 random

train = 'directory'
test = 'directory'
train_images = [train+i for i in os.listdir(train)]
test_images =  [test+i for i in os.listdir(test)]

def read_image(filepath):
    img = cv2.imread(filepath,cv2.IMREAD_COLOR)#i have RGB images
    return
def prepare_data(images):
    x = len(images)
    y = np.zeros((x,row,column,channel),dtype=np.uint8)
    z = np.zeros((class,x))
    for i,image_file in enumerate(images)
    a[i,:] = read image(image_file)   #here how i get all images from different classes directories
     if 'class1' in image_file.lower():
         z[0,i] = class name1
     elif 'class2' in image_file.lower():
         z[1,i] = class name2
     elif 'class3' in image_file.lower():
         z[2,i]  = class name3
       ...
       ....
       ....
     return y,z

这里我遇到了问题,它无法访问来自不同类的整个图像。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以遍历文件名,使用编写的函数read_image()加载文件并将其附加到列表中。同样根据名称的条件,您也可以附加标签。

请参见下面的代码,以实现perpare_data()函数。

def prepare_data(images):

    x, y = [], []

    for image_file in images:
        img = read_image(image_file)
        x.append(img)

        if 'class1' in image_file.lower():
            y.append(class_name_1)
        elif 'class2' in image_file.lower():
            y.append(class_name_2)
        elif 'class3' in image_file.lower():
            y.append(class_name_3)

    x = np.array(x)
    y = np.array(y)

    return x, y

您可以按如下所示使用它来获取xy数组。

train_x, train_y = prepare_data(train_images)
test_x, test_y = prepare_data(test_images)

此外,您必须像这样更改路径定义,

train = 'directory//'
test = 'directory//'

在您提供的用于读取图像的代码中,读取后不会返回图像,如下所示更新代码,

def read_image(filepath):
    img = cv2.imread(filepath,cv2.IMREAD_COLOR)#i have RGB images
    return img