import os import multiprocessing as mp import csv import argparse def process_video(video_path, gpu_id, save_folder, args): os.system(f'sh ./benchmark/demo.sh {video_path} {gpu_id} {int(args.process_length)} {args.saved_root} {save_folder} {args.overlap} {args.dataset}') if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--meta_path', type=str) parser.add_argument('--saved_dataset_folder', type=str) parser.add_argument('--saved_root', type=str, default="./output") parser.add_argument('--input_rgb_root', type=str) parser.add_argument('--process_length', type=int, default=110) parser.add_argument('--gpus', type=str, default="0,1,2,3") parser.add_argument('--overlap', type=int, default=1) parser.add_argument('--dataset', type=str, default="open") args = parser.parse_args() gpus = args.gpus.strip().split(',') with open(args.meta_path, mode="r", encoding="utf-8") as csvfile: csv_reader = csv.DictReader(csvfile) test_samples = list(csv_reader) batch_size = len(gpus) video_batches = [test_samples[i:i+batch_size] for i in range(0, len(test_samples), batch_size)] print("gpus+++: ", gpus) processes = [] for video_batch in video_batches: for i, sample in enumerate(video_batch): video_path = os.path.join(args.input_rgb_root, sample["filepath_left"]) save_folder = os.path.join(args.saved_dataset_folder, os.path.dirname(sample["filepath_left"])) gpu_id = gpus[i % len(gpus)] p = mp.Process(target=process_video, args=(video_path, gpu_id, save_folder, args)) p.start() processes.append(p) for p in processes: p.join()