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)) | |