code: def batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128):
      
      def convert_cnn_detections_to_css(detections):
          return [_trim_css_to_bounds(_rect_to_css(face.rect), images[0].shape) for face in detections]
  
      raw_detections_batched = _raw_face_locations_batched(images, number_of_times_to_upsample, batch_size)
  
      return list(map(convert_cnn_detections_to_css, raw_detections_batched))
docs: Returns an 2d array of bounding boxes of human faces in a image using the cnn face detector
      If you are using a GPU, this can give you much faster results since the GPU
      can process batches of images at once. If you aren't using a GPU, you don't need this function.
  
      :param img: A list of images (each as a numpy array)
      :param number_of_times_to_upsample: How many times to upsample the image looking for faces. Higher numbers find smaller faces.
      :param batch_size: How many images to include in each GPU processing batch.
      :return: A list of tuples of found face locations in css (top, right, bottom, left) order