pixelite1201 / BEDLAM

206 stars 19 forks source link

Hand pose for SMPLX #3

Closed fabienbaradel closed 1 year ago

fabienbaradel commented 1 year ago

Hi,

I am rendering the mesh using the SMPLX pose. The body seems to be well-aligned with the real images but I found that the pose of the hands are not super great i.e. do not correspond to the hand poses on the associated RGB image (cf image below): img

I am using the following code snippet for extracting the mesh from the pose parameters:

model_neutral = smplx.create(SMPLX_DIR, 'smplx', gender='neutral', num_betas=11, use_pca=False)
out = model_neutral(global_orient=torch.from_numpy(pose_cam[:3]).reshape(1,-1),
                                        body_pose=torch.from_numpy(pose_cam[3:66]).reshape(1,-1),
                                        jaw_pose=torch.from_numpy(pose_cam[66:69]).reshape(1,-1),
                                        leye_pose=torch.from_numpy(pose_cam[69:72]).reshape(1,-1),
                                        reye_pose=torch.from_numpy(pose_cam[72:75]).reshape(1,-1),
                                        left_hand_pose=torch.from_numpy(pose_cam[75:120]).reshape(1,-1),
                                        right_hand_pose=torch.from_numpy(pose_cam[120:165]).reshape(1,-1),
                                        betas=torch.from_numpy(shape).reshape(1,-1),
                                    )
mesh_cam = out.vertices[0].cpu().numpy()

What am I doing wrong? I think that it would be great to provide a simple code for rendering a person from the associated SMPLX parameters. Thanks for your help,

pixelite1201 commented 1 year ago

Hi,

I am rendering the mesh using the SMPLX pose. The body seems to be well-aligned with the real images but I found that the pose of the hands are not super great i.e. do not correspond to the hand poses on the associated RGB image (cf image below): img

I am using the following code snippet for extracting the mesh from the pose parameters:

model_neutral = smplx.create(SMPLX_DIR, 'smplx', gender='neutral', num_betas=11, use_pca=False)
out = model_neutral(global_orient=torch.from_numpy(pose_cam[:3]).reshape(1,-1),
                                        body_pose=torch.from_numpy(pose_cam[3:66]).reshape(1,-1),
                                        jaw_pose=torch.from_numpy(pose_cam[66:69]).reshape(1,-1),
                                        leye_pose=torch.from_numpy(pose_cam[69:72]).reshape(1,-1),
                                        reye_pose=torch.from_numpy(pose_cam[72:75]).reshape(1,-1),
                                        left_hand_pose=torch.from_numpy(pose_cam[75:120]).reshape(1,-1),
                                        right_hand_pose=torch.from_numpy(pose_cam[120:165]).reshape(1,-1),
                                        betas=torch.from_numpy(shape).reshape(1,-1),
                                    )
mesh_cam = out.vertices[0].cpu().numpy()

What am I doing wrong? I think that it would be great to provide a simple code for rendering a person from the associated SMPLX parameters. Thanks for your help,

Could you try by setting flat_hand_mean=True? Thanks for the suggestion. I will create an example script to render.

fabienbaradel commented 1 year ago

Thanks for the fast answer, indeed setting flat_hand_mean=True solves the issue.