Зачем преобразовывать Pool.map для больших наборов данных в массив, возвращающий неправильную форму? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь применить pool.map к списку имен файлов изображений.Когда я применяю те же функции к 21 изображению, это работает очень хорошо.Однако, когда я применяю его к большим файлам изображений, 40596, он всегда возвращает неправильное измерение.

Я ожидаю: (21,64,224,224,3) для 21 изображения.(40596, 64,224,224,3) для 40596 изображений.Однако сервер вернул (21,64,224,224,3) для 21 изображения.(40596,) для 40596 изображений.

Ниже приведен мой код:

def resize_crop_resize(filename, save_folder= "", size = 224, split_N =8,  width =28):
from PIL import Image
import numpy as np

#Resize Functions
image = Image.open(filename)
new_image = image.resize((size,size))
#print(filename)

split_name = filename.split('.')[0]
#Crop Functions
count = 0


for i in range(int(split_N)):
    for j in range(int(split_N)):
        count = count + 1
        box = (j*width, i*width, (j+1)*width, (i+1)*width)
        cropped_img = new_image.crop(box)
        #Resize Functions
        output = cropped_img.resize((size,size))
        #Save Images
        savename = split_name + '_' + str(i)+ '_' + str(j)+'.jpg'
        # print(savename)
        output_ar = np.array(output)
        if len(output_ar.shape) !=3:
            return
        output.save(save_folder+savename)
        if count == 1:
            final_arr = output_ar.reshape(1,size,size,3)
        else:
            final_arr = np.concatenate((final_arr, np.array(output).reshape(1,size,size,3)), axis=0) #224*224*3
print(final_arr.shape)
return final_arr

if name == ' main ': ....

os.chdir(root_folder)

image_files = glob.glob("*.jpg")
num_cores = multiprocessing.cpu_count()
print('We use %d processors' % (num_cores))
p = Pool(num_cores)
img_ar = np.array(p.map(resize_crop_resize,image_files))
print(img_ar.shape)
...