docstr: post processing the results[] gotten from process
docstr_tok: ["post","processing","the","results","[","]","gotten","from","process"]
code: def __postprocess(
      self,
      bounding_boxs,
      class_IDs,
      scores,
      keypoints,
      transform_info,
      nms_ret=None,
  ):
      """
      post processing the results[] gotten from process
      """
  
      p_b_w, p_b_h, padded_h, padded_w = transform_info
      assert nms_ret is not None
      if self.torch:
          idxs = nms_ret
          np_bbx = bounding_boxs[idxs].cpu().numpy()
          np_scores = scores[idxs].cpu().numpy()
          np_ids = class_IDs[idxs].cpu().numpy()
          np_keypoints = keypoints[idxs].cpu().numpy()
      else:
          np_bbx = bounding_boxs.asnumpy()
          np_ids = class_IDs.asnumpy()
          np_scores = scores.asnumpy()
          np_keypoints = keypoints.asnumpy()
          idxs = nms_ret.asnumpy()[:, -1].astype(int)
          idxs = idxs[np.where(idxs >= 0)[0]]
          np_bbx = np_bbx[idxs, :]
          np_ids = np_ids[idxs]
          np_scores = np_scores[idxs]
          np_keypoints = np_keypoints[idxs, :, :]
          # print(np_scores.shape, np_bbx.shape, np_keypoints.shape, np_ids.shape)
  
      idx = np.where(np_scores > self.threshold)[0]
      np_bbx = np_bbx[idx, :]
      np_scores = np_scores[idx, np.newaxis]
      np_ids = np_ids[idx]
      np_keypoints = np_keypoints[idx, :, :]
  
      # idx = np.where(np_scores > self.threshold)[0]
      # np_bbox = np_bbx[idx, :]
      # np_scores = np_scores[idx]
      # np_ids = np_ids[idx]
      # np_keypoints = np_keypoints[idx, :, :]
  
      np_bbx[:, 0] *= padded_w / self.image_width
      np_bbx[:, 1] *= padded_h / self.image_height
      np_bbx[:, 2] *= padded_w / self.image_width
      np_bbx[:, 3] *= padded_h / self.image_height
  
      np_bbx[:, 0] -= p_b_w
      np_bbx[:, 1] -= p_b_h
      np_bbx[:, 2] -= p_b_w
      np_bbx[:, 3] -= p_b_h
  
      np_bbx[:, 0] = np.clip(
          np_bbx[:, 0], a_min=0, a_max=self.original_w
      )
      np_bbx[:, 2] = np.clip(
          np_bbx[:, 2], a_min=0, a_max=self.original_w
      )
      np_bbx[:, 1] = np.clip(
          np_bbx[:, 1], a_min=0, a_max=self.original_h
      )
      np_bbx[:, 3] = np.clip(
          np_bbx[:, 3], a_min=0, a_max=self.original_h
      )
  
      np_keypoints = np_keypoints.reshape(-1, 17, 3)
  
      np_keypoints[:, :, 0] *= padded_w / self.image_width
      np_keypoints[:, :, 1] *= padded_h / self.image_height
  
      np_keypoints[:, :, 0] -= p_b_w
      np_keypoints[:, :, 1] -= p_b_h
  
      np_keypoints[:, :, 0] = np_keypoints[:, :, 0].clip(
          0, self.original_w
      )
      np_keypoints[:, :, 1] = np_keypoints[:, :, 1].clip(
          0, self.original_h
      )
      np_keypoints[:, :, 2] = np_keypoints[:, :, 2].clip(0, 1)
  
      return np_bbx, np_ids, np_scores, np_keypoints
  
file_path: gluon-cv/scripts/pose/directpose/tvm_evaluation/pose_model.py
imports: import tvm
  from tvm.contrib import graph_runtime
  from typing import List
  import cv2
  import numpy
label_desc: Use image node_id 5 for calling the PoseEstimationInferenceModel obj's underlying member method code with example usage: obj.__postprocess(bounding_boxs, class_IDs, scores, keypoints, transform_info, nms_ret) and returns: np_bbx,  np_ids,  np_scores,  np_keypoints