          self.vram = 0  # Doesn't use GPU
          self.vram_per_batch = 0
          self.batchsize = 1
  
      def init_model(self):
          """ Initialize CV2 DNN Detector Model"""
          self.model = cv2.dnn.readNetFromTensorflow(self.model_path)  # pylint: disable=no-member
          self.model.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)  # pylint: disable=no-member
  
      def process_input(self, batch):
 
</s> remove     def process_input(self, batch):
        """ Compile the detected faces for prediction """
        faces, batch["roi"], batch["offsets"] = self.align_image(batch)
 </s> add     def process_input(self, batch: AlignerBatch) -> None:
        """ Compile the detected faces for prediction

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch to process input for

        Returns
        -------
        :class:`AlignerBatch`
            The batch item with the :attr:`feed` populated and any required :attr:`data` added
        """
        faces, roi, offsets = self.align_image(batch) </s> remove         self.batchsize = self.config["batch-size"]
 </s> add         self.batchsize: int = self.config["batch-size"] </s> remove     def init_model(self):
 </s> add     def init_model(self) -> None: </s> remove         logger.trace("Padding: (l: %s, t: %s, r: %s, b: %s)", pad_l, pad_t, pad_r, pad_b)
 </s> add         logger.trace("Padding: (l: %s, t: %s, r: %s, b: %s)",  # type:ignore
                     pad_l, pad_t, pad_r, pad_b) </s> remove     @staticmethod
    def pad_image(box, image):
        """Pad image if face-box falls outside of boundaries """
 </s> add     @classmethod
    def pad_image(cls, box: List[int], image: np.ndarray) -> Tuple[np.ndarray, Tuple[int, int]]:
        """Pad image if face-box falls outside of boundaries

        Parameters
        ----------
        box: list
            The (`left`, `top`, `right`, `bottom`) roi box positions
        image: :class:`numpy.ndarray`
            The image to be padded

        Returns
        -------
        :class:`numpy.ndarray`
            The padded image
        """
    def init_model(self) -> None:
          self.vram = 0  # Doesn't use GPU
          self.vram_per_batch = 0
          self.batchsize = 1
  
    def init_model(self) -> None:
          """ Initialize CV2 DNN Detector Model"""
          self.model = cv2.dnn.readNetFromTensorflow(self.model_path)  # pylint: disable=no-member
          self.model.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)  # pylint: disable=no-member
  
      def process_input(self, batch):
keep keep keep keep replace keep keep keep keep keep
 Extract updates:
  - Default CPU detector to MTCNN
  - add basic Aligner false positive filters
  - Typing: align + plugins
  - Use specific AlignerBatch class for alignment
  - 
plugins/extract/align/cv2_dnn.py