class_docstr: apply data augment to images and coords
  to achieve the flip, scale, rotate and half body transform effect for training image
  Args:
      trainsize (list):[w, h], Image target size
      upper_body_ids (list): The upper body joint ids
      flip_pairs (list): The left-right joints exchange order list
      pixel_std (int): The pixel std of the scale
      scale (float): The scale factor to transform the image
      rot (int): The rotate factor to transform the image
      num_joints_half_body (int): The joints threshold of the half body transform
      prob_half_body (float): The threshold of the half body transform
      flip (bool): Whether to flip the image
  Returns:
      records(dict): contain the image and coords after tranformed
class_docstr_tok: ["apply","data","augment","to","images","and","coords","to","achieve","the","flip",",","scale",",","rotate","and","half","body","transform","effect","for","training","image","Args",":","trainsize","(","list",")",":","[","w",",","h","]",",","Image","target","size","upper_body_ids","(","list",")",":","The","upper","body","joint","ids","flip_pairs","(","list",")",":","The","left-right","joints","exchange","order","list","pixel_std","(","int",")",":","The","pixel","std","of","the","scale","scale","(","float",")",":","The","scale","factor","to","transform","the","image","rot","(","int",")",":","The","rotate","factor","to","transform","the","image","num_joints_half_body","(","int",")",":","The","joints","threshold","of","the","half","body","transform","prob_half_body","(","float",")",":","The","threshold","of","the","half","body","transform","flip","(","bool",")",":","Whether","to","flip","the","image","Returns",":","records","(","dict",")",":","contain","the","image","and","coords","after","tranformed"]
code: def __init__(
      self,
      trainsize,
      upper_body_ids,
      flip_pairs,
      pixel_std,
      scale=0.35,
      rot=40,
      num_joints_half_body=8,
      prob_half_body=0.3,
      flip=True,
      rot_prob=0.6,
      do_occlusion=False,
  ):
      super(RandomFlipHalfBody3DTransformImages, self).__init__()
      self.trainsize = trainsize
      self.upper_body_ids = upper_body_ids
      self.flip_pairs = flip_pairs
      self.pixel_std = pixel_std
      self.scale = scale
      self.rot = rot
      self.num_joints_half_body = num_joints_half_body
      self.prob_half_body = prob_half_body
      self.flip = flip
      self.aspect_ratio = trainsize[0] * 1.0 / trainsize[1]
      self.rot_prob = rot_prob
      self.do_occlusion = do_occlusion
  
imports: from __future__ import absolute_import
  import cv2
  import numpy
  import math
  import copy
  import random
  import uuid
  from numbers import Number, Integral
  from ...modeling.keypoint_utils import get_affine_mat_kernel, warp_affine_joints, get_affine_transform, affine_transform, get_warp_matrix
  from ppdet.core.workspace import serializable
  from ppdet.utils.logger import setup_logger
  import matplotlib.pyplot
  from PIL import Image, ImageDraw
  from mpl_toolkits.mplot3d import Axes3D
label_desc: Use image node_id 1 to create a new RandomFlipHalfBody3DTransformImages object from inherited base classes: object with example: obj = RandomFlipHalfBody3DTransformImages(trainsize, upper_body_ids, flip_pairs, pixel_std, scale, rot, num_joints_half_body, prob_half_body, flip, rot_prob, do_occlusion)