Я пытаюсь применить 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)