| 459 | |
| 460 | |
| 461 | def transfer_keypoints(source_verts, source_verts_visibility, target_verts, source_kp): |
| 462 | # tranfer keypoints to target image |
| 463 | # for each keypoint in source frame, find the closest visible vertex |
| 464 | source_verts[source_verts_visibility == 0] = np.inf |
| 465 | dists = np.linalg.norm(source_verts[None, :, :] - source_kp[:, None, :], axis=2) |
| 466 | vert_idx = np.argmin(dists, axis=1) |
| 467 | |
| 468 | # find these vertices in target frame and measrue the erorr between the target keypoint |
| 469 | target_kp_pred = target_verts[vert_idx] |
| 470 | |
| 471 | aux = {"vert_idx": vert_idx} |
| 472 | return target_kp_pred, aux |
| 473 | |
| 474 | |
| 475 | def main(): |