Создать набор данных изображений для нескольких классов - PullRequest
3 голосов
/ 10 апреля 2019

Я новый пользователь в 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 голосов
/ 10 апреля 2019

Вы можете перебирать имена файлов, загружать файл с помощью написанной вами функции - 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

Вы можете использовать его, как показано ниже, чтобы получить массивы x и y при необходимости.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...