【问题标题】:fastest way to load images in python for processing在python中加载图像进行处理的最快方法
【发布时间】:2018-10-18 10:12:53
【问题描述】:

我想以 numpy 数组的形式在我的 8gb 内存中加载超过 10000 张图像。到目前为止,我已经尝试过 cv2.imread、keras.preprocessing.image.load_image、pil、imageio、scipy。我想做最快的方法,但我不知道是哪一个。

【问题讨论】:

标签: python numpy image-processing machine-learning computer-vision


【解决方案1】:

如果您使用keras 库来创建deep learning 模型,我建议您使用keras.preprocessing 包中的image 类。

image 类提供了一个方法 img_to_array,它已经返回了一个 numpy 数组。

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

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

【讨论】:

  • 实际上我使用的是类似的东西,而不是 img_to_array 我使用 np.asarray(train_image) 并且它稍微快一些。
  • @dhrumilbarot,如果对您有帮助,您可以接受我的回答。
【解决方案2】:

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

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()

随意写,我想帮忙。

【讨论】:

    【解决方案3】:
        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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 2021-12-26
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多