  SOFTWARE.
  """
  
  import cv2
  import numpy as np
  
  from ._base import Aligner, AlignerBatch, logger
  
 
</s> remove from ._base import Aligner, logger
 </s> add from ._base import Aligner, AlignerBatch, logger

if TYPE_CHECKING:
    from lib.align.detected_face import DetectedFace </s> remove from ._base import Aligner, logger
 </s> add from ._base import Aligner, AlignerBatch, logger

if TYPE_CHECKING:
    from lib.align import DetectedFace </s> remove     def finalize(self, batch):
 </s> add     def finalize(self, batch: AlignerBatch) -> Generator[ExtractMedia, None, None]: </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
        """
from typing import cast, List, Tuple, TYPE_CHECKING
  SOFTWARE.
  """
from typing import cast, List, Tuple, TYPE_CHECKING
  
  import cv2
  import numpy as np
  
  from ._base import Aligner, AlignerBatch, logger
  
keep add keep 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