def __init__(self, transform, data_split): self.transform = transform self.data_split = data_split self.data_path = osp.join('..', 'data', 'PW3D', 'data') self.human_bbox_root_dir = osp.join('..', 'data', 'PW3D', 'rootnet_output', 'bbox_root_pw3d_output.json') # SMPL joint set self.smpl = SMPL() self.face = self.smpl.face self.joint_regressor = self.smpl.joint_regressor self.vertex_num = self.smpl.vertex_num self.joint_num = self.smpl.joint_num self.joints_name = self.smpl.joints_name self.skeleton = self.smpl.skeleton self.root_joint_idx = self.smpl.root_joint_idx self.face_kps_vertex = self.smpl.face_kps_vertex # H36M joint set self.h36m_joints_name = ('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') self.h36m_root_joint_idx = self.h36m_joints_name.index('Pelvis') self.h36m_eval_joint = (1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16) self.h36m_joint_regressor = np.load( osp.join('..', 'data', 'Human36M', 'J_regressor_h36m_correct.npy')) self.datalist = self.load_data()
def __init__(self, pose_backbone, pose_net, pose2feat, mesh_backbone, mesh_net, param_regressor): super(Model, self).__init__() self.pose_backbone = pose_backbone self.pose_net = pose_net self.pose2feat = pose2feat self.mesh_backbone = mesh_backbone self.mesh_net = mesh_net self.param_regressor = param_regressor if 'FreiHAND' in cfg.trainset_3d + cfg.trainset_2d + [cfg.testset]: self.human_model = MANO() self.human_model_layer = self.human_model.layer.cuda() else: self.human_model = SMPL() self.human_model_layer = self.human_model.layer['neutral'].cuda() self.root_joint_idx = self.human_model.root_joint_idx self.mesh_face = self.human_model.face self.joint_regressor = self.human_model.joint_regressor if cfg.stage == 'lixel': self.trainable_modules = [ self.pose_backbone, self.pose_net, self.pose2feat, self.mesh_backbone, self.mesh_net ] else: self.trainable_modules = [self.param_regressor] self.coord_loss = CoordLoss() self.param_loss = ParamLoss() self.normal_loss = NormalVectorLoss(self.mesh_face) self.edge_loss = EdgeLengthLoss(self.mesh_face)
def __init__(self, transform, data_split): self.transform = transform self.data_split = data_split self.img_dir = osp.join('..', 'data', 'MuCo', 'data') self.annot_path = osp.join('..', 'data', 'MuCo', 'data', 'MuCo-3DHP.json') self.smpl_param_path = osp.join('..', 'data', 'MuCo', 'data', 'smpl_param.json') self.fitting_thr = 25 # milimeter # MuCo joint set self.muco_joint_num = 21 self.muco_joints_name = ('Head_top', 'Thorax', 'R_Shoulder', 'R_Elbow', 'R_Wrist', 'L_Shoulder', 'L_Elbow', 'L_Wrist', 'R_Hip', 'R_Knee', 'R_Ankle', 'L_Hip', 'L_Knee', 'L_Ankle', 'Pelvis', 'Spine', 'Head', 'R_Hand', 'L_Hand', 'R_Toe', 'L_Toe') self.muco_flip_pairs = ((2, 5), (3, 6), (4, 7), (8, 11), (9, 12), (10, 13), (17, 18), (19, 20)) self.muco_skeleton = ((0, 16), (16, 1), (1, 15), (15, 14), (14, 8), (14, 11), (8, 9), (9, 10), (10, 19), (11, 12), (12, 13), (13, 20), (1, 2), (2, 3), (3, 4), (4, 17), (1, 5), (5, 6), (6, 7), (7, 18)) self.muco_root_joint_idx = self.muco_joints_name.index('Pelvis') # H36M joint set self.h36m_joint_regressor = np.load( osp.join('..', 'data', 'Human36M', 'J_regressor_h36m_correct.npy') ) # use h36m joint regrssor (only use subset from original muco joint set) self.h36m_flip_pairs = ((1, 4), (2, 5), (3, 6), (14, 11), (15, 12), (16, 13)) self.h36m_joints_name = ('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') self.h36m_root_joint_idx = self.h36m_joints_name.index('Pelvis') # SMPL joint set self.smpl = SMPL() self.face = self.smpl.face self.joint_regressor = self.smpl.joint_regressor self.vertex_num = self.smpl.vertex_num self.joint_num = self.smpl.joint_num self.joints_name = self.smpl.joints_name self.flip_pairs = self.smpl.flip_pairs self.skeleton = self.smpl.skeleton self.root_joint_idx = self.smpl.root_joint_idx self.face_kps_vertex = self.smpl.face_kps_vertex self.datalist = self.load_data()
def __init__(self, transform, data_split): self.transform = transform self.data_split = data_split self.img_dir = osp.join('..', 'data', 'Human36M', 'images') self.annot_path = osp.join('..', 'data', 'Human36M', 'annotations') self.human_bbox_root_dir = osp.join('..', 'data', 'Human36M', 'rootnet_output', 'bbox_root_human36m_output.json') self.action_name = [ 'Directions', 'Discussion', 'Eating', 'Greeting', 'Phoning', 'Posing', 'Purchases', 'Sitting', 'SittingDown', 'Smoking', 'Photo', 'Waiting', 'Walking', 'WalkDog', 'WalkTogether' ] self.fitting_thr = 25 # milimeter # H36M joint set self.h36m_joint_num = 17 self.h36m_joints_name = ('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') self.h36m_flip_pairs = ((1, 4), (2, 5), (3, 6), (14, 11), (15, 12), (16, 13)) self.h36m_skeleton = ((0, 7), (7, 8), (8, 9), (9, 10), (8, 11), (11, 12), (12, 13), (8, 14), (14, 15), (15, 16), (0, 1), (1, 2), (2, 3), (0, 4), (4, 5), (5, 6)) self.h36m_root_joint_idx = self.h36m_joints_name.index('Pelvis') self.h36m_eval_joint = (1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16) self.h36m_joint_regressor = np.load( osp.join('..', 'data', 'Human36M', 'J_regressor_h36m_correct.npy')) # SMPL joint set self.smpl = SMPL() self.face = self.smpl.face self.joint_regressor = self.smpl.joint_regressor self.vertex_num = self.smpl.vertex_num self.joint_num = self.smpl.joint_num self.joints_name = self.smpl.joints_name self.flip_pairs = self.smpl.flip_pairs self.skeleton = self.smpl.skeleton self.root_joint_idx = self.smpl.root_joint_idx self.face_kps_vertex = self.smpl.face_kps_vertex self.datalist = self.load_data()
def __init__(self, transform, data_split): self.transform = transform self.data_split = 'train' if data_split == 'train' else 'val' self.img_path = osp.join('..', 'data', 'MSCOCO', 'images') self.annot_path = osp.join('..', 'data', 'MSCOCO', 'annotations') self.rootnet_output_path = osp.join('..', 'data', 'MSCOCO', 'rootnet_output', 'bbox_root_coco_output.json') self.fitting_thr = 3.0 # pixel in cfg.output_hm_shape space # mscoco skeleton self.coco_joint_num = 18 # original: 17, manually added pelvis self.coco_joints_name = ('Nose', 'L_Eye', 'R_Eye', 'L_Ear', 'R_Ear', 'L_Shoulder', 'R_Shoulder', 'L_Elbow', 'R_Elbow', 'L_Wrist', 'R_Wrist', 'L_Hip', 'R_Hip', 'L_Knee', 'R_Knee', 'L_Ankle', 'R_Ankle', 'Pelvis') self.coco_skeleton = ((1, 2), (0, 1), (0, 2), (2, 4), (1, 3), (6, 8), (8, 10), (5, 7), (7, 9), (12, 14), (14, 16), (11, 13), (13, 15), (5, 6), (11, 12)) self.coco_flip_pairs = ((1, 2), (3, 4), (5, 6), (7, 8), (9, 10), (11, 12), (13, 14), (15, 16)) self.coco_joint_regressor = np.load( osp.join('..', 'data', 'MSCOCO', 'J_regressor_coco_hip_smpl.npy')) # smpl skeleton self.smpl = SMPL() self.face = self.smpl.face self.joint_regressor = self.smpl.joint_regressor self.vertex_num = self.smpl.vertex_num self.joint_num = self.smpl.joint_num self.joints_name = self.smpl.joints_name self.flip_pairs = self.smpl.flip_pairs self.skeleton = self.smpl.skeleton self.root_joint_idx = self.smpl.root_joint_idx self.face_kps_vertex = self.smpl.face_kps_vertex self.datalist = self.load_data()
def __init__(self, step_size=1e-2, batch_size=66, num_iters=100, focal_length=5000, device=torch.device('cuda')): # Store options self.device = device self.focal_length = focal_length self.step_size = step_size # Ignore the the following joints for the fitting process ign_joints = ['OP Neck', 'OP RHip', 'OP LHip', 'Right Hip', 'Left Hip'] self.ign_joints = [constants.JOINT_IDS[i] for i in ign_joints] self.num_iters = num_iters # GMM pose prior self.pose_prior = MaxMixturePrior(prior_folder='data', num_gaussians=8, dtype=torch.float32).to(device) # Load SMPL model self.smpl = SMPL(config.SMPL_MODEL_DIR, batch_size=batch_size, create_transl=False).to(self.device)
sys.path.append('..') import os import cv2 import ipdb import torch import config import pickle import numpy as np from tqdm import tqdm from utils.smpl import SMPL from utils.geometry import batch_rodrigues # --- predefined variables device = torch.device('cpu') smpl_male = SMPL(config.SMPL_MODEL_DIR, gender='male', create_transl=False).to(device) smpl_female = SMPL(config.SMPL_MODEL_DIR, gender='female', create_transl=False).to(device) def projection(smpl, smpl_trans, camPose, camIntrinsics): """ projection annoted 3D joints to 2D, so that we can obtain GT 2D joints. """ smpl += smpl_trans smpl = np.concatenate([smpl, np.ones((49, 1))], axis=1) smpl = np.dot(smpl, camPose.T)[:, :3] smpl /= smpl[:, np.newaxis, -1] smpl = np.dot(smpl, camIntrinsics.T) return smpl[:, :2]
#import ipdb #ipdb.set_trace() joints = (joints + 1) / 2 * 500 + 500 for idx in range(joints.shape[0]): pt = joints[idx] cv2.circle(image, (pt[0], pt[1]), 4, np.array([197, 27, 125]).tolist(), -1) cv2.imwrite('tmp.jpg', image) if __name__ == '__main__': idx = 0 mosh_file = '/data/neutrMosh/neutrSMPL_H3.6/S5/Directions 1_cam1_aligned.pkl' images = '/data/human36m_full_raw/images/S5_Directions_1.54138969_{:06d}.jpg'.format(idx+1) mosh = pkl.load(open(mosh_file, 'rb'), encoding='latin1') pose = mosh['new_poses'][idx] shape = mosh['betas'] pose = torch.from_numpy(pose).float().unsqueeze(0) shape = torch.from_numpy(shape).float().unsqueeze(0) smpl = SMPL(config.SMPL_MODEL_DIR, batch_size=1, create_transl=False).cpu() smpl_out = smpl(betas=shape, body_pose=pose[:,3:], global_orient=pose[:, :3]) vertices = smpl_out.vertices joints = smpl_out.joints scatter_pose(cv2.imread(images), joints[0])