Spaces:
Runtime error
Runtime error
# make_training_vid("outputs/zero123/64_teddy_rgba.png@20230627-195615", frames_per_vid=30, fps=20, max_iters=200) | |
import argparse | |
import glob | |
import os | |
import imageio | |
import numpy as np | |
from PIL import Image, ImageDraw | |
from tqdm import tqdm | |
def draw_text_in_image(img, texts): | |
img = Image.fromarray(img) | |
draw = ImageDraw.Draw(img) | |
black, white = (0, 0, 0), (255, 255, 255) | |
for i, text in enumerate(texts): | |
draw.text((2, (img.size[1] // len(texts)) * i + 1), f"{text}", white) | |
draw.text((0, (img.size[1] // len(texts)) * i + 1), f"{text}", white) | |
draw.text((2, (img.size[1] // len(texts)) * i - 1), f"{text}", white) | |
draw.text((0, (img.size[1] // len(texts)) * i - 1), f"{text}", white) | |
draw.text((1, (img.size[1] // len(texts)) * i), f"{text}", black) | |
return np.asarray(img) | |
def make_training_vid(exp, frames_per_vid=1, fps=3, max_iters=None, max_vids=None): | |
# exp = "/admin/home-vikram/git/threestudio/outputs/zero123/64_teddy_rgba.png@20230627-195615" | |
files = glob.glob(os.path.join(exp, "save", "*.mp4")) | |
if os.path.join(exp, "save", "training_vid.mp4") in files: | |
files.remove(os.path.join(exp, "save", "training_vid.mp4")) | |
its = [int(os.path.basename(file).split("-")[0].split("it")[-1]) for file in files] | |
it_sort = np.argsort(its) | |
files = list(np.array(files)[it_sort]) | |
its = list(np.array(its)[it_sort]) | |
max_vids = max_iters // its[0] if max_iters is not None else max_vids | |
files, its = files[:max_vids], its[:max_vids] | |
frames, i = [], 0 | |
for it, file in tqdm(zip(its, files), total=len(files)): | |
vid = imageio.mimread(file) | |
for _ in range(frames_per_vid): | |
frame = vid[i % len(vid)] | |
frame = draw_text_in_image(frame, [str(it)]) | |
frames.append(frame) | |
i += 1 | |
# Save | |
imageio.mimwrite(os.path.join(exp, "save", "training_vid.mp4"), frames, fps=fps) | |
def join(file1, file2, name): | |
# file1 = "/admin/home-vikram/git/threestudio/outputs/zero123/OLD_64_dragon2_rgba.png@20230629-023028/save/it200-val.mp4" | |
# file2 = "/admin/home-vikram/git/threestudio/outputs/zero123/64_dragon2_rgba.png@20230628-152734/save/it200-val.mp4" | |
vid1 = imageio.mimread(file1) | |
vid2 = imageio.mimread(file2) | |
frames = [] | |
for f1, f2 in zip(vid1, vid2): | |
frames.append( | |
np.concatenate([f1[:, : f1.shape[0]], f2[:, : f2.shape[0]]], axis=1) | |
) | |
imageio.mimwrite(name, frames) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--exp", help="directory of experiment") | |
parser.add_argument( | |
"--frames_per_vid", type=int, default=1, help="# of frames from each val vid" | |
) | |
parser.add_argument("--fps", type=int, help="max # of iters to save") | |
parser.add_argument("--max_iters", type=int, help="max # of iters to save") | |
parser.add_argument( | |
"--max_vids", | |
type=int, | |
help="max # of val videos to save. Will be overridden by max_iters", | |
) | |
args = parser.parse_args() | |
make_training_vid( | |
args.exp, args.frames_per_vid, args.fps, args.max_iters, args.max_vids | |
) | |