muzairkhattak
first commit for the demo
37b3db0
raw
history blame
2.91 kB
import os
import tarfile
import io
import json
from tqdm.contrib import tzip
import argparse
def create_webdataset(orig_file_path, refined_file_path, output_dir, parent_dataset_path, tar_size=1000):
os.makedirs(output_dir, exist_ok=True)
with open(orig_file_path, "r") as f:
reader = json.load(f)['annotations']
reader_refined = json.load(open(refined_file_path, "r"))['refined_captions']
tar_index = 0
file_count = 0
tar = None
for full_caption, refined_caption_list in tzip(reader, reader_refined):
if file_count % tar_size == 0:
if tar:
tar.close()
tar_index += 1
tar_path = os.path.join(output_dir, f"dataset-{tar_index:06d}.tar")
tar = tarfile.open(tar_path, 'w')
filename = full_caption['image_id']
caption_orig = [full_caption['caption']]
caption_orig += refined_caption_list
all_caption = caption_orig
caption = ''
for single_caption in all_caption: caption += single_caption.strip('.') + "._openi_"
# Read the image file
image_path = os.path.join(parent_dataset_path, filename + ".png")
with open(image_path, 'rb') as img_file:
img_data = img_file.read()
# Create an in-memory tarfile
img_tarinfo = tarfile.TarInfo(name=f"{file_count:06d}.jpg")
img_tarinfo.size = len(img_data)
tar.addfile(img_tarinfo, io.BytesIO(img_data))
# Add caption.txt to the tarfile
caption_data = caption.encode('utf-8')
caption_tarinfo = tarfile.TarInfo(name=f"{file_count:06d}.txt")
caption_tarinfo.size = len(caption_data)
tar.addfile(caption_tarinfo, io.BytesIO(caption_data))
file_count += 1
if tar:
tar.close()
if __name__ == "__main__":
# Argument parser setup
parser = argparse.ArgumentParser(description="Create a WebDataset from CSV")
parser.add_argument('--original_json_file_summarizations_path', type=str, required=True)
parser.add_argument('--gpt_text_descriptions_path', type=str, required=True, help="Path to the CSV file")
parser.add_argument('--output_dir', type=str, required=True, help="Directory to store the output tar files")
parser.add_argument('--parent_dataset_path', type=str, required=True,
help="Path to the parent dataset containing images")
parser.add_argument('--tar_size', type=int, default=1000, help="Number of files per tar file")
# Parse the arguments
args = parser.parse_args()
# Call the function with the parsed arguments
create_webdataset(args.original_json_file_summarizations_path, args.gpt_text_descriptions_path, args.output_dir,
args.parent_dataset_path)