code: def __call__(self, batch):
      batch = filter(lambda x: x is not None, batch)
      images = batch
  
      resized_max_w = self.imgW
      input_channel = 1
      transform = NormalizePAD(
          (input_channel, self.imgH, resized_max_w)
      )
  
      resized_images = []
      for image in images:
          w, h = image.size
          #### augmentation here - change contrast
          if self.adjust_contrast > 0:
              image = np.array(image.convert("L"))
              image = adjust_contrast_grey(
                  image, target=self.adjust_contrast
              )
              image = Image.fromarray(image, "L")
  
          ratio = w / float(h)
          if math.ceil(self.imgH * ratio) > self.imgW:
              resized_w = self.imgW
          else:
              resized_w = math.ceil(self.imgH * ratio)
  
          resized_image = image.resize(
              (resized_w, self.imgH), Image.BICUBIC
          )
          resized_images.append(transform(resized_image))
  
      image_tensors = torch.cat(
          [t.unsqueeze(0) for t in resized_images], 0
      )
      return image_tensors
  
imports: from PIL import Image
  import torch
  import torch.backends.cudnn
  import torch.utils.data
  import torch.nn.functional
  import torchvision.transforms
  import numpy
  from collections import OrderedDict
  import importlib
  from .utils import CTCLabelConverter
  import math
label_desc: Use image node_id 2 for calling the AlignCollate obj's underlying member method code with example usage: obj.__call__(batch) and returns: image_tensors