[fd9ef4]: / datasets / Gait3D / pretreatment_smpl.py

Download this file

83 lines (66 with data), 2.7 kB

 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
# -*- coding: utf-8 -*-
"""
Author : jinkai Zheng
date: 2021/10/30
E-mail: zhengjinkai3@qq.com
"""
import os.path as osp
import time
import os
import threading
import itertools
import numpy as np
import pickle
import argparse
parser = argparse.ArgumentParser(description='Test')
parser.add_argument('-i', '--input_path', default='', type=str,
help='Root path of raw dataset.')
parser.add_argument('-o', '--output_path', default='', type=str,
help='Root path for output.')
opt = parser.parse_args()
def get_pickle(thread_id, id_list, save_dir):
for id in sorted(id_list):
print(f"Process threadID-PID: {thread_id}-{id}")
cam_list = os.listdir(osp.join(data_dir, id))
cam_list.sort()
for cam in cam_list:
seq_list = os.listdir(osp.join(data_dir, id, cam))
seq_list.sort()
for seq in seq_list:
npz_list = os.listdir(osp.join(data_dir, id, cam, seq))
npz_list.sort()
smpl_paras_fras = []
for npz in npz_list:
npz_path = osp.join(data_dir, id, cam, seq, npz)
frame = np.load(npz_path, allow_pickle=True)['results'][()][0]
smpl_cam = frame['cam'] # 3-D
smpl_pose = frame['poses'] # 72-D
smpl_shape = frame['betas'] # 10-D
smpl_paras = np.concatenate((smpl_cam, smpl_pose, smpl_shape), 0)
smpl_paras_fras.append(smpl_paras)
smpl_paras_fras = np.asarray(smpl_paras_fras)
out_dir = osp.join(save_dir, id, cam, seq)
os.makedirs(out_dir)
smpl_paras_fras_pkl = os.path.join(out_dir, '{}.pkl'.format(seq))
pickle.dump(smpl_paras_fras, open(smpl_paras_fras_pkl, 'wb'))
if __name__ == '__main__':
data_dir = opt.input_path
save_dir = opt.output_path
start_time = time.time()
maxnum_thread = 8
all_ids = sorted(os.listdir(data_dir))
num_ids = len(all_ids)
proces = []
for thread_id in range(maxnum_thread):
indices = itertools.islice(range(num_ids), thread_id, num_ids, maxnum_thread)
id_list = [all_ids[i] for i in indices]
thread_func = threading.Thread(target=get_pickle, args=(thread_id, id_list, save_dir))
thread_func.start()
proces.append(thread_func)
for proc in proces:
proc.join()
time_elapsed = time.time() - start_time
print('Training complete in {:.0f}h {:.0f}m {:.0f}s'.format(
time_elapsed // 3600,
(time_elapsed - (time_elapsed // 3600) * 3600) // 60,
time_elapsed % 60))