Path: blob/master/Efficient-image-loading/create_lmdb.py
3118 views
import os1from argparse import ArgumentParser23import cv24import lmdb5import numpy as np67from tools import get_images_paths8910def store_many_lmdb(images_list, save_path):1112num_images = len(images_list) # number of images in our folder1314file_sizes = [os.path.getsize(item) for item in images_list] # all file sizes15max_size_index = np.argmax(file_sizes) # the maximum file size index1617# maximum database size in bytes18map_size = num_images * cv2.imread(images_list[max_size_index]).nbytes * 101920env = lmdb.open(save_path, map_size=map_size) # create lmdb environment2122with env.begin(write=True) as txn: # start writing to environment23for i, image in enumerate(images_list):24with open(image, "rb") as file:25data = file.read() # read image as bytes26key = f"{i:08}" # get image key27txn.put(key.encode("ascii"), data) # put the key-value into database2829env.close() # close the environment303132if __name__ == "__main__":33parser = ArgumentParser()34parser.add_argument(35"--path",36"-p",37type=str,38required=True,39help="path to the images folder to collect",40)41parser.add_argument(42"--output",43"-o",44type=str,45required=True,46help='path to the output environment directory file i.e. "path/to/folder/env/"',47)4849args = parser.parse_args()50if not os.path.exists(args.output):51os.makedirs(args.output)5253images = get_images_paths(args.path)54store_many_lmdb(images, args.output)555657