      """ Return the config for the requested model """
      return Config(plugin_name, configfile=configfile).config_dict
  
  
  class Detector():
      """ Detector object """
      def __init__(self, loglevel, configfile=None,  # pylint:disable=too-many-arguments
                   git_model_id=None, model_filename=None, rotation=None, min_size=0):
          logger.debug("Initializing %s: (loglevel: %s, configfile: %s, git_model_id: %s, "
                       "model_filename: %s, rotation: %s, min_size: %s)",
                       self.__class__.__name__, loglevel, configfile, git_model_id,
                       model_filename, rotation, min_size)
          self.config = get_config(".".join(self.__module__.split(".")[-2:]), configfile=configfile)
          self.loglevel = loglevel
          self.rotation = self.get_rotation_angles(rotation)
          self.min_size = min_size
          self.parent_is_pool = False
          self.init = None
          self.error = None
  
          # The input and output queues for the plugin.
          # See lib.queue_manager.QueueManager for getting queues
          self.queues = {"in": None, "out": None}
  
          #  Path to model if required
          self.model_path = self.get_model(git_model_id, model_filename)
  
          # Target image size for passing images through the detector
          # Set to tuple of dimensions (x, y) or int of pixel count
          self.target = None
  
          # Approximate VRAM used for the set target. Used to calculate
          # how many parallel processes / batches can be run.
          # Be conservative to avoid OOM.
          self.vram = None
  
          # Set to true if the plugin supports PlaidML
          self.supports_plaidml = False
  
          # For detectors that support batching, this should be set to
          # the calculated batch size that the amount of available VRAM
          # will support. It is also used for holding the number of threads/
          # processes for parallel processing plugins
          self.batch_size = 1
          logger.debug("Initialized _base %s", self.__class__.__name__)
  
      # <<< OVERRIDE METHODS >>> #
      def initialize(self, *args, **kwargs):
          """ Inititalize the detector
 
</s> remove         # Approximate VRAM required for aligner. Used to calculate
        # how many parallel processes / batches can be run.
        # Be conservative to avoid OOM.
        self.vram = None
 </s> add     """ </s> remove         #  Get model if required
        self.model_path = self.get_model(git_model_id, model_filename)
 </s> add     See Also
    --------
    plugins.extract.align : Aligner plugins
    plugins.extract._base : Parent class for all extraction plugins
    plugins.extract.detect._base : Detector parent class for extraction plugins. </s> remove class Aligner():
    """ Landmarks Aligner Object """
    def __init__(self, loglevel, configfile=None, normalize_method=None,
                 git_model_id=None, model_filename=None, colorspace="BGR", input_size=256):
        logger.debug("Initializing %s: (loglevel: %s, configfile: %s, normalize_method: %s, "
                     "git_model_id: %s, model_filename: '%s', colorspace: '%s'. input_size: %s)",
                     self.__class__.__name__, loglevel, configfile, normalize_method, git_model_id,
                     model_filename, colorspace, input_size)
        self.loglevel = loglevel
        self.normalize_method = normalize_method
        self.colorspace = colorspace.upper()
        self.input_size = input_size
        self.extract = Extract()
        self.init = None
        self.error = None
 </s> add     All Aligner plugins must inherit from this class

    Parameters
    ----------
    git_model_id: int
        The second digit in the github tag that identifies this model. See
        https://github.com/deepfakes-models/faceswap-models for more information
    model_filename: str
        The name of the model file to be loaded
    normalize_method: {`None`, 'clahe', 'hist', 'mean'}, optional
        Normalize the images fed to the aligner. Default: ``None`` </s> remove def get_config(plugin_name, configfile=None):
    """ Return the config for the requested model """
    return Config(plugin_name, configfile=configfile).config_dict
 </s> add     def __init__(self, git_model_id=None, model_filename=None,
                 configfile=None, rotation=None, min_size=0):
        logger.debug("Initializing %s: (rotation: %s, min_size: %s)", self.__class__.__name__,
                     rotation, min_size)
        super().__init__(git_model_id,
                         model_filename,
                         configfile=configfile)
        self.rotation = self._get_rotation_angles(rotation)
        self.min_size = min_size </s> remove         # Set to true if the plugin supports PlaidML
        self.supports_plaidml = False
 </s> add     def __init__(self, git_model_id, model_filename,
                 configfile=None, normalize_method=None):
        logger.debug("Initializing %s: (normalize_method: %s)", self.__class__.__name__,
                     normalize_method)
        super().__init__(git_model_id,
                         model_filename,
                         configfile=configfile)
        self.normalize_method = normalize_method
      """ Return the config for the requested model """
      return Config(plugin_name, configfile=configfile).config_dict
  
  








































          logger.debug("Initialized _base %s", self.__class__.__name__)
  
      # <<< OVERRIDE METHODS >>> #
      def initialize(self, *args, **kwargs):
          """ Inititalize the detector
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace 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 
plugins/extract/detect/_base.py