File size: 3,820 Bytes
8b79d57 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
"""
python generate_videomatte_with_background_video.py \
--videomatte-dir ../matting-data/VideoMatte240K_JPEG_HD/test \
--background-dir ../matting-data/BackgroundVideos_mp4/test \
--resize 512 288 \
--out-dir ../matting-data/evaluation/vidematte_motion_sd/
"""
import argparse
import os
import pims
import numpy as np
import random
from PIL import Image
from tqdm import tqdm
parser = argparse.ArgumentParser()
parser.add_argument('--videomatte-dir', type=str, required=True)
parser.add_argument('--background-dir', type=str, required=True)
parser.add_argument('--num-samples', type=int, default=20)
parser.add_argument('--num-frames', type=int, default=100)
parser.add_argument('--resize', type=int, default=None, nargs=2)
parser.add_argument('--out-dir', type=str, required=True)
args = parser.parse_args()
# Hand selected a list of videos
background_filenames = [
"0000.mp4",
"0007.mp4",
"0008.mp4",
"0010.mp4",
"0013.mp4",
"0015.mp4",
"0016.mp4",
"0018.mp4",
"0021.mp4",
"0029.mp4",
"0033.mp4",
"0035.mp4",
"0039.mp4",
"0050.mp4",
"0052.mp4",
"0055.mp4",
"0060.mp4",
"0063.mp4",
"0087.mp4",
"0086.mp4",
"0090.mp4",
"0101.mp4",
"0110.mp4",
"0117.mp4",
"0120.mp4",
"0122.mp4",
"0123.mp4",
"0125.mp4",
"0128.mp4",
"0131.mp4",
"0172.mp4",
"0176.mp4",
"0181.mp4",
"0187.mp4",
"0193.mp4",
"0198.mp4",
"0220.mp4",
"0221.mp4",
"0224.mp4",
"0229.mp4",
"0233.mp4",
"0238.mp4",
"0241.mp4",
"0245.mp4",
"0246.mp4"
]
random.seed(10)
videomatte_filenames = [(clipname, sorted(os.listdir(os.path.join(args.videomatte_dir, 'fgr', clipname))))
for clipname in sorted(os.listdir(os.path.join(args.videomatte_dir, 'fgr')))]
random.shuffle(background_filenames)
for i in range(args.num_samples):
bgrs = pims.PyAVVideoReader(os.path.join(args.background_dir, background_filenames[i % len(background_filenames)]))
clipname, framenames = videomatte_filenames[i % len(videomatte_filenames)]
out_path = os.path.join(args.out_dir, str(i).zfill(4))
os.makedirs(os.path.join(out_path, 'fgr'), exist_ok=True)
os.makedirs(os.path.join(out_path, 'pha'), exist_ok=True)
os.makedirs(os.path.join(out_path, 'com'), exist_ok=True)
os.makedirs(os.path.join(out_path, 'bgr'), exist_ok=True)
base_t = random.choice(range(len(framenames) - args.num_frames))
for t in tqdm(range(args.num_frames), desc=str(i).zfill(4)):
with Image.open(os.path.join(args.videomatte_dir, 'fgr', clipname, framenames[base_t + t])) as fgr, \
Image.open(os.path.join(args.videomatte_dir, 'pha', clipname, framenames[base_t + t])) as pha:
fgr = fgr.convert('RGB')
pha = pha.convert('L')
if args.resize is not None:
fgr = fgr.resize(args.resize, Image.BILINEAR)
pha = pha.resize(args.resize, Image.BILINEAR)
if i // len(videomatte_filenames) % 2 == 1:
fgr = fgr.transpose(Image.FLIP_LEFT_RIGHT)
pha = pha.transpose(Image.FLIP_LEFT_RIGHT)
fgr.save(os.path.join(out_path, 'fgr', str(t).zfill(4) + '.png'))
pha.save(os.path.join(out_path, 'pha', str(t).zfill(4) + '.png'))
bgr = Image.fromarray(bgrs[t])
bgr = bgr.resize(fgr.size, Image.BILINEAR)
bgr.save(os.path.join(out_path, 'bgr', str(t).zfill(4) + '.png'))
pha = np.asarray(pha).astype(float)[:, :, None] / 255
com = Image.fromarray(np.uint8(np.asarray(fgr) * pha + np.asarray(bgr) * (1 - pha)))
com.save(os.path.join(out_path, 'com', str(t).zfill(4) + '.png'))
|