Spaces:
Runtime error
Runtime error
| import argparse | |
| import os | |
| os.environ["MKL_NUM_THREADS"] = "1" | |
| os.environ["NUMEXPR_NUM_THREADS"] = "1" | |
| os.environ["OMP_NUM_THREADS"] = "1" | |
| from functools import partial | |
| from glob import glob | |
| from multiprocessing.pool import Pool | |
| from os import cpu_count | |
| import cv2 | |
| cv2.ocl.setUseOpenCL(False) | |
| cv2.setNumThreads(0) | |
| from tqdm import tqdm | |
| def extract_video(video, root_dir): | |
| capture = cv2.VideoCapture(video) | |
| frames_num = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) | |
| for i in range(frames_num): | |
| capture.grab() | |
| success, frame = capture.retrieve() | |
| if not success: | |
| continue | |
| id = os.path.splitext(os.path.basename(video))[0] | |
| cv2.imwrite(os.path.join(root_dir, "jpegs", "{}_{}.jpg".format(id, i)), frame, [cv2.IMWRITE_JPEG_QUALITY, 100]) | |
| if __name__ == '__main__': | |
| parser = argparse.ArgumentParser( | |
| description="Extracts jpegs from video") | |
| parser.add_argument("--root-dir", help="root directory") | |
| args = parser.parse_args() | |
| os.makedirs(os.path.join(args.root_dir, "jpegs"), exist_ok=True) | |
| videos = [video_path for video_path in glob(os.path.join(args.root_dir, "*/*.mp4"))] | |
| with Pool(processes=cpu_count() - 2) as p: | |
| with tqdm(total=len(videos)) as pbar: | |
| for v in p.imap_unordered(partial(extract_video, root_dir=args.root_dir), videos): | |
| pbar.update() | |