code: def generate_rand_comp_attribs(
      self, num_rand_comps, center_sample_mask
  ):
      assert isinstance(num_rand_comps, int)
      assert num_rand_comps > 0
      assert center_sample_mask.ndim == 2
  
      h, w = center_sample_mask.shape
  
      max_rand_half_height = self.max_rand_half_height
      min_rand_half_height = self.min_rand_half_height
      max_rand_height = max_rand_half_height * 2
      max_rand_width = np.clip(
          max_rand_height * self.comp_w_h_ratio,
          self.min_width,
          self.max_width,
      )
      margin = (
          int(
              np.sqrt(
                  (max_rand_height / 2) ** 2 + (max_rand_width / 2) ** 2
              )
          )
          + 1
      )
  
      if 2 * margin + 1 > min(h, w):
          assert min(h, w) > (np.sqrt(2) * (self.min_width + 1))
          max_rand_half_height = max(
              min(h, w) / 4, self.min_width / 2 + 1
          )
          min_rand_half_height = max(
              max_rand_half_height / 4, self.min_width / 2
          )
  
          max_rand_height = max_rand_half_height * 2
          max_rand_width = np.clip(
              max_rand_height * self.comp_w_h_ratio,
              self.min_width,
              self.max_width,
          )
          margin = (
              int(
                  np.sqrt(
                      (max_rand_height / 2) ** 2
                      + (max_rand_width / 2) ** 2
                  )
              )
              + 1
          )
  
      inner_center_sample_mask = np.zeros_like(center_sample_mask)
      inner_center_sample_mask[
          margin : h - margin, margin : w - margin
      ] = center_sample_mask[margin : h - margin, margin : w - margin]
      kernel_size = int(np.clip(max_rand_half_height, 7, 21))
      inner_center_sample_mask = cv2.erode(
          inner_center_sample_mask,
          np.ones((kernel_size, kernel_size), np.uint8),
      )
  
      center_candidates = np.argwhere(inner_center_sample_mask > 0)
      num_center_candidates = len(center_candidates)
      sample_inds = np.random.choice(
          num_center_candidates, num_rand_comps
      )
      rand_centers = center_candidates[sample_inds]
  
      rand_top_height = np.random.randint(
          min_rand_half_height,
          max_rand_half_height,
          size=(len(rand_centers), 1),
      )
      rand_bot_height = np.random.randint(
          min_rand_half_height,
          max_rand_half_height,
          size=(len(rand_centers), 1),
      )
  
      rand_cos = 2 * np.random.random(size=(len(rand_centers), 1)) - 1
      rand_sin = 2 * np.random.random(size=(len(rand_centers), 1)) - 1
      scale = np.sqrt(1.0 / (rand_cos**2 + rand_sin**2 + 1e-8))
      rand_cos = rand_cos * scale
      rand_sin = rand_sin * scale
  
      height = rand_top_height + rand_bot_height
      width = np.clip(
          height * self.comp_w_h_ratio, self.min_width, self.max_width
      )
  
      rand_comp_attribs = np.hstack(
          [
              rand_centers[:, ::-1],
              height,
              width,
              rand_cos,
              rand_sin,
              np.zeros_like(rand_sin),
          ]
      ).astype(np.float32)
  
      return rand_comp_attribs
  
imports: import cv2
  import numpy
  from ppocr.utils.utility import check_install
  from numpy.linalg import norm
label_desc: Use image node_id 14 for calling the DRRGTargets obj's underlying member method code with example usage: obj.generate_rand_comp_attribs(num_rand_comps, center_sample_mask) and returns: rand_comp_attribs