Spaces:
Sleeping
Sleeping
from __future__ import absolute_import | |
from __future__ import print_function | |
from __future__ import division | |
import torch | |
import numpy as np | |
from configs import constants as _C | |
def root_centering(X, joint_type='coco'): | |
"""Center the root joint to the pelvis.""" | |
if joint_type != 'common' and X.shape[-2] == 14: return X | |
conf = None | |
if X.shape[-1] == 4: | |
conf = X[..., -1:] | |
X = X[..., :-1] | |
if X.shape[-2] == 31: | |
X[..., :17, :] = X[..., :17, :] - X[..., [12, 11], :].mean(-2, keepdims=True) | |
X[..., 17:, :] = X[..., 17:, :] - X[..., [19, 20], :].mean(-2, keepdims=True) | |
elif joint_type == 'coco': | |
X = X - X[..., [12, 11], :].mean(-2, keepdims=True) | |
elif joint_type == 'common': | |
X = X - X[..., [2, 3], :].mean(-2, keepdims=True) | |
if conf is not None: | |
X = torch.cat((X, conf), dim=-1) | |
return X | |
def convert_kps(joints2d, src, dst): | |
src_names = eval(f'get_{src}_joint_names')() | |
dst_names = eval(f'get_{dst}_joint_names')() | |
if isinstance(joints2d, np.ndarray): | |
out_joints2d = np.zeros((*joints2d.shape[:-2], len(dst_names), joints2d.shape[-1])) | |
else: | |
out_joints2d = torch.zeros((*joints2d.shape[:-2], len(dst_names), joints2d.shape[-1]), device=joints2d.device) | |
for idx, jn in enumerate(dst_names): | |
if jn in src_names: | |
out_joints2d[..., idx, :] = joints2d[..., src_names.index(jn), :] | |
return out_joints2d | |
def get_perm_idxs(src, dst): | |
src_names = eval(f'get_{src}_joint_names')() | |
dst_names = eval(f'get_{dst}_joint_names')() | |
idxs = [src_names.index(h) for h in dst_names if h in src_names] | |
return idxs | |
def get_mpii3d_test_joint_names(): | |
return [ | |
'headtop', # 'head_top', | |
'neck', | |
'rshoulder',# 'right_shoulder', | |
'relbow',# 'right_elbow', | |
'rwrist',# 'right_wrist', | |
'lshoulder',# 'left_shoulder', | |
'lelbow', # 'left_elbow', | |
'lwrist', # 'left_wrist', | |
'rhip', # 'right_hip', | |
'rknee', # 'right_knee', | |
'rankle',# 'right_ankle', | |
'lhip',# 'left_hip', | |
'lknee',# 'left_knee', | |
'lankle',# 'left_ankle' | |
'hip',# 'pelvis', | |
'Spine (H36M)',# 'spine', | |
'Head (H36M)',# 'head' | |
] | |
def get_mpii3d_joint_names(): | |
return [ | |
'spine3', # 0, | |
'spine4', # 1, | |
'spine2', # 2, | |
'Spine (H36M)', #'spine', # 3, | |
'hip', # 'pelvis', # 4, | |
'neck', # 5, | |
'Head (H36M)', # 'head', # 6, | |
"headtop", # 'head_top', # 7, | |
'left_clavicle', # 8, | |
"lshoulder", # 'left_shoulder', # 9, | |
"lelbow", # 'left_elbow',# 10, | |
"lwrist", # 'left_wrist',# 11, | |
'left_hand',# 12, | |
'right_clavicle',# 13, | |
'rshoulder',# 'right_shoulder',# 14, | |
'relbow',# 'right_elbow',# 15, | |
'rwrist',# 'right_wrist',# 16, | |
'right_hand',# 17, | |
'lhip', # left_hip',# 18, | |
'lknee', # 'left_knee',# 19, | |
'lankle', #left ankle # 20 | |
'left_foot', # 21 | |
'left_toe', # 22 | |
"rhip", # 'right_hip',# 23 | |
"rknee", # 'right_knee',# 24 | |
"rankle", #'right_ankle', # 25 | |
'right_foot',# 26 | |
'right_toe' # 27 | |
] | |
def get_insta_joint_names(): | |
return [ | |
'OP RHeel', | |
'OP RKnee', | |
'OP RHip', | |
'OP LHip', | |
'OP LKnee', | |
'OP LHeel', | |
'OP RWrist', | |
'OP RElbow', | |
'OP RShoulder', | |
'OP LShoulder', | |
'OP LElbow', | |
'OP LWrist', | |
'OP Neck', | |
'headtop', | |
'OP Nose', | |
'OP LEye', | |
'OP REye', | |
'OP LEar', | |
'OP REar', | |
'OP LBigToe', | |
'OP RBigToe', | |
'OP LSmallToe', | |
'OP RSmallToe', | |
'OP LAnkle', | |
'OP RAnkle', | |
] | |
def get_insta_skeleton(): | |
return np.array( | |
[ | |
[0 , 1], | |
[1 , 2], | |
[2 , 3], | |
[3 , 4], | |
[4 , 5], | |
[6 , 7], | |
[7 , 8], | |
[8 , 9], | |
[9 ,10], | |
[2 , 8], | |
[3 , 9], | |
[10,11], | |
[8 ,12], | |
[9 ,12], | |
[12,13], | |
[12,14], | |
[14,15], | |
[14,16], | |
[15,17], | |
[16,18], | |
[0 ,20], | |
[20,22], | |
[5 ,19], | |
[19,21], | |
[5 ,23], | |
[0 ,24], | |
]) | |
def get_staf_skeleton(): | |
return np.array( | |
[ | |
[0, 1], | |
[1, 2], | |
[2, 3], | |
[3, 4], | |
[1, 5], | |
[5, 6], | |
[6, 7], | |
[1, 8], | |
[8, 9], | |
[9, 10], | |
[10, 11], | |
[8, 12], | |
[12, 13], | |
[13, 14], | |
[0, 15], | |
[0, 16], | |
[15, 17], | |
[16, 18], | |
[2, 9], | |
[5, 12], | |
[1, 19], | |
[20, 19], | |
] | |
) | |
def get_staf_joint_names(): | |
return [ | |
'OP Nose', # 0, | |
'OP Neck', # 1, | |
'OP RShoulder', # 2, | |
'OP RElbow', # 3, | |
'OP RWrist', # 4, | |
'OP LShoulder', # 5, | |
'OP LElbow', # 6, | |
'OP LWrist', # 7, | |
'OP MidHip', # 8, | |
'OP RHip', # 9, | |
'OP RKnee', # 10, | |
'OP RAnkle', # 11, | |
'OP LHip', # 12, | |
'OP LKnee', # 13, | |
'OP LAnkle', # 14, | |
'OP REye', # 15, | |
'OP LEye', # 16, | |
'OP REar', # 17, | |
'OP LEar', # 18, | |
'Neck (LSP)', # 19, | |
'Top of Head (LSP)', # 20, | |
] | |
def get_spin_joint_names(): | |
return [ | |
'OP Nose', # 0 | |
'OP Neck', # 1 | |
'OP RShoulder', # 2 | |
'OP RElbow', # 3 | |
'OP RWrist', # 4 | |
'OP LShoulder', # 5 | |
'OP LElbow', # 6 | |
'OP LWrist', # 7 | |
'OP MidHip', # 8 | |
'OP RHip', # 9 | |
'OP RKnee', # 10 | |
'OP RAnkle', # 11 | |
'OP LHip', # 12 | |
'OP LKnee', # 13 | |
'OP LAnkle', # 14 | |
'OP REye', # 15 | |
'OP LEye', # 16 | |
'OP REar', # 17 | |
'OP LEar', # 18 | |
'OP LBigToe', # 19 | |
'OP LSmallToe', # 20 | |
'OP LHeel', # 21 | |
'OP RBigToe', # 22 | |
'OP RSmallToe', # 23 | |
'OP RHeel', # 24 | |
'rankle', # 25 | |
'rknee', # 26 | |
'rhip', # 27 | |
'lhip', # 28 | |
'lknee', # 29 | |
'lankle', # 30 | |
'rwrist', # 31 | |
'relbow', # 32 | |
'rshoulder', # 33 | |
'lshoulder', # 34 | |
'lelbow', # 35 | |
'lwrist', # 36 | |
'neck', # 37 | |
'headtop', # 38 | |
'hip', # 39 'Pelvis (MPII)', # 39 | |
'thorax', # 40 'Thorax (MPII)', # 40 | |
'Spine (H36M)', # 41 | |
'Jaw (H36M)', # 42 | |
'Head (H36M)', # 43 | |
'nose', # 44 | |
'leye', # 45 'Left Eye', # 45 | |
'reye', # 46 'Right Eye', # 46 | |
'lear', # 47 'Left Ear', # 47 | |
'rear', # 48 'Right Ear', # 48 | |
] | |
def get_h36m_joint_names(): | |
return [ | |
'hip', # 0 | |
'lhip', # 1 | |
'lknee', # 2 | |
'lankle', # 3 | |
'rhip', # 4 | |
'rknee', # 5 | |
'rankle', # 6 | |
'Spine (H36M)', # 7 | |
'neck', # 8 | |
'Head (H36M)', # 9 | |
'headtop', # 10 | |
'lshoulder', # 11 | |
'lelbow', # 12 | |
'lwrist', # 13 | |
'rshoulder', # 14 | |
'relbow', # 15 | |
'rwrist', # 16 | |
] | |
'Pelvis', 'R_Hip', 'R_Knee', 'R_Ankle', 'L_Hip', 'L_Knee', 'L_Ankle', 'Torso', 'Neck', 'Nose', 'Head_top', 'L_Shoulder', 'L_Elbow', 'L_Wrist', 'R_Shoulder', 'R_Elbow', 'R_Wrist' | |
def get_spin_skeleton(): | |
return np.array( | |
[ | |
[0 , 1], | |
[1 , 2], | |
[2 , 3], | |
[3 , 4], | |
[1 , 5], | |
[5 , 6], | |
[6 , 7], | |
[1 , 8], | |
[8 , 9], | |
[9 ,10], | |
[10,11], | |
[8 ,12], | |
[12,13], | |
[13,14], | |
[0 ,15], | |
[0 ,16], | |
[15,17], | |
[16,18], | |
[21,19], | |
[19,20], | |
[14,21], | |
[11,24], | |
[24,22], | |
[22,23], | |
[0 ,38], | |
] | |
) | |
def get_posetrack_joint_names(): | |
return [ | |
"nose", | |
"neck", | |
"headtop", | |
"lear", | |
"rear", | |
"lshoulder", | |
"rshoulder", | |
"lelbow", | |
"relbow", | |
"lwrist", | |
"rwrist", | |
"lhip", | |
"rhip", | |
"lknee", | |
"rknee", | |
"lankle", | |
"rankle" | |
] | |
def get_posetrack_original_kp_names(): | |
return [ | |
'nose', | |
'head_bottom', | |
'head_top', | |
'left_ear', | |
'right_ear', | |
'left_shoulder', | |
'right_shoulder', | |
'left_elbow', | |
'right_elbow', | |
'left_wrist', | |
'right_wrist', | |
'left_hip', | |
'right_hip', | |
'left_knee', | |
'right_knee', | |
'left_ankle', | |
'right_ankle' | |
] | |
def get_pennaction_joint_names(): | |
return [ | |
"headtop", # 0 | |
"lshoulder", # 1 | |
"rshoulder", # 2 | |
"lelbow", # 3 | |
"relbow", # 4 | |
"lwrist", # 5 | |
"rwrist", # 6 | |
"lhip" , # 7 | |
"rhip" , # 8 | |
"lknee", # 9 | |
"rknee" , # 10 | |
"lankle", # 11 | |
"rankle" # 12 | |
] | |
def get_common_joint_names(): | |
return [ | |
"rankle", # 0 "lankle", # 0 | |
"rknee", # 1 "lknee", # 1 | |
"rhip", # 2 "lhip", # 2 | |
"lhip", # 3 "rhip", # 3 | |
"lknee", # 4 "rknee", # 4 | |
"lankle", # 5 "rankle", # 5 | |
"rwrist", # 6 "lwrist", # 6 | |
"relbow", # 7 "lelbow", # 7 | |
"rshoulder", # 8 "lshoulder", # 8 | |
"lshoulder", # 9 "rshoulder", # 9 | |
"lelbow", # 10 "relbow", # 10 | |
"lwrist", # 11 "rwrist", # 11 | |
"neck", # 12 "neck", # 12 | |
"headtop", # 13 "headtop", # 13 | |
] | |
def get_coco_common_joint_names(): | |
return [ | |
"nose", # 0 | |
"leye", # 1 | |
"reye", # 2 | |
"lear", # 3 | |
"rear", # 4 | |
"lshoulder", # 5 | |
"rshoulder", # 6 | |
"lelbow", # 7 | |
"relbow", # 8 | |
"lwrist", # 9 | |
"rwrist", # 10 | |
"lhip", # 11 | |
"rhip", # 12 | |
"lknee", # 13 | |
"rknee", # 14 | |
"lankle", # 15 | |
"rankle", # 16 | |
"neck", # 17 "neck", # 12 | |
"headtop", # 18 "headtop", # 13 | |
] | |
def get_common_skeleton(): | |
return np.array( | |
[ | |
[ 0, 1 ], | |
[ 1, 2 ], | |
[ 3, 4 ], | |
[ 4, 5 ], | |
[ 6, 7 ], | |
[ 7, 8 ], | |
[ 8, 2 ], | |
[ 8, 9 ], | |
[ 9, 3 ], | |
[ 2, 3 ], | |
[ 8, 12], | |
[ 9, 10], | |
[12, 9 ], | |
[10, 11], | |
[12, 13], | |
] | |
) | |
def get_coco_joint_names(): | |
return [ | |
"nose", # 0 | |
"leye", # 1 | |
"reye", # 2 | |
"lear", # 3 | |
"rear", # 4 | |
"lshoulder", # 5 | |
"rshoulder", # 6 | |
"lelbow", # 7 | |
"relbow", # 8 | |
"lwrist", # 9 | |
"rwrist", # 10 | |
"lhip", # 11 | |
"rhip", # 12 | |
"lknee", # 13 | |
"rknee", # 14 | |
"lankle", # 15 | |
"rankle", # 16 | |
] | |
def get_coco_skeleton(): | |
# 0 - nose, | |
# 1 - leye, | |
# 2 - reye, | |
# 3 - lear, | |
# 4 - rear, | |
# 5 - lshoulder, | |
# 6 - rshoulder, | |
# 7 - lelbow, | |
# 8 - relbow, | |
# 9 - lwrist, | |
# 10 - rwrist, | |
# 11 - lhip, | |
# 12 - rhip, | |
# 13 - lknee, | |
# 14 - rknee, | |
# 15 - lankle, | |
# 16 - rankle, | |
return np.array( | |
[ | |
[15, 13], | |
[13, 11], | |
[16, 14], | |
[14, 12], | |
[11, 12], | |
[ 5, 11], | |
[ 6, 12], | |
[ 5, 6 ], | |
[ 5, 7 ], | |
[ 6, 8 ], | |
[ 7, 9 ], | |
[ 8, 10], | |
[ 1, 2 ], | |
[ 0, 1 ], | |
[ 0, 2 ], | |
[ 1, 3 ], | |
[ 2, 4 ], | |
[ 3, 5 ], | |
[ 4, 6 ] | |
] | |
) | |
def get_mpii_joint_names(): | |
return [ | |
"rankle", # 0 | |
"rknee", # 1 | |
"rhip", # 2 | |
"lhip", # 3 | |
"lknee", # 4 | |
"lankle", # 5 | |
"hip", # 6 | |
"thorax", # 7 | |
"neck", # 8 | |
"headtop", # 9 | |
"rwrist", # 10 | |
"relbow", # 11 | |
"rshoulder", # 12 | |
"lshoulder", # 13 | |
"lelbow", # 14 | |
"lwrist", # 15 | |
] | |
def get_mpii_skeleton(): | |
# 0 - rankle, | |
# 1 - rknee, | |
# 2 - rhip, | |
# 3 - lhip, | |
# 4 - lknee, | |
# 5 - lankle, | |
# 6 - hip, | |
# 7 - thorax, | |
# 8 - neck, | |
# 9 - headtop, | |
# 10 - rwrist, | |
# 11 - relbow, | |
# 12 - rshoulder, | |
# 13 - lshoulder, | |
# 14 - lelbow, | |
# 15 - lwrist, | |
return np.array( | |
[ | |
[ 0, 1 ], | |
[ 1, 2 ], | |
[ 2, 6 ], | |
[ 6, 3 ], | |
[ 3, 4 ], | |
[ 4, 5 ], | |
[ 6, 7 ], | |
[ 7, 8 ], | |
[ 8, 9 ], | |
[ 7, 12], | |
[12, 11], | |
[11, 10], | |
[ 7, 13], | |
[13, 14], | |
[14, 15] | |
] | |
) | |
def get_aich_joint_names(): | |
return [ | |
"rshoulder", # 0 | |
"relbow", # 1 | |
"rwrist", # 2 | |
"lshoulder", # 3 | |
"lelbow", # 4 | |
"lwrist", # 5 | |
"rhip", # 6 | |
"rknee", # 7 | |
"rankle", # 8 | |
"lhip", # 9 | |
"lknee", # 10 | |
"lankle", # 11 | |
"headtop", # 12 | |
"neck", # 13 | |
] | |
def get_aich_skeleton(): | |
# 0 - rshoulder, | |
# 1 - relbow, | |
# 2 - rwrist, | |
# 3 - lshoulder, | |
# 4 - lelbow, | |
# 5 - lwrist, | |
# 6 - rhip, | |
# 7 - rknee, | |
# 8 - rankle, | |
# 9 - lhip, | |
# 10 - lknee, | |
# 11 - lankle, | |
# 12 - headtop, | |
# 13 - neck, | |
return np.array( | |
[ | |
[ 0, 1 ], | |
[ 1, 2 ], | |
[ 3, 4 ], | |
[ 4, 5 ], | |
[ 6, 7 ], | |
[ 7, 8 ], | |
[ 9, 10], | |
[10, 11], | |
[12, 13], | |
[13, 0 ], | |
[13, 3 ], | |
[ 0, 6 ], | |
[ 3, 9 ] | |
] | |
) | |
def get_3dpw_joint_names(): | |
return [ | |
"nose", # 0 | |
"thorax", # 1 | |
"rshoulder", # 2 | |
"relbow", # 3 | |
"rwrist", # 4 | |
"lshoulder", # 5 | |
"lelbow", # 6 | |
"lwrist", # 7 | |
"rhip", # 8 | |
"rknee", # 9 | |
"rankle", # 10 | |
"lhip", # 11 | |
"lknee", # 12 | |
"lankle", # 13 | |
] | |
def get_3dpw_skeleton(): | |
return np.array( | |
[ | |
[ 0, 1 ], | |
[ 1, 2 ], | |
[ 2, 3 ], | |
[ 3, 4 ], | |
[ 1, 5 ], | |
[ 5, 6 ], | |
[ 6, 7 ], | |
[ 2, 8 ], | |
[ 5, 11], | |
[ 8, 11], | |
[ 8, 9 ], | |
[ 9, 10], | |
[11, 12], | |
[12, 13] | |
] | |
) | |
def get_smplcoco_joint_names(): | |
return [ | |
"rankle", # 0 | |
"rknee", # 1 | |
"rhip", # 2 | |
"lhip", # 3 | |
"lknee", # 4 | |
"lankle", # 5 | |
"rwrist", # 6 | |
"relbow", # 7 | |
"rshoulder", # 8 | |
"lshoulder", # 9 | |
"lelbow", # 10 | |
"lwrist", # 11 | |
"neck", # 12 | |
"headtop", # 13 | |
"nose", # 14 | |
"leye", # 15 | |
"reye", # 16 | |
"lear", # 17 | |
"rear", # 18 | |
] | |
def get_smplcoco_skeleton(): | |
return np.array( | |
[ | |
[ 0, 1 ], | |
[ 1, 2 ], | |
[ 3, 4 ], | |
[ 4, 5 ], | |
[ 6, 7 ], | |
[ 7, 8 ], | |
[ 8, 12], | |
[12, 9 ], | |
[ 9, 10], | |
[10, 11], | |
[12, 13], | |
[14, 15], | |
[15, 17], | |
[16, 18], | |
[14, 16], | |
[ 8, 2 ], | |
[ 9, 3 ], | |
[ 2, 3 ], | |
] | |
) | |
def get_smpl_joint_names(): | |
return [ | |
'hips', # 0 | |
'leftUpLeg', # 1 | |
'rightUpLeg', # 2 | |
'spine', # 3 | |
'leftLeg', # 4 | |
'rightLeg', # 5 | |
'spine1', # 6 | |
'leftFoot', # 7 | |
'rightFoot', # 8 | |
'spine2', # 9 | |
'leftToeBase', # 10 | |
'rightToeBase', # 11 | |
'neck', # 12 | |
'leftShoulder', # 13 | |
'rightShoulder', # 14 | |
'head', # 15 | |
'leftArm', # 16 | |
'rightArm', # 17 | |
'leftForeArm', # 18 | |
'rightForeArm', # 19 | |
'leftHand', # 20 | |
'rightHand', # 21 | |
'leftHandIndex1', # 22 | |
'rightHandIndex1', # 23 | |
] | |
def get_smpl_skeleton(): | |
return np.array( | |
[ | |
[ 0, 1 ], | |
[ 0, 2 ], | |
[ 0, 3 ], | |
[ 1, 4 ], | |
[ 2, 5 ], | |
[ 3, 6 ], | |
[ 4, 7 ], | |
[ 5, 8 ], | |
[ 6, 9 ], | |
[ 7, 10], | |
[ 8, 11], | |
[ 9, 12], | |
[ 9, 13], | |
[ 9, 14], | |
[12, 15], | |
[13, 16], | |
[14, 17], | |
[16, 18], | |
[17, 19], | |
[18, 20], | |
[19, 21], | |
[20, 22], | |
[21, 23], | |
] | |
) |