File size: 2,944 Bytes
c64dfa4 |
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 |
import os
import pickle
import sys
from argparse import ArgumentParser
try:
import bpy
sys.path.append(os.path.dirname(bpy.data.filepath))
except ImportError:
raise ImportError(
"Blender is not properly installed or not launch properly. See README.md to have instruction on how to install and use blender.")
import mld.launch.blender # noqa
from mld.render.blender import render
def parse_args():
parser = ArgumentParser()
parser.add_argument("--pkl", type=str, default=None, help="pkl motion file")
parser.add_argument("--dir", type=str, default=None, help="pkl motion folder")
parser.add_argument("--mode", type=str, default="sequence", help="render target: video, sequence, frame")
parser.add_argument("--res", type=str, default="high")
parser.add_argument("--denoising", type=bool, default=True)
parser.add_argument("--oldrender", type=bool, default=True)
parser.add_argument("--accelerator", type=str, default='gpu', help='accelerator device')
parser.add_argument("--device", type=int, nargs='+', default=[0], help='gpu ids')
parser.add_argument("--faces_path", type=str, default='./deps/smpl_models/smplh/smplh.faces')
parser.add_argument("--always_on_floor", action="store_true", help='put all the body on the floor (not recommended)')
parser.add_argument("--gt", type=str, default=False, help='green for gt, otherwise orange')
parser.add_argument("--fps", type=int, default=20, help="the frame rate of the rendered video")
parser.add_argument("--num", type=int, default=8, help="the number of frames rendered in 'sequence' mode")
parser.add_argument("--exact_frame", type=float, default=0.5, help="the frame id selected under 'frame' mode ([0, 1])")
cfg = parser.parse_args()
return cfg
def render_cli() -> None:
cfg = parse_args()
if cfg.pkl:
paths = [cfg.pkl]
elif cfg.dir:
paths = []
file_list = os.listdir(cfg.dir)
for item in file_list:
if item.endswith("_mesh.pkl"):
paths.append(os.path.join(cfg.dir, item))
else:
raise ValueError(f'{cfg.pkl} and {cfg.dir} are both None!')
for path in paths:
try:
with open(path, 'rb') as f:
pkl = pickle.load(f)
data = pkl['vertices']
trajectory = pkl['hint']
except FileNotFoundError:
print(f"{path} not found")
continue
render(
data,
trajectory,
path,
exact_frame=cfg.exact_frame,
num=cfg.num,
mode=cfg.mode,
faces_path=cfg.faces_path,
always_on_floor=cfg.always_on_floor,
oldrender=cfg.oldrender,
res=cfg.res,
gt=cfg.gt,
accelerator=cfg.accelerator,
device=cfg.device,
fps=cfg.fps)
if __name__ == "__main__":
render_cli()
|