SemanticBoost / SMPLX /joints2smpl.py
kleinhe
init
c3d0293
import torch
from SMPLX.visualize_joint2smpl.simplify_loc2rot import joints2smpl
import argparse
import numpy as np
import os
from tqdm import tqdm
parser = argparse.ArgumentParser(description='transfer joint3d to smpls')
parser.add_argument("--model_path", default="/data/TTA/data/body_models")
parser.add_argument('--source_path', default="/data/TTA/data/humanact12/group_000")
parser.add_argument("--target_path", default="/data/TTA/data/humanact_smplh/group_000")
parser.add_argument("--mode", default="joints", choices=["t2m", "joints"])
args = parser.parse_args()
device = "cuda"
if os.path.isdir(args.source_path):
os.makedirs(args.target_path, exist_ok=True)
files = os.listdir(args.source_path)
target_files = files
else:
files = [args.source_path]
args.source_path = ""
if args.target_path.split(".")[-1] != "npy":
os.makedirs(args.target_path)
target_files = [files[0].split("/")[-1]]
else:
target_files = [args.target_path]
args.target_path = ""
for i in range(len(files)):
curr_path = os.path.join(args.source_path, files[i])
target_path = os.path.join(args.target_path, target_files[i])
if os.path.exists(target_path):
continue
curr_file = np.load(curr_path) #### [nframe, 263]
curr_file = torch.from_numpy(curr_file)
if args.mode == "t2m":
from dataset.t2m.recover_joints import recover_from_ric
motions = recover_from_ric(curr_file, 22) #### [nframes, 22, 3]
motions = motions.detach().cpu().numpy()
else:
motions = curr_file.detach().cpu().numpy()
frames, njoints, nfeats = motions.shape
MINS = motions.min(axis=0).min(axis=0)
MAXS = motions.max(axis=0).max(axis=0)
height_offset = MINS[1]
motions[:, :, 1] -= height_offset
model = joints2smpl(frames, 0, True, model_path=args.model_path)
target, trans = model.joint2smpl(motions)
target = np.concatenate([target, trans], axis=1)
np.save(target_path, target)
if i % 10 == 0:
print("save %d npys"%(i))