          """
          assert isinstance(batch, AlignerBatch)
          self.get_pts_from_predict(batch)
  
      @classmethod
      def get_pts_from_predict(cls, batch: AlignerBatch):
          """ Get points from predictor and populates the :attr:`landmarks` property
  
          Parameters
          ----------
          batch: :class:`AlignerBatch`
 
</s> remove         faces = self.crop(batch, center_scale)
        logger.trace("Aligned image around center")  # type:ignore
        faces = self._normalize_faces(faces)
 </s> add         batch.feed = np.array(self.crop(batch, center_scale))[..., :3] </s> remove         faces, roi, offsets = self.align_image(batch)
        faces = self._normalize_faces(faces)
 </s> add         lfaces, roi, offsets = self.align_image(batch)
        batch.feed = np.array(lfaces)[..., :3] </s> remove         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])
            landmarks.append(points)
        batch.landmarks = np.array(landmarks)
 </s> add         if batch.second_pass:
            batch.landmarks = batch.prediction.reshape(self.batchsize, -1, 2) * self.input_size
        else:
            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])
                landmarks.append(points)
            batch.landmarks = np.array(landmarks)
    def get_pts_from_predict(self, batch: AlignerBatch):
          """
          assert isinstance(batch, AlignerBatch)
          self.get_pts_from_predict(batch)
  
    def get_pts_from_predict(self, batch: AlignerBatch):
    def get_pts_from_predict(self, batch: AlignerBatch):
          """ Get points from predictor and populates the :attr:`landmarks` property
  
          Parameters
          ----------
          batch: :class:`AlignerBatch`
keep keep keep keep replace replace keep keep keep keep keep
 Extract: Implement re-align/2nd pass
   - implement configurable re-align function in extract
  - update locales + documentation
  - re-factor align._base and split to separate modules
  - move normalization method to plugin parent
  - bugfix: FAN use zeros for pre-processing crop
  - lint AlignedFilter 
plugins/extract/align/cv2_dnn.py