              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)
          logger.trace("Predicted Landmarks: %s", batch["landmarks"])
 
</s> remove     @staticmethod
    def get_pts_from_predict(batch):
        """ Get points from predictor """
        for prediction, roi, offset in zip(batch["prediction"], batch["roi"], batch["offsets"]):
 </s> add     @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"]): </s> remove             x_center = (face.left + face.right) / 2.0
            y_center = (face.top + face.bottom) / 2.0 - face.height * 0.12
            scale = (face.width + face.height) * self.reference_scale
 </s> add             x_center = (cast(int, face.left) + face.right) / 2.0
            y_center = (cast(int, face.top) + face.bottom) / 2.0 - cast(int, face.height) * 0.12
            scale = (cast(int, face.width) + cast(int, face.height)) * self.reference_scale </s> remove         logger.trace("image_shape: %s, Padded shape: %s, box: %s, offsets: %s",
 </s> add         logger.trace("image_shape: %s, Padded shape: %s, box: %s, offsets: %s",  # type:ignore </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
        """
            landmarks.append(points)
        batch.landmarks = np.array(landmarks)
        logger.trace("Predicted Landmarks: %s", batch.landmarks)  # type:ignore
              points = np.reshape(prediction, (-1, 2))
              points *= (roi[2] - roi[0])
              points[:, 0] += (roi[0] - offset[0])
              points[:, 1] += (roi[1] - offset[1])
            landmarks.append(points)
        batch.landmarks = np.array(landmarks)
        logger.trace("Predicted Landmarks: %s", batch.landmarks)  # type:ignore
            landmarks.append(points)
        batch.landmarks = np.array(landmarks)
        logger.trace("Predicted Landmarks: %s", batch.landmarks)  # type:ignore
keep keep keep keep replace replace
 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