Spaces:
Sleeping
Sleeping
| import os | |
| import cv2 | |
| from tqdm import tqdm | |
| class ImageCreator: | |
| def __init__(self, filename, imgs_dir, image_start=0, image_end=0, pbar=True): | |
| """ | |
| :param str filename: The name of the video's filename. | |
| :param str imgs_dir: The directory where to store the image files. | |
| :param int image_start: The first image to be extracted. | |
| :param int image_end: The last image to be extracted, 0 if full video. | |
| :param bool pbar: Whether to display a progress bar. | |
| """ | |
| self.filename = filename | |
| self.imgs_dir = imgs_dir | |
| self.image_start = image_start | |
| self.image_end = image_end | |
| self.pbar = pbar | |
| if not os.path.exists(imgs_dir): | |
| os.makedirs(imgs_dir) | |
| def get_images(self): | |
| vid = cv2.VideoCapture(self.filename) | |
| total_frames = int(vid.get(cv2.CAP_PROP_FRAME_COUNT)) | |
| success, image = vid.read() | |
| count = 0 | |
| if self.image_end == 0: | |
| self.image_end = total_frames | |
| zfill_max = len(str(total_frames)) | |
| ok_count = 0 | |
| print("Writing images...") | |
| if self.pbar: | |
| pb = tqdm(total=total_frames) | |
| while success: | |
| if count >= self.image_start and count <= self.image_end: | |
| cv2.imwrite( | |
| f"{self.imgs_dir}/frame_{str(ok_count).zfill(zfill_max)}.png", image | |
| ) | |
| ok_count += 1 | |
| success, image = vid.read() | |
| if self.pbar: | |
| pb.update(1) | |
| count += 1 | |
| if self.pbar: | |
| pb.close() | |
| print("Wrote {} image files.".format(ok_count)) | |