docstr: API of Object Detection.
  
  Args:
      paths (list[str]): The paths of images.
      images (list(numpy.ndarray)): images data, shape of each is [H, W, C]
      batch_size (int): batch size.
      use_gpu (bool): Whether to use gpu.
      output_dir (str): The path to store output images.
      visualization (bool): Whether to save image or not.
      score_thresh (float): threshold for object detecion.
  
  Returns:
      res (list[dict]): The result of coco2017 detecion. keys include 'data', 'save_path', the corresponding value is:
          data (dict): the result of object detection, keys include 'left', 'top', 'right', 'bottom', 'label', 'confidence', the corresponding value is:
              left (float): The X coordinate of the upper left corner of the bounding box;
              top (float): The Y coordinate of the upper left corner of the bounding box;
              right (float): The X coordinate of the lower right corner of the bounding box;
              bottom (float): The Y coordinate of the lower right corner of the bounding box;
              label (str): The label of detection result;
              confidence (float): The confidence of detection result.
          save_path (str, optional): The path to save output images.
docstr_tok: ["API","of","Object","Detection",".","Args",":","paths","(","list","[","str","]",")",":","The","paths","of","images",".","images","(","list","(","numpy.ndarray",")",")",":","images","data",",","shape","of","each","is","[","H",",","W",",","C","]","batch_size","(","int",")",":","batch","size",".","use_gpu","(","bool",")",":","Whether","to","use","gpu",".","output_dir","(","str",")",":","The","path","to","store","output","images",".","visualization","(","bool",")",":","Whether","to","save","image","or","not",".","score_thresh","(","float",")",":","threshold","for","object","detecion",".","Returns",":","res","(","list","[","dict","]",")",":","The","result","of","coco2017","detecion",".","keys","include","'data","'",",","'save_path","'",",","the","corresponding","value","is",":","data","(","dict",")",":","the","result","of","object","detection",",","keys","include","'left","'",",","'top","'",",","'right","'",",","'bottom","'",",","'label","'",",","'confidence","'",",","the","corresponding","value","is",":","left","(","float",")",":","The","X","coordinate","of","the","upper","left","corner","of","the","bounding","box",";","top","(","float",")",":","The","Y","coordinate","of","the","upper","left","corner","of","the","bounding","box",";","right","(","float",")",":","The","X","coordinate","of","the","lower","right","corner","of","the","bounding","box",";","bottom","(","float",")",":","The","Y","coordinate","of","the","lower","right","corner","of","the","bounding","box",";","label","(","str",")",":","The","label","of","detection","result",";","confidence","(","float",")",":","The","confidence","of","detection","result",".","save_path","(","str",",","optional",")",":","The","path","to","save","output","images","."]
code: def object_detection(
      self,
      paths=None,
      images=None,
      use_gpu=False,
      batch_size=1,
      output_dir="detection_result",
      score_thresh=0.5,
      visualization=True,
  ):
      """API of Object Detection.
  
      Args:
          paths (list[str]): The paths of images.
          images (list(numpy.ndarray)): images data, shape of each is [H, W, C]
          batch_size (int): batch size.
          use_gpu (bool): Whether to use gpu.
          output_dir (str): The path to store output images.
          visualization (bool): Whether to save image or not.
          score_thresh (float): threshold for object detecion.
  
      Returns:
          res (list[dict]): The result of coco2017 detecion. keys include 'data', 'save_path', the corresponding value is:
              data (dict): the result of object detection, keys include 'left', 'top', 'right', 'bottom', 'label', 'confidence', the corresponding value is:
                  left (float): The X coordinate of the upper left corner of the bounding box;
                  top (float): The Y coordinate of the upper left corner of the bounding box;
                  right (float): The X coordinate of the lower right corner of the bounding box;
                  bottom (float): The Y coordinate of the lower right corner of the bounding box;
                  label (str): The label of detection result;
                  confidence (float): The confidence of detection result.
              save_path (str, optional): The path to save output images.
      """
      if use_gpu:
          try:
              _places = os.environ["CUDA_VISIBLE_DEVICES"]
              int(_places[0])
          except:
              raise RuntimeError(
                  "Attempt to use GPU for prediction, but environment variable CUDA_VISIBLE_DEVICES was not set correctly."
              )
      paths = paths if paths else list()
  
      all_images = list()
      for yield_return in test_reader(paths, images):
          all_images.append(yield_return)
  
      images_num = len(all_images)
      loop_num = ceil(images_num / batch_size)
      res = []
      for iter_id in range(loop_num):
          batch_data = []
          handle_id = iter_id * batch_size
          for image_id in range(batch_size):
              try:
                  batch_data.append(all_images[handle_id + image_id])
              except:
                  pass
  
          (
              padding_image,
              padding_info,
              padding_shape,
          ) = padding_minibatch(batch_data)
  
          predictor = (
              self.gpu_predictor if use_gpu else self.cpu_predictor
          )
  
          feed_list = [padding_image, padding_info, padding_shape]
  
          input_names = predictor.get_input_names()
  
          for i, input_name in enumerate(input_names):
              data = np.asarray(feed_list[i], dtype=np.float32)
              handle = predictor.get_input_handle(input_name)
              handle.copy_from_cpu(data)
  
          predictor.run()
          output_names = predictor.get_output_names()
          output_handle = predictor.get_output_handle(output_names[0])
  
          output = postprocess(
              paths=paths,
              images=images,
              data_out=output_handle,
              score_thresh=score_thresh,
              label_names=self.label_names,
              output_dir=output_dir,
              handle_id=handle_id,
              visualization=visualization,
          )
          res += output
      return res
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import ast
  import argparse
  from math import ceil
  import paddle
  import numpy
  import paddle.static
  from paddlehub.module.module import moduleinfo, runnable, serving
  from paddle.inference import Config, create_predictor
  from paddlehub.utils.parser import txt_parser
  from .processor import load_label_info, postprocess, base64_to_cv2
  from .data_feed import test_reader, padding_minibatch
label_desc: Use image node_id 3 for calling the FasterRCNNResNet50 obj's underlying member method code with example usage: obj.object_detection(paths, images, use_gpu, batch_size, output_dir, score_thresh, visualization) and returns: res