code: def predict_image(self, img_list):
      st = time.time()
  
      dt_batch_boxes = []
      for image in img_list:
          img, shape_list = self.preprocess(image)
          if img is None:
              return None, 0
          self.input_tensor.copy_from_cpu(img)
          self.predictor.run()
          outputs = []
          for output_tensor in self.output_tensors:
              output = output_tensor.copy_to_cpu()
              outputs.append(output)
  
          preds = {}
          preds["maps"] = outputs[0]
  
          # self.predictor.try_shrink_memory()
          post_result = self.postprocess_op(preds, shape_list)
          # print("post_result length:{}".format(len(post_result)))
  
          org_shape = image.shape
          dt_boxes = post_result[0]["points"]
          dt_boxes = self.filter_tag_det_res(dt_boxes, org_shape)
          dt_batch_boxes.append(dt_boxes)
  
      et = time.time()
      return dt_batch_boxes, et - st
  
imports: import os
  import yaml
  import glob
  from functools import reduce
  import time
  import cv2
  import numpy
  import math
  import paddle
  import sys
  from python.infer import get_test_images
  from python.preprocess import preprocess, NormalizeImage, Permute, Resize_Mult32
  from pipeline.ppvehicle.vehicle_plateutils import create_predictor, get_infer_gpuid, get_rotate_crop_image, draw_boxes
  from pipeline.ppvehicle.vehicleplate_postprocess import build_post_process
  from pipeline.cfg_utils import merge_cfg, print_arguments, argsparser
label_desc: Use image node_id 7 for calling the PlateDetector obj's underlying member method code with example usage: obj.predict_image(img_list) and returns: dt_batch_boxes,  unknown, None,  int