import os
import os.path as osp
import numpy as np
import pdb
import argparse
import pickle
ORG_KEYPOINTS = {
'nose' :0,
'left_eye' :1,
'right_eye' :2,
'left_ear' :3,
'right_ear' :4,
'left_shoulder' :5,
'right_shoulder':6,
'left_elbow' :7,
'right_elbow' :8,
'left_wrist' :9,
'right_wrist' :10,
'left_hip' :11,
'right_hip' :12,
'left_knee' :13,
'right_knee' :14,
'left_ankle' :15,
'right_ankle' :16,
}
NEW_KEYPOINTS = {
0: 'right_shoulder',
1: 'right_elbow',
2: 'right_knee',
3: 'right_hip',
4: 'left_elbow',
5: 'left_knee',
6: 'left_shoulder',
7: 'right_wrist',
8: 'right_ankle',
9: 'left_hip',
10: 'left_wrist',
11: 'left_ankle',
}
def get_index_mapping():
index_mapping = {}
for _key in NEW_KEYPOINTS.keys():
map_index = ORG_KEYPOINTS[NEW_KEYPOINTS[_key]]
index_mapping[_key] = map_index
return index_mapping
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='OpenGait dataset pretreatment module.')
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='Output path of pickled dataset.')
args = parser.parse_args()
index_mapping = get_index_mapping()
data_path = args.input_path
des_path = args.output_path
id_list = sorted(os.listdir(data_path))
for _id in id_list:
type_list = sorted(os.listdir(osp.join(data_path, _id)))
for _type in type_list:
view_list = sorted(os.listdir(osp.join(data_path, _id, _type)))
for _view in view_list:
seq_info = [_id, _type, _view]
seq_info_str = '-'.join(seq_info)
seq_dir = osp.join(data_path, *seq_info)
des_dir = osp.join(des_path, *seq_info)
if osp.exists(des_dir) is False:
os.makedirs(des_dir)
keypoints_list = os.listdir(seq_dir)
pkl_name = "{}.pkl".format(_view)
seq_path = osp.join(seq_dir, pkl_name)
save_path = osp.join(des_dir, pkl_name)
seq_path_exists = osp.exists(seq_path)
if seq_path_exists is False:
print("seq:{} input:{}. ".format(seq_info_str, seq_path_exists))
continue
with open(seq_path, 'rb') as f:
keypoints_data = pickle.load(f)
to_pickle = []
for keypoint in keypoints_data:
mapped_keypoints = np.zeros((12, 3))
for i in range(mapped_keypoints.shape[0]):
mapped_keypoints[i] = keypoint[index_mapping[i]]
to_pickle.append(mapped_keypoints)
keypoints = np.stack(to_pickle)
pickle.dump(keypoints, open(save_path, 'wb'))
print("FINISHED: " + "-".join(seq_info))