-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgenerateMocapFile.py
66 lines (52 loc) · 2.28 KB
/
generateMocapFile.py
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
import numpy as np
import os
import argparse
#python generateMocapFile.py --amass_root= --datasets=CMU --datasets=HumanEva
def shuffleData(nrOfSequences):
shuffleIdx = np.arange(0,nrOfSequences)
np.random.shuffle(shuffleIdx)
return shuffleIdx
parser = argparse.ArgumentParser(description='generate MoCap file from AMASS')
parser.add_argument('--amass_root',default='./amass', help='root directory of AMASS')
parser.add_argument('--datasets', '--list', action='append')
parser.add_argument('--saveName', type=str, default='mocapData')
parser.add_argument('--trainRatio', default=0.8)
parser.add_argument('--testRatio', default=0.1)
args = parser.parse_args()
datasets = args.datasets
root_dir = args.amass_root
saveName = args.saveName
trainRatio = args.trainRatio
testRatio = args.testRatio
mocapDict = {}
pose_counter = 0
for dataset in datasets:
dataPath = os.path.join(root_dir, dataset)
sequences = os.listdir(dataPath)
for seqName in sequences:
seqPath = os.path.join(dataPath, seqName)
motions = os.listdir(seqPath)
for motion in motions:
seqMotion = np.load(os.path.join(seqPath, motion))
for key in seqMotion.keys():
if key in ['trans', 'poses', "mocap_framerate"]:
if key == 'poses':
keyName = 'pose'
pose_counter += 1
elif key == 'mocap_framerate':
keyName = 'framerate'
else:
keyName = key
motKey = '_'.join(motion.split('_')[:-1])
mocapKey = '_'.join([keyName, dataset.lower(), seqName, motKey])
mocapDict[mocapKey] = seqMotion[key]
if os.path.isfile('./datageneration/smpl_data/'+saveName+'.npz'):
inK = None
while not(inK == 'y') and not(inK == 'n'):
print('warning, this file does already exist. If you want to overwrite it press y, else press n. Please note that the random train/test/val split will be overwritten!')
inK = input()
if inK == 'n':
exit(-1)
np.savez('./datageneration/smpl_data/'+saveName+'.npz', **mocapDict)
shuffleIdx = shuffleData(pose_counter )
np.save('./datageneration/resources/random_mocap_order_'+saveName+'.npy', shuffleIdx)