用python加载图像以进行处理的最快方法

用python加载图像以进行处理的最快方法,python,numpy,image-processing,machine-learning,computer-vision,Python,Numpy,Image Processing,Machine Learning,Computer Vision,我想在我的8gb内存中以numpy阵列的形式加载10000多个图像。到目前为止,我已经尝试了cv2.imread、keras.preprocessing.image.load_image、pil、imageio、,scipy.我想以最快的方式完成,但我不知道是哪一个。如果您使用keras库来创建深度学习模型,我建议您使用keras.preprocessing包中的image类 image类提供了一个方法img\u to\u array,该方法已返回一个numpy数组 此外,它在内部使用NumPy

我想在我的8gb内存中以numpy阵列的形式加载10000多个图像。到目前为止,我已经尝试了cv2.imread、keras.preprocessing.image.load_image、pil、imageio、,scipy.我想以最快的方式完成,但我不知道是哪一个。

如果您使用
keras
库来创建
深度学习
模型,我建议您使用
keras.preprocessing
包中的
image

image
类提供了一个方法
img\u to\u array
,该方法已返回一个
numpy
数组

此外,它在内部使用
NumPy-NumPy
进行所有
数组
操作/计算

train_image = image.load_img(path, target_size = (height, width)) 
train_image = image.img_to_array(train_image)

最快的方法之一是让您的多处理器并行完成您的工作。它要求您所需工作的并行化,当并行运行不是问题时,它使多个处理器同时处理您的任务。这种并行处理使您能够快速完成任务。下面的示例只是一个简单的示意图,您可以使用小函数进行练习,然后将其与您自己的代码集成:

from multiprocessing import Process
    #this is the function to be parallelised
    def image_load_here(image_path):
        pass 

if __name__ == '__main__':
    #Start the multiprocesses and provide your dataset.
    p = Process(target=image_load_here,['img1', 'img2', 'img3', 'img4'])
    p.start()
    p.join()

请随意写,我会尽力帮忙。

你能用吗?实际上我用的是类似的东西,我用的不是img\u to\u数组,而是np.asarray(train\u image),速度稍微快一点。@dhrumilbarot,如果有帮助的话,你可以接受我的答案。
    import numpy as np
    import os
    from keras.preprocessing import image


    def batch_data_generator(data, indexes):
        #indexes is a sub array of index from the data
        X = np.zeros((len(indexes), config.IMG_INPUT_SHAPE[0], config.IMG_INPUT_SHAPE[1], config.IMG_INPUT_SHAPE[2]))
        Y = np.zeros((len(indexes), len(label_mapping)))
        i = 0
        for idx in indexes:
            image_id = data['X'][idx]
            filename = os.path.join('images', str(image_id) + '.jpg')
            img = image.load_img(filename, target_size=(300, 300))
            X[i] = np.array(img, dtype='float32')
            label_id = label_mapping[data['Y'][idx]]
            Y[i][label_id] = 1
            i += 1
        # subtract mean and normalize
        for depth in range(3):
            X[:, :, :, depth] = (X[:, :, :, depth] - np.mean(X[:, :, :, depth])) / 255
        return X, Y