class_docstr: Draw Pose estimation results on canvas.
  
  Args:
      stickwidth(int): Angle value to draw approximate ellipse curve, default is 4.
code: def __call__(
      self,
      canvas: np.ndarray,
      candidate: np.ndarray,
      subset: np.ndarray,
  ):
      for i in range(18):
          for n in range(len(subset)):
              index = int(subset[n][i])
              if index == -1:
                  continue
              x, y = candidate[index][0:2]
              cv2.circle(
                  canvas,
                  (int(x), int(y)),
                  4,
                  self.colors[i],
                  thickness=-1,
              )
      for i in range(17):
          for n in range(len(subset)):
              index = subset[n][np.array(self.limbSeq[i]) - 1]
              if -1 in index:
                  continue
              cur_canvas = canvas.copy()
              Y = candidate[index.astype(int), 0]
              X = candidate[index.astype(int), 1]
              mX = np.mean(X)
              mY = np.mean(Y)
              length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5
              angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1]))
              polygon = cv2.ellipse2Poly(
                  (int(mY), int(mX)),
                  (int(length / 2), self.stickwidth),
                  int(angle),
                  0,
                  360,
                  1,
              )
              cv2.fillConvexPoly(cur_canvas, polygon, self.colors[i])
              canvas = cv2.addWeighted(canvas, 0.4, cur_canvas, 0.6, 0)
      return canvas
  
imports: import base64
  import math
  from typing import Callable
  import cv2
  import numpy
  from scipy.ndimage import gaussian_filter
label_desc: Use image node_id 2 for calling the DrawPose obj's underlying member method code with example usage: obj.__call__(canvas, candidate, subset) and returns: canvas