Как увеличить более одного изображения в дополнении ImageDataGenerator? - PullRequest
0 голосов
/ 09 января 2019

Я хочу увеличить (увеличить) количество изображений, которые у меня есть (50 изображений), используя ImageDataGeneator.

Я нашел следующий код, но он увеличивает только одно изображение за раз (один файл). Я новичок в Python, поэтому, если есть какой-либо другой более простой способ, чтобы автоматически увеличить 50 изображений одновременно и сохранить результат в новой папке

import numpy as np
import keras
from keras.preprocessing.image import ImageDataGenerator, array_to_img, 
img_to_array, load_img
datagen = ImageDataGenerator(rotation_range =15, 
                         width_shift_range = 0.2, 
                         height_shift_range = 0.2,  
                         rescale=1./255, 
                         shear_range=0.2, 
                         zoom_range=0.2, 
                         horizontal_flip = True, 
                         fill_mode = 'nearest', 
                         data_format='channels_last', 
                         brightness_range=[0.5, 1.5])

# This is my problem, It loads only one file, and i am searching for an 
automated method to load number of files together and save them in 
another folder. 

img = load_img(r"C:\Users\user 1\Pictures\people_1\1.jpg")

x = img_to_array(img)
x = x.reshape((1,) + x.shape)

i = 0
for batch in datagen.flow (x, batch_size=1, save_to_dir =r'C:\Users\user 
1\Pictures\people_1\preview', save_prefix ='people2', save_format='jpg'):
    i+=1
    if i>10:
        break

Ожидаемый результат от вышеприведенного кода - 10 дополненных изображений, извлеченных из основного файла 1.jpg, в то время как у меня есть еще 50 файлов, я ищу более быстрый способ объединить их все в один код

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Я думаю, что вы можете сделать цикл для анализа каждого изображения. Он будет смотреть на одно изображение за раз, но вам нужно будет выполнить код только один раз. Во-первых, вы можете использовать метод Python os.listdir () . Этот метод вернет все имена архивов и соответствующее расширение. После вы можете построить цикл так, чтобы все имена были прочитаны. Взгляните:

import numpy as np
import keras
from keras.preprocessing.image import ImageDataGenerator, array_to_img, 
img_to_array, load_img
import os

datagen = ImageDataGenerator(rotation_range =15, 
                     width_shift_range = 0.2, 
                     height_shift_range = 0.2,  
                     rescale=1./255, 
                     shear_range=0.2, 
                     zoom_range=0.2, 
                     horizontal_flip = True, 
                     fill_mode = 'nearest', 
                     data_format='channels_last', 
                     brightness_range=[0.5, 1.5]) 

imgs = os.listdir(<path_50_imgs>)

for img in imgs:
    img=cv2.imread(<path_50_imgs>+"\\"+img)
    x = img_to_array(img)
    x = x.reshape((1,) + x.shape)

    i = 0
    for batch in datagen.flow (x, batch_size=1, save_to_dir =r'C:\\Users\\user1\\Pictures\\people_1\\preview', save_prefix ='people2', save_format='jpg'):
        i+=1
        if i>10:
            break
0 голосов
/ 20 марта 2019

Я думаю, что сделает работу:

dataset=ImageDataGenerator()
generator = dataset.flow_from_directory('/folder/of/photos',target_size=(110,110),save_to_dir='/folder/to/save/photos',class_mode='binary',save_prefix='N',save_format='jpeg',batch_size=10)

for inputs,outputs in generator:
  continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...