docstr: API for face detection.
  
  Args:
      images (list(numpy.ndarray)): images data, shape of each is [H, W, C]
      paths (list[str]): The paths of images.
      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): score threshold to limit the detection result.
  
  Returns:
      res (list[dict]): The result of face detection, keys are 'data' and 'path', the correspoding values are:
      data (list[dict]): 5 keys, where
          'left', 'top', 'right', 'bottom' are the coordinate of detection bounding box,
          'confidence' is the confidence this bbox.
      path (str): The path of original image.
docstr_tok: ["API","for","face","detection",".","Args",":","images","(","list","(","numpy.ndarray",")",")",":","images","data",",","shape","of","each","is","[","H",",","W",",","C","]","paths","(","list","[","str","]",")",":","The","paths","of","images",".","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",")",":","score","threshold","to","limit","the","detection","result",".","Returns",":","res","(","list","[","dict","]",")",":","The","result","of","face","detection",",","keys","are","'data","'","and","'path","'",",","the","correspoding","values","are",":","data","(","list","[","dict","]",")",":","5","keys",",","where","'left","'",",","'top","'",",","'right","'",",","'bottom","'","are","the","coordinate","of","detection","bounding","box",",","'confidence","'","is","the","confidence","this","bbox",".","path","(","str",")",":","The","path","of","original","image","."]
code: def face_detection(
      self,
      images=None,
      paths=None,
      data=None,
      use_gpu=False,
      output_dir="detection_result",
      visualization=False,
      score_thresh=0.15,
  ):
      """
      API for face detection.
  
      Args:
          images (list(numpy.ndarray)): images data, shape of each is [H, W, C]
          paths (list[str]): The paths of images.
          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): score threshold to limit the detection result.
  
      Returns:
          res (list[dict]): The result of face detection, keys are 'data' and 'path', the correspoding values are:
          data (list[dict]): 5 keys, where
              'left', 'top', 'right', 'bottom' are the coordinate of detection bounding box,
              'confidence' is the confidence this bbox.
          path (str): The path of original image.
      """
      if use_gpu:
          try:
              _places = os.environ["CUDA_VISIBLE_DEVICES"]
              int(_places[0])
          except:
              raise RuntimeError(
                  "Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES as cuda_device_id."
              )
  
      # compatibility with older versions
      if data:
          if "image" in data:
              if paths is None:
                  paths = list()
              paths += data["image"]
  
      res = list()
      # process one by one
      for element in reader(images, paths):
          image = np.expand_dims(element["image"], axis=0).astype(
              "float32"
          )
          predictor = (
              self.gpu_predictor if use_gpu else self.cpu_predictor
          )
          input_names = predictor.get_input_names()
          input_handle = predictor.get_input_handle(input_names[0])
          input_handle.copy_from_cpu(image)
          predictor.run()
          output_names = predictor.get_output_names()
          output_handle = predictor.get_output_handle(output_names[0])
          output = np.expand_dims(output_handle.copy_to_cpu(), axis=1)
          # print(len(data_out))  # 1
          out = postprocess(
              data_out=output_handle.copy_to_cpu(),
              org_im=element["org_im"],
              org_im_path=element["org_im_path"],
              org_im_width=element["org_im_width"],
              org_im_height=element["org_im_height"],
              output_dir=output_dir,
              visualization=visualization,
              score_thresh=score_thresh,
          )
          res.append(out)
      return res
  
imports: from __future__ import absolute_import
  from __future__ import division
  import ast
  import argparse
  import os
  import numpy
  import paddle
  import paddle.jit
  import paddle.static
  from paddle.inference import Config, create_predictor
  from paddlehub.module.module import moduleinfo, runnable, serving
  from .data_feed import reader
  from .processor import postprocess, base64_to_cv2
label_desc: Use image node_id 3 for calling the PyramidBoxFaceDetection obj's underlying member method code with example usage: obj.face_detection(images, paths, data, use_gpu, output_dir, visualization, score_thresh) and returns: res