MotionGPT / mGPT /utils /joints.py
bill-jiang's picture
Init
4409449
mmm_joints = [
"root",
"BP",
"BT",
"BLN",
"BUN",
"LS",
"LE",
"LW",
"RS",
"RE",
"RW",
"LH",
"LK",
"LA",
"LMrot",
"LF",
"RH",
"RK",
"RA",
"RMrot",
"RF",
]
humanml3d_joints = [
"root",
"RH",
"LH",
"BP",
"RK",
"LK",
"BT",
"RMrot",
"LMrot",
"BLN",
"RF",
"LF",
"BMN",
"RSI",
"LSI",
"BUN",
"RS",
"LS",
"RE",
"LE",
"RW",
"LW",
]
smplx_joints = [
"pelvis",
"left_hip",
"right_hip",
"spine1",
"left_knee",
"right_knee",
"spine2",
"left_ankle",
"right_ankle",
"spine3",
"left_foot",
"right_foot",
"neck",
"left_collar",
"right_collar",
"head",
"left_shoulder",
"right_shoulder",
"left_elbow",
"right_elbow",
"left_wrist",
"right_wrist",
"jaw",
"left_eye_smplhf",
"right_eye_smplhf",
"left_index1",
"left_index2",
"left_index3",
"left_middle1",
"left_middle2",
"left_middle3",
"left_pinky1",
"left_pinky2",
"left_pinky3",
"left_ring1",
"left_ring2",
"left_ring3",
"left_thumb1",
"left_thumb2",
"left_thumb3",
"right_index1",
"right_index2",
"right_index3",
"right_middle1",
"right_middle2",
"right_middle3",
"right_pinky1",
"right_pinky2",
"right_pinky3",
"right_ring1",
"right_ring2",
"right_ring3",
"right_thumb1",
"right_thumb2",
"right_thumb3",
"nose",
"right_eye",
"left_eye",
"right_ear",
"left_ear",
"left_big_toe",
"left_small_toe",
"left_heel",
"right_big_toe",
"right_small_toe",
"right_heel",
"left_thumb",
"left_index",
"left_middle",
"left_ring",
"left_pinky",
"right_thumb",
"right_index",
"right_middle",
"right_ring",
"right_pinky",
"right_eye_brow1",
"right_eye_brow2",
"right_eye_brow3",
"right_eye_brow4",
"right_eye_brow5",
"left_eye_brow5",
"left_eye_brow4",
"left_eye_brow3",
"left_eye_brow2",
"left_eye_brow1",
"nose1",
"nose2",
"nose3",
"nose4",
"right_nose_2",
"right_nose_1",
"nose_middle",
"left_nose_1",
"left_nose_2",
"right_eye1",
"right_eye2",
"right_eye3",
"right_eye4",
"right_eye5",
"right_eye6",
"left_eye4",
"left_eye3",
"left_eye2",
"left_eye1",
"left_eye6",
"left_eye5",
"right_mouth_1",
"right_mouth_2",
"right_mouth_3",
"mouth_top",
"left_mouth_3",
"left_mouth_2",
"left_mouth_1",
"left_mouth_5", # 59 in OpenPose output
"left_mouth_4", # 58 in OpenPose output
"mouth_bottom",
"right_mouth_4",
"right_mouth_5",
"right_lip_1",
"right_lip_2",
"lip_top",
"left_lip_2",
"left_lip_1",
"left_lip_3",
"lip_bottom",
"right_lip_3",
# Face contour
"right_contour_1",
"right_contour_2",
"right_contour_3",
"right_contour_4",
"right_contour_5",
"right_contour_6",
"right_contour_7",
"right_contour_8",
"contour_middle",
"left_contour_8",
"left_contour_7",
"left_contour_6",
"left_contour_5",
"left_contour_4",
"left_contour_3",
"left_contour_2",
"left_contour_1",
]
smplxnh_joints = [
"pelvis",
"left_hip",
"right_hip",
"spine1",
"left_knee",
"right_knee",
"spine2",
"left_ankle",
"right_ankle",
"spine3",
"left_foot",
"right_foot",
"neck",
"left_collar",
"right_collar",
"head",
"left_shoulder",
"right_shoulder",
"left_elbow",
"right_elbow",
"left_wrist",
"right_wrist",
]
smplh_joints = [
"pelvis",
"left_hip",
"right_hip",
"spine1",
"left_knee",
"right_knee",
"spine2",
"left_ankle",
"right_ankle",
"spine3",
"left_foot",
"right_foot",
"neck",
"left_collar",
"right_collar",
"head",
"left_shoulder",
"right_shoulder",
"left_elbow",
"right_elbow",
"left_wrist",
"right_wrist",
"left_index1",
"left_index2",
"left_index3",
"left_middle1",
"left_middle2",
"left_middle3",
"left_pinky1",
"left_pinky2",
"left_pinky3",
"left_ring1",
"left_ring2",
"left_ring3",
"left_thumb1",
"left_thumb2",
"left_thumb3",
"right_index1",
"right_index2",
"right_index3",
"right_middle1",
"right_middle2",
"right_middle3",
"right_pinky1",
"right_pinky2",
"right_pinky3",
"right_ring1",
"right_ring2",
"right_ring3",
"right_thumb1",
"right_thumb2",
"right_thumb3",
"nose",
"right_eye",
"left_eye",
"right_ear",
"left_ear",
"left_big_toe",
"left_small_toe",
"left_heel",
"right_big_toe",
"right_small_toe",
"right_heel",
"left_thumb",
"left_index",
"left_middle",
"left_ring",
"left_pinky",
"right_thumb",
"right_index",
"right_middle",
"right_ring",
"right_pinky",
]
smplnh_joints = [
"pelvis",
"left_hip",
"right_hip",
"spine1",
"left_knee",
"right_knee",
"spine2",
"left_ankle",
"right_ankle",
"spine3",
"left_foot",
"right_foot",
"neck",
"left_collar",
"right_collar",
"head",
"left_shoulder",
"right_shoulder",
"left_elbow",
"right_elbow",
"left_wrist",
"right_wrist",
]
mmm2smplh_correspondence = {
"root": "pelvis",
"BP": "spine1",
"BT": "spine3",
"BLN": "neck",
"BUN": "head",
"LS": "left_shoulder",
"LE": "left_elbow",
"LW": "left_wrist",
"RS": "right_shoulder",
"RE": "right_elbow",
"RW": "right_wrist",
"LH": "left_hip",
"LK": "left_knee",
"LA": "left_ankle",
"LMrot": "left_heel",
"LF": "left_foot",
"RH": "right_hip",
"RK": "right_knee",
"RA": "right_ankle",
"RMrot": "right_heel",
"RF": "right_foot",
}
smplh2mmm_correspondence = {
val: key
for key, val in mmm2smplh_correspondence.items()
}
smplh2mmm_indexes = [
smplh_joints.index(mmm2smplh_correspondence[x]) for x in mmm_joints
]
smplnh2smplh_correspondence = {key: key for key in smplnh_joints}
smplh2smplnh_correspondence = {
val: key
for key, val in smplnh2smplh_correspondence.items()
}
smplh2smplnh_indexes = [
smplh_joints.index(smplnh2smplh_correspondence[x]) for x in smplnh_joints
]
mmm_kinematic_tree = [
[0, 1, 2, 3, 4], # body
[3, 5, 6, 7], # right arm
[3, 8, 9, 10], # left arm
[0, 11, 12, 13, 14, 15], # right leg
[0, 16, 17, 18, 19, 20],
] # left leg
humanml3d_kinematic_tree = [
[0, 3, 6, 9, 12, 15], # body
[9, 14, 17, 19, 21], # right arm
[9, 13, 16, 18, 20], # left arm
[0, 2, 5, 8, 11], # right leg
[0, 1, 4, 7, 10],
] # left leg
smplh_to_mmm_scaling_factor = 480 / 0.75
mmm_to_smplh_scaling_factor = 0.75 / 480
mmm_joints_info = {
"root":
mmm_joints.index("root"),
"feet": [
mmm_joints.index("LMrot"),
mmm_joints.index("RMrot"),
mmm_joints.index("LF"),
mmm_joints.index("RF"),
],
"shoulders": [mmm_joints.index("LS"),
mmm_joints.index("RS")],
"hips": [mmm_joints.index("LH"),
mmm_joints.index("RH")],
}
smplnh_joints_info = {
"root":
smplnh_joints.index("pelvis"),
"feet": [
smplnh_joints.index("left_ankle"),
smplnh_joints.index("right_ankle"),
smplnh_joints.index("left_foot"),
smplnh_joints.index("right_foot"),
],
"shoulders": [
smplnh_joints.index("left_shoulder"),
smplnh_joints.index("right_shoulder"),
],
"hips":
[smplnh_joints.index("left_hip"),
smplnh_joints.index("right_hip")],
}
infos = {"mmm": mmm_joints_info, "smplnh": smplnh_joints_info}
smplh_indexes = {"mmm": smplh2mmm_indexes, "smplnh": smplh2smplnh_indexes}
root_joints = {
"mmm": mmm_joints_info["root"],
"mmmns": mmm_joints_info["root"],
"smplmmm": mmm_joints_info["root"],
"smplnh": smplnh_joints_info["root"],
"smplh": smplh_joints.index("pelvis"),
}
def get_root_idx(joinstype):
return root_joints[joinstype]
# def mmm2smpl(joints_mmm):
# mmm2smplnh_indexes = []
# for x in smplnh_joints:
# if x in smplh2mmm_correspondence:
# mmm2smplnh_indexes.append(mmm_joints.index(smplh2mmm_correspondence[x]))
# spine2 = 0.5*(joints[mmm_joints.index("spine1")] + joints[mmm_joints.index("spine3")])
# joints = joints_mmm[indexes]
# return joints