class_docstr: Do transformation on input data with corresponding pre-processing and augmentation operations.
  The shape of input data to all operations is [height, width, channels].
class_docstr_tok: ["Do","transformation","on","input","data","with","corresponding","pre-processing","and","augmentation","operations",".","The","shape","of","input","data","to","all","operations","is","[","height",",","width",",","channels","]","."]
docstr: Args:
      data (dict): The data to transform.
  
  Returns:
      dict: Data after transformation
docstr_tok: ["Args",":","data","(","dict",")",":","The","data","to","transform",".","Returns",":","dict",":","Data","after","transformation"]
code: def __call__(self, data):
      """
      Args:
          data (dict): The data to transform.
  
      Returns:
          dict: Data after transformation
      """
      if "trans_info" not in data:
          data["trans_info"] = []
      for op in self.transforms:
          data = op(data)
          if data is None:
              return None
  
      data["img"] = np.transpose(data["img"], (2, 0, 1))
      for key in data.get("gt_fields", []):
          if len(data[key].shape) == 2:
              continue
          data[key] = np.transpose(data[key], (2, 0, 1))
  
      return data
  
imports: import os
  import random
  import string
  import cv2
  import numpy
  from paddleseg.transforms import functional
  from paddleseg.cvlibs import manager
  from paddleseg.utils import seg_env
  from PIL import Image
label_desc: Use image node_id 2 for calling the Compose obj's underlying member method code with example usage: obj.__call__(data) and returns: data, None