                       detector, aligner, loglevel, multiprocess, threshold)
          self.numeric_loglevel = get_loglevel(loglevel)
          self.vgg_face = VGGFace()
          self.filters = self.load_images(reference_file_paths, nreference_file_paths)
          self.align_faces(detector, aligner, loglevel, multiprocess)
          self.get_filter_encodings()
          self.threshold = threshold
          logger.debug("Initialized %s", self.__class__.__name__)
  
      @staticmethod
 
</s> remove                      detector, aligner, loglevel, multiprocess, threshold)
        self.numeric_loglevel = get_loglevel(loglevel)
 </s> add                      detector, aligner, multiprocess, threshold)
 </s> remove                      "detector: %s, aligner: %s. loglevel: %s, multiprocess: %s, threshold: %s)",
 </s> add                      "detector: %s, aligner: %s, multiprocess: %s, threshold: %s)",
 </s> remove         self.detector = self.load_detector(detector, loglevel, rotate_images, min_size, configfile)
        self.aligner = self.load_aligner(aligner, loglevel, configfile, normalize_method)
        self.is_parallel = self.set_parallel_processing(multiprocess)
        self.processes = list()
        self.queues = self.add_queues()
 </s> add         self._queue_size = 32
        self._vram_buffer = 320  # Leave a buffer for VRAM allocation
        self._detector = self._load_detector(detector, rotate_images, min_size, configfile)
        self._aligner = self._load_aligner(aligner, configfile, normalize_method)
        self._is_parallel = self._set_parallel_processing(multiprocess)
        self._queues = self._add_queues() </s> remove                                     loglevel,
 </s> add  </s> remove     def load_face_filter(self, filter_lists, ref_threshold, aligner, detector, loglevel,
 </s> add     def load_face_filter(self, filter_lists, ref_threshold, aligner, detector,
        # TODO Revert face-filter to use the selected detector and aligner.
        # Currently Tensorflow does not release vram after it has been allocated
        # Whilst this vram can still be used, the pipeline for the extraction process can't see
        # it so thinks there is not enough vram available.
        # Either the pipeline will need to be changed to be re-usable by face-filter and extraction
        # Or another vram measurement technique will need to be implemented to for when TF has
        # already performed allocation. For now we force CPU detectors.

        # self.align_faces(detector, aligner, multiprocess)
        self.align_faces("cv2-dnn", "cv2-dnn", multiprocess)


                       detector, aligner, loglevel, multiprocess, threshold)
          self.numeric_loglevel = get_loglevel(loglevel)
          self.vgg_face = VGGFace()
          self.filters = self.load_images(reference_file_paths, nreference_file_paths)
        # TODO Revert face-filter to use the selected detector and aligner.
        # Currently Tensorflow does not release vram after it has been allocated
        # Whilst this vram can still be used, the pipeline for the extraction process can't see
        # it so thinks there is not enough vram available.
        # Either the pipeline will need to be changed to be re-usable by face-filter and extraction
        # Or another vram measurement technique will need to be implemented to for when TF has
        # already performed allocation. For now we force CPU detectors.

        # self.align_faces(detector, aligner, multiprocess)
        self.align_faces("cv2-dnn", "cv2-dnn", multiprocess)

          self.get_filter_encodings()
          self.threshold = threshold
          logger.debug("Initialized %s", self.__class__.__name__)
  
      @staticmethod
keep keep keep keep replace keep keep keep keep keep
 De-Multiprocess Extract (#871)

* requirements.txt: - Pin opencv to 4.1.1 (fixes cv2-dnn error)

* lib.face_detect.DetectedFace: change LandmarksXY to landmarks_xy. Add left, right, top, bottom attributes

* lib.model.session: Session manager for loading models into different graphs (for Nvidia + CPU)

* plugins.extract._base: New parent class for all extract plugins

* plugins.extract.pipeline. Remove MultiProcessing. Dynamically limit batchsize for Nvidia cards. Remove loglevel input

* S3FD + FAN plugins. Standardise to Keras version for all backends

* Standardize all extract plugins to new threaded codebase

* Documentation. Start implementing Numpy style docstrings for Sphinx Documentation

* Remove s3fd_amd. Change convert OTF to expect DetectedFace object

* faces_detect - clean up and documentation

* Remove PoolProcess

* Migrate manual tool to new extract workflow

* Remove AMD specific extractor code from cli and plugins

* Sort tool to new extract workflow

* Remove multiprocessing from project

* Remove multiprocessing queues from QueueManager

* Remove multiprocessing support from logger

* Move face_filter to new extraction pipeline

* Alignments landmarksXY > landmarks_xy and legacy handling

* Intercept get_backend for sphinx doc build

# Add Sphinx documentation 
lib/face_filter.py