Skip to content Skip to sidebar Skip to footer

How To Save Numpy Array Images And Put Them Into A Single Folder?

I have a numpy array containing 5000 28 by 28 images (5000,28,28). I want to save all these images as jpg files and save them all in a single folder. What is the fastest and most e

Solution 1:

I tried writing 50,000 images of 28x28 to disk as JPEG using:

  • sequential code (25seconds)
  • multi-threaded code (19 seconds)
  • multi-processing code (5 seconds)

on a 12-core MacBook Pro with SSDs. Times are given in parentheses after each item in list above.

#!/usr/bin/env python3import numpy as np
import imageio
from multiprocessing import Pool
from multiprocessing.pool import ThreadPool

defWriteOne(i,data):
    """Write a single image to disk"""#print(f"WriteOne called with i={i}")
    imageio.imwrite(f"image-{i:04d}.jpg", data)

defWriteSequential(images):
    """Write all images sequentially to disk"""print("Sequential")
    for i, data inenumerate(images):
        WriteOne(i, data)
    returndefWriteIndices(p):
    """Write given index to disk as JPEG"""#print(f"WriteIndices {p[0]}")
    WriteOne(p[0], p[1])
    returndefWriteMultiThread(images):
    """Write all images  to disk with multi-threading"""print("MultiThread")
    nThreads = 8with ThreadPool(nThreads) as pool:
        pool.map(WriteIndices, list(enumerate(images)))
    returndefWriteMultiProcess(images):
    """Write all images  to disk with multi-processing"""print("MultiProcess")
    nProcesses = 8with Pool(nProcesses) as pool:
        pool.map(WriteIndices, list(enumerate(images)))
    returnif __name__ == '__main__':

    # Synthesize 50000 images, each 28x28
    N = 50000
    images = np.random.randint(0,256,(N,28,28), dtype=np.uint8)

    WriteSequential(images)

    WriteMultiThread(images)

    WriteMultiProcess(images)

Post a Comment for "How To Save Numpy Array Images And Put Them Into A Single Folder?"