import torch import numpy as np def kpoint_to_heatmap(kpoint, shape, sigma): """Converts a 2D keypoint to a gaussian heatmap Parameters ---------- kpoint: np.array 2D coordinates of keypoint [x, y]. shape: tuple Heatmap dimension (HxW). sigma: float Variance value of the gaussian. Returns ------- heatmap: np.array A gaussian heatmap HxW. """ map_h = shape[0] map_w = shape[1] if np.any(kpoint > 0): x, y = kpoint # x = x * map_w / 384.0 # y = y * map_h / 512.0 xy_grid = np.mgrid[:map_w, :map_h].transpose(2, 1, 0) heatmap = np.exp(-np.sum((xy_grid - (x, y)) ** 2, axis=-1) / sigma ** 2) heatmap /= (heatmap.max() + np.finfo('float32').eps) else: heatmap = np.zeros((map_h, map_w)) return torch.Tensor(heatmap) def get_coco_body25_mapping(): #left numbers are coco format while right numbers are body25 format return { 0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:9, 9:10, 10:11, 11:12, 12:13, 13:14, 14:15, 15:16, 16:17, 17:18 }