          logger.debug("Initialized %s", self.__class__.__name__)
  
      # <<< OVERRIDE METHODS >>> #
      # These methods must be overriden when creating a plugin
      @staticmethod
      def set_model_path():
          """ path to data file/models
              override for specific detector """
          raise NotImplementedError()
  
      def initialize(self, *args, **kwargs):
          """ Inititalize the aligner
              Tasks to be run before any alignments are performed.
              Override for specific detector """
          logger.debug("_base initialize %s: (PID: %s, args: %s, kwargs: %s)",
 
</s> remove     def align(self, *args, **kwargs):
        """ Process landmarks
            Override for specific detector
            Must return a list of dlib rects"""
        if not self.init:
            self.initialize(*args, **kwargs)
        logger.debug("Launching Align: (args: %s kwargs: %s)", args, kwargs)
 </s> add     def align_image(self, detected_face, image):
        """ Align the incoming image for feeding into aligner
            Override for aligner specific processing """
        raise NotImplementedError

    def predict_landmarks(self, feed_dict):
        """ Predict the 68 point landmarks
            Override for aligner specific landmark prediction """
        raise NotImplementedError

    # <<< GET MODEL >>> #
    @staticmethod
    def get_model(model_filename):
        """ Check if model is available, if not, download and unzip it """
        cache_path = os.path.join(os.path.dirname(__file__), ".cache")
        model = GetModel(model_filename, cache_path)
        return model.model_path </s> remove     # <<< DETECTION WRAPPER >>> #
 </s> add     # <<< ALIGNMENT WRAPPER >>> # </s> remove         #  Path to model if required
        self.model_path = self.set_model_path()
 </s> add         #  Get model if required
        self.model_path = self.get_model(model_filename) </s> remove         except Exception:  # pylint: disable=broad-except
 </s> add         except Exception:  # pylint:disable=broad-except </s> remove         self.cachepath = os.path.join(os.path.dirname(__file__), ".cache")
 </s> add         self.colorspace = colorspace.upper()
        self.input_size = input_size
          logger.debug("Initialized %s", self.__class__.__name__)
  
      # <<< OVERRIDE METHODS >>> #
      # These methods must be overriden when creating a plugin






      def initialize(self, *args, **kwargs):
          """ Inititalize the aligner
              Tasks to be run before any alignments are performed.
              Override for specific detector """
          logger.debug("_base initialize %s: (PID: %s, args: %s, kwargs: %s)",
keep keep keep keep replace replace replace replace replace replace keep keep keep keep keep
 Remove Dlib Aligner

Remove Dlib Aligner
Add CV2-DNN Aligner replacement for dlib
Remove aligner models from repo
Add download function to pull models from remote location
Minor FAN fixups 
plugins/extract/align/_base.py