Files
hand-motion-pipeline/third_party/Dyn-HaMR/dyn-hamr/body_model/specs.py
T

576 lines
14 KiB
Python

import numpy as np
# SMPL_JOINTS = {
# "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,
# }
MANO_JOINTS = {
'wrist': 0,
'index1': 1,
'index2': 2,
'index3': 3,
'middle1': 4,
'middle2': 5,
'middle3': 6,
'pinky1': 7,
'pinky2': 8,
'pinky3': 9,
'ring1': 10,
'ring2': 11,
'ring3': 12,
'thumb1': 13,
'thumb2': 14,
'thumb3': 15,
}
OP_IGNORE_JOINTS = None
OP_NUM_JOINTS = 21
# SMPL_PARENTS = [
# -1,
# 0,
# 0,
# 0,
# 1,
# 2,
# 3,
# 4,
# 5,
# 6,
# 7,
# 8,
# 9,
# 12,
# 12,
# 12,
# 13,
# 14,
# 16,
# 17,
# 18,
# 19,
# ]
SMPLH_PATH = "./body_models/smplh"
SMPLX_PATH = "./body_models/smplx"
SMPL_PATH = "./body_models/smpl"
VPOSER_PATH = "./body_models/vposer_v1_0"
# chosen virtual mocap markers that are "keypoints" to work with
# KEYPT_VERTS = [
# 4404,
# 920,
# 3076,
# 3169,
# 823,
# 4310,
# 1010,
# 1085,
# 4495,
# 4569,
# 6615,
# 3217,
# 3313,
# 6713,
# 6785,
# 3383,
# 6607,
# 3207,
# 1241,
# 1508,
# 4797,
# 4122,
# 1618,
# 1569,
# 5135,
# 5040,
# 5691,
# 5636,
# 5404,
# 2230,
# 2173,
# 2108,
# 134,
# 3645,
# 6543,
# 3123,
# 3024,
# 4194,
# 1306,
# 182,
# 3694,
# 4294,
# 744,
# ]
# """
# Openpose
# """
# OP_NUM_JOINTS = 25
# # OP_IGNORE_JOINTS = [1, 9, 12] # neck and left/right hip
# OP_IGNORE_JOINTS = [1] # neck
# OP_EDGE_LIST = [
# [1, 8],
# [1, 2],
# [1, 5],
# [2, 3],
# [3, 4],
# [5, 6],
# [6, 7],
# [8, 9],
# [9, 10],
# [10, 11],
# [8, 12],
# [12, 13],
# [13, 14],
# [1, 0],
# [0, 15],
# [15, 17],
# [0, 16],
# [16, 18],
# [14, 19],
# [19, 20],
# [14, 21],
# [11, 22],
# [22, 23],
# [11, 24],
# ]
# # indices to map an openpose detection to its flipped version
# OP_FLIP_MAP = [
# 0,
# 1,
# 5,
# 6,
# 7,
# 2,
# 3,
# 4,
# 8,
# 12,
# 13,
# 14,
# 9,
# 10,
# 11,
# 16,
# 15,
# 18,
# 17,
# 22,
# 23,
# 24,
# 19,
# 20,
# 21,
# ]
#
# From https://github.com/vchoutas/smplify-x/blob/master/smplifyx/utils.py
# Please see license for usage restrictions.
#
# def smpl_to_openpose(
# model_type="smplx",
# use_hands=True,
# use_face=True,
# use_face_contour=False,
# openpose_format="coco25",
# ):
# """Returns the indices of the permutation that maps SMPL to OpenPose
# Parameters
# ----------
# model_type: str, optional
# The type of SMPL-like model that is used. The default mapping
# returned is for the SMPLX model
# use_hands: bool, optional
# Flag for adding to the returned permutation the mapping for the
# hand keypoints. Defaults to True
# use_face: bool, optional
# Flag for adding to the returned permutation the mapping for the
# face keypoints. Defaults to True
# use_face_contour: bool, optional
# Flag for appending the facial contour keypoints. Defaults to False
# openpose_format: bool, optional
# The output format of OpenPose. For now only COCO-25 and COCO-19 is
# supported. Defaults to 'coco25'
# """
# if openpose_format.lower() == "coco25":
# if model_type == "smpl":
# return np.array(
# [
# 24,
# 12,
# 17,
# 19,
# 21,
# 16,
# 18,
# 20,
# 0,
# 2,
# 5,
# 8,
# 1,
# 4,
# 7,
# 25,
# 26,
# 27,
# 28,
# 29,
# 30,
# 31,
# 32,
# 33,
# 34,
# ],
# dtype=np.int32,
# )
# elif model_type == "smplh":
# body_mapping = np.array(
# [
# 52,
# 12,
# 17,
# 19,
# 21,
# 16,
# 18,
# 20,
# 0,
# 2,
# 5,
# 8,
# 1,
# 4,
# 7,
# 53,
# 54,
# 55,
# 56,
# 57,
# 58,
# 59,
# 60,
# 61,
# 62,
# ],
# dtype=np.int32,
# )
# mapping = [body_mapping]
# if use_hands:
# lhand_mapping = np.array(
# [
# 20,
# 34,
# 35,
# 36,
# 63,
# 22,
# 23,
# 24,
# 64,
# 25,
# 26,
# 27,
# 65,
# 31,
# 32,
# 33,
# 66,
# 28,
# 29,
# 30,
# 67,
# ],
# dtype=np.int32,
# )
# rhand_mapping = np.array(
# [
# 21,
# 49,
# 50,
# 51,
# 68,
# 37,
# 38,
# 39,
# 69,
# 40,
# 41,
# 42,
# 70,
# 46,
# 47,
# 48,
# 71,
# 43,
# 44,
# 45,
# 72,
# ],
# dtype=np.int32,
# )
# mapping += [lhand_mapping, rhand_mapping]
# return np.concatenate(mapping)
# # SMPLX
# elif model_type == "smplx":
# body_mapping = np.array(
# [
# 55,
# 12,
# 17,
# 19,
# 21,
# 16,
# 18,
# 20,
# 0,
# 2,
# 5,
# 8,
# 1,
# 4,
# 7,
# 56,
# 57,
# 58,
# 59,
# 60,
# 61,
# 62,
# 63,
# 64,
# 65,
# ],
# dtype=np.int32,
# )
# mapping = [body_mapping]
# if use_hands:
# lhand_mapping = np.array(
# [
# 20,
# 37,
# 38,
# 39,
# 66,
# 25,
# 26,
# 27,
# 67,
# 28,
# 29,
# 30,
# 68,
# 34,
# 35,
# 36,
# 69,
# 31,
# 32,
# 33,
# 70,
# ],
# dtype=np.int32,
# )
# rhand_mapping = np.array(
# [
# 21,
# 52,
# 53,
# 54,
# 71,
# 40,
# 41,
# 42,
# 72,
# 43,
# 44,
# 45,
# 73,
# 49,
# 50,
# 51,
# 74,
# 46,
# 47,
# 48,
# 75,
# ],
# dtype=np.int32,
# )
# mapping += [lhand_mapping, rhand_mapping]
# if use_face:
# # end_idx = 127 + 17 * use_face_contour
# face_mapping = np.arange(
# 76, 127 + 17 * use_face_contour, dtype=np.int32
# )
# mapping += [face_mapping]
# return np.concatenate(mapping)
# else:
# raise ValueError("Unknown model type: {}".format(model_type))
# elif openpose_format == "coco19":
# if model_type == "smpl":
# return np.array(
# [24, 12, 17, 19, 21, 16, 18, 20, 0, 2, 5, 8, 1, 4, 7, 25, 26, 27, 28],
# dtype=np.int32,
# )
# elif model_type == "smplh":
# body_mapping = np.array(
# [52, 12, 17, 19, 21, 16, 18, 20, 0, 2, 5, 8, 1, 4, 7, 53, 54, 55, 56],
# dtype=np.int32,
# )
# mapping = [body_mapping]
# if use_hands:
# lhand_mapping = np.array(
# [
# 20,
# 34,
# 35,
# 36,
# 57,
# 22,
# 23,
# 24,
# 58,
# 25,
# 26,
# 27,
# 59,
# 31,
# 32,
# 33,
# 60,
# 28,
# 29,
# 30,
# 61,
# ],
# dtype=np.int32,
# )
# rhand_mapping = np.array(
# [
# 21,
# 49,
# 50,
# 51,
# 62,
# 37,
# 38,
# 39,
# 63,
# 40,
# 41,
# 42,
# 64,
# 46,
# 47,
# 48,
# 65,
# 43,
# 44,
# 45,
# 66,
# ],
# dtype=np.int32,
# )
# mapping += [lhand_mapping, rhand_mapping]
# return np.concatenate(mapping)
# # SMPLX
# elif model_type == "smplx":
# body_mapping = np.array(
# [55, 12, 17, 19, 21, 16, 18, 20, 0, 2, 5, 8, 1, 4, 7, 56, 57, 58, 59],
# dtype=np.int32,
# )
# mapping = [body_mapping]
# if use_hands:
# lhand_mapping = np.array(
# [
# 20,
# 37,
# 38,
# 39,
# 60,
# 25,
# 26,
# 27,
# 61,
# 28,
# 29,
# 30,
# 62,
# 34,
# 35,
# 36,
# 63,
# 31,
# 32,
# 33,
# 64,
# ],
# dtype=np.int32,
# )
# rhand_mapping = np.array(
# [
# 21,
# 52,
# 53,
# 54,
# 65,
# 40,
# 41,
# 42,
# 66,
# 43,
# 44,
# 45,
# 67,
# 49,
# 50,
# 51,
# 68,
# 46,
# 47,
# 48,
# 69,
# ],
# dtype=np.int32,
# )
# mapping += [lhand_mapping, rhand_mapping]
# if use_face:
# face_mapping = np.arange(
# 70, 70 + 51 + 17 * use_face_contour, dtype=np.int32
# )
# mapping += [face_mapping]
# return np.concatenate(mapping)
# else:
# raise ValueError("Unknown model type: {}".format(model_type))
# else:
# raise ValueError("Unknown joint format: {}".format(openpose_format))