class_docstr: HandposeModel
  
  Args:
      load_checkpoint(str): Checkpoint save path, default is None.
class_docstr_tok: ["HandposeModel","Args",":","load_checkpoint","(","str",")",":","Checkpoint","save","path",",","default","is","None","."]
code: def hand_estimation(self, handimg: np.ndarray, scale_search: list):
      heatmap_avg = np.zeros((handimg.shape[0], handimg.shape[1], 22))
      for scale in scale_search:
          process = self.resize_func(handimg, scale)
          imageToTest_padded, pad = self.pad_func(process)
          process = self.norm_func(imageToTest_padded)
          process = np.ascontiguousarray(
              np.transpose(process[:, :, :, np.newaxis], (3, 2, 0, 1))
          ).astype("float32")
          data = self.forward(paddle.to_tensor(process))
          data = data.numpy()
          heatmap = self.remove_pad(
              data, imageToTest_padded, handimg, pad
          )
          heatmap_avg += heatmap / len(scale_search)
  
      all_peaks = []
      for part in range(21):
          map_ori = heatmap_avg[:, :, part]
          one_heatmap = gaussian_filter(map_ori, sigma=3)
          binary = np.ascontiguousarray(
              one_heatmap > 0.05, dtype=np.uint8
          )
          if np.sum(binary) == 0:
              all_peaks.append([0, 0])
              continue
          label_img, label_numbers = label(
              binary, return_num=True, connectivity=binary.ndim
          )
          max_index = (
              np.argmax(
                  [
                      np.sum(map_ori[label_img == i])
                      for i in range(1, label_numbers + 1)
                  ]
              )
              + 1
          )
          label_img[label_img != max_index] = 0
          map_ori[label_img == 0] = 0
  
          y, x = P.npmax(map_ori)
          all_peaks.append([x, y])
  
      return np.array(all_peaks)
  
imports: import os
  import copy
  import time
  import argparse
  from typing import Union
  from collections import OrderedDict
  import cv2
  import paddle
  import numpy
  import paddle.nn
  import paddlehub
  from skimage.measure import label
  from scipy.ndimage import gaussian_filter
  from paddlehub.module.module import moduleinfo, runnable, serving
  import paddlehub.vision.transforms
  from .None import processor
label_desc: Use image node_id 4 for calling the HandPoseModel obj's underlying member method code with example usage: obj.hand_estimation(handimg, scale_search) and returns: np