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?"