code: def gaussian_blur(self, heatmap, kernel):
      border = (kernel - 1) // 2
      batch_size = heatmap.shape[0]
      num_joints = heatmap.shape[1]
      height = heatmap.shape[2]
      width = heatmap.shape[3]
      for i in range(batch_size):
          for j in range(num_joints):
              origin_max = np.max(heatmap[i, j])
              dr = np.zeros((height + 2 * border, width + 2 * border))
              dr[border:-border, border:-border] = heatmap[i, j].copy()
              dr = cv2.GaussianBlur(dr, (kernel, kernel), 0)
              heatmap[i, j] = dr[border:-border, border:-border].copy()
              heatmap[i, j] *= origin_max / np.max(heatmap[i, j])
      return heatmap
  
file_path: PaddleHub/modules/image/keypoint_detection/pp-tinypose/keypoint_postprocess.py
imports: import math
  import cv2
  import numpy
  from .keypoint_preprocess import get_affine_transform
label_desc: Use image node_id 4 for calling the HRNetPostProcess obj's underlying member method code with example usage: obj.gaussian_blur(heatmap, kernel) and returns: heatmap