              self._rollover = None
          else:
              item = self._get_item(queue)
              if item != "EOF":
                  logger.trace("Getting from queue: (filename: %s, faces: %s)",
                               item.filename, len(item.detected_faces))
                  self._faces_per_filename[item.filename] = len(item.detected_faces)
          return item
  
      # <<< FINALIZE METHODS >>> #
 
</s> remove             logger.trace("Getting from _rollover: (filename: `%s`, faces: %s)",
 </s> add             logger.trace("Getting from _rollover: (filename: `%s`, faces: %s)",  # type:ignore </s> remove     def _collect_item(self, queue):
        """ Collect the item from the :attr:`_rollover` dict or from the queue
            Add face count per frame to self._faces_per_filename for joining
            batches back up in finalize """
 </s> add     def _collect_item(self, queue: "Queue") -> Union[Literal["EOF"], ExtractMedia]:
        """ Collect the item from the :attr:`_rollover` dict or from the queue. Add face count per
        frame to self._faces_per_filename for joining batches back up in finalize

        Parameters
        ----------
        queue: :class:`queue.Queue`
            The input queue to the aligner. Should contain
            :class:`~plugins.extract.pipeline.ExtractMedia` objects

        Returns
        -------
        :class:`~plugins.extract.pipeline.ExtractMedia` or EOF
            The next extract media object, or EOF if pipe has ended
        """ </s> remove     def finalize(self, batch):
 </s> add     def finalize(self, batch: AlignerBatch) -> Generator[ExtractMedia, None, None]: </s> remove             logger.trace("Final Output: (filename: '%s', image shape: %s, detected_faces: %s, "
                         "item: %s)",
 </s> add             logger.trace("Final Output: (filename: '%s', image shape: %s, "  # type:ignore
                         "detected_faces: %s, item: %s)", </s> remove                 logger.trace("EOF received")
 </s> add                 logger.trace("EOF received")  # type:ignore
                self._filter.output_counts()
                logger.trace("Getting from queue: (filename: %s, faces: %s)",  # type:ignore
              self._rollover = None
          else:
              item = self._get_item(queue)
              if item != "EOF":
                logger.trace("Getting from queue: (filename: %s, faces: %s)",  # type:ignore
                               item.filename, len(item.detected_faces))
                  self._faces_per_filename[item.filename] = len(item.detected_faces)
          return item
  
      # <<< FINALIZE METHODS >>> #
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/_base.py