          """ Process the output from the model """
          self.get_pts_from_predict(batch)
          return batch
  
      @staticmethod
      def get_pts_from_predict(batch):
          """ Get points from predictor """
          for prediction, roi, offset in zip(batch["prediction"], batch["roi"], batch["offsets"]):
              points = np.reshape(prediction, (-1, 2))
              points *= (roi[2] - roi[0])
              points[:, 0] += (roi[0] - offset[0])
              points[:, 1] += (roi[1] - offset[1])
              batch.setdefault("landmarks", []).append(points)
 
</s> remove             batch.setdefault("landmarks", []).append(points)
        logger.trace("Predicted Landmarks: %s", batch["landmarks"])
 </s> add             landmarks.append(points)
        batch.landmarks = np.array(landmarks)
        logger.trace("Predicted Landmarks: %s", batch.landmarks)  # type:ignore </s> remove     def get_pts_from_predict(self, batch):
        """ Get points from predictor """
 </s> add     def get_pts_from_predict(self, batch: AlignerBatch):
        """ Get points from predictor and populate the :attr:`landmarks` property of the
        :class:`AlignerBatch`

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated
        """ </s> remove     def process_output(self, batch):
        """ Process the output from the model """
 </s> add     def process_output(self, batch: AlignerBatch) -> AlignerBatch:
        """ Process the output from the model

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated

        Returns
        -------
        :class:`AlignerBatch`
            The current batch with the :attr:`landmarks` populated
        """ </s> remove     def process_output(self, batch):
        """ Process the output from the model """
 </s> add     def process_output(self, batch: AlignerBatch) -> AlignerBatch:
        """ Process the output from the model

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated

        Returns
        -------
        :class:`AlignerBatch`
            The current batch with the :attr:`landmarks` populated
        """ </s> remove         logger.trace(retval.shape)
 </s> add         logger.trace(retval.shape)  # type:ignore
    @classmethod
    def get_pts_from_predict(cls, batch: AlignerBatch):
        """ Get points from predictor and populates the :attr:`landmarks` property

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated
        """
        landmarks = []
        for prediction, roi, offset in zip(batch.prediction,
                                           batch.data[0]["roi"],
                                           batch.data[0]["offsets"]):
          """ Process the output from the model """
          self.get_pts_from_predict(batch)
          return batch
  
    @classmethod
    def get_pts_from_predict(cls, batch: AlignerBatch):
        """ Get points from predictor and populates the :attr:`landmarks` property

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated
        """
        landmarks = []
        for prediction, roi, offset in zip(batch.prediction,
                                           batch.data[0]["roi"],
                                           batch.data[0]["offsets"]):
    @classmethod
    def get_pts_from_predict(cls, batch: AlignerBatch):
        """ Get points from predictor and populates the :attr:`landmarks` property

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated
        """
        landmarks = []
        for prediction, roi, offset in zip(batch.prediction,
                                           batch.data[0]["roi"],
                                           batch.data[0]["offsets"]):
    @classmethod
    def get_pts_from_predict(cls, batch: AlignerBatch):
        """ Get points from predictor and populates the :attr:`landmarks` property

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated
        """
        landmarks = []
        for prediction, roi, offset in zip(batch.prediction,
                                           batch.data[0]["roi"],
                                           batch.data[0]["offsets"]):
    @classmethod
    def get_pts_from_predict(cls, batch: AlignerBatch):
        """ Get points from predictor and populates the :attr:`landmarks` property

        Parameters
        ----------
        batch: :class:`AlignerBatch`
            The current batch from the model with :attr:`predictions` populated
        """
        landmarks = []
        for prediction, roi, offset in zip(batch.prediction,
                                           batch.data[0]["roi"],
                                           batch.data[0]["offsets"]):
              points = np.reshape(prediction, (-1, 2))
              points *= (roi[2] - roi[0])
              points[:, 0] += (roi[0] - offset[0])
              points[:, 1] += (roi[1] - offset[1])
              batch.setdefault("landmarks", []).append(points)
keep keep keep keep replace replace replace 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