File size: 2,062 Bytes
c3d0293
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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))