          for face, landmarks in zip(batch["detected_faces"], batch["landmarks"]):
              if not isinstance(landmarks, np.ndarray):
                  landmarks = np.array(landmarks)
              face.landmarks_xy = landmarks
          self._remove_invalid_keys(batch, ("detected_faces", "filename", "image"))
          logger.trace("Item out: %s", {key: val
                                        for key, val in batch.items()
                                        if key != "image"})
          for filename, image, face in zip(batch["filename"],
                                           batch["image"],
                                           batch["detected_faces"]):
              self._output_faces.append(face)
              if len(self._output_faces) != self._faces_per_filename[filename]:
                  continue
              retval = dict(filename=filename, image=image, detected_faces=self._output_faces)
  
 
</s> remove         self._remove_invalid_keys(batch, ("detected_faces", "filename", "image"))
        logger.trace("Item out: %s", {key: val
                                      for key, val in batch.items()
                                      if key != "image"})
        for filename, image, face in zip(batch["filename"],
                                         batch["image"],
                                         batch["detected_faces"]):
 </s> add         logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})
        for filename, face in zip(batch["filename"], batch["detected_faces"]): </s> remove         dict
            A ``dict`` for each frame containing the ``image``, ``filename`` and list of
            :class:`lib.faces_detect.DetectedFace` objects.

 </s> add         :class:`~plugins.extract.pipeline.ExtractMedia`
            The :attr:`DetectedFaces` list will be populated for this class with the bounding boxes
            and landmarks for the detected faces found in the frame. </s> remove             retval = dict(filename=filename, image=image, detected_faces=self._output_faces)
 </s> add  </s> remove             retval = dict(filename=filename, image=image, detected_faces=self._output_faces)
 </s> add  </s> remove         self._remove_invalid_keys(batch, ("detected_faces", "filename", "image"))
 </s> add 
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
          for face, landmarks in zip(batch["detected_faces"], batch["landmarks"]):
              if not isinstance(landmarks, np.ndarray):
                  landmarks = np.array(landmarks)
              face.landmarks_xy = landmarks
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
        logger.trace("Item out: %s", {key: val.shape if isinstance(val, np.ndarray) else val
                                      for key, val in batch.items()})

        for filename, face in zip(batch["filename"], batch["detected_faces"]):
              self._output_faces.append(face)
              if len(self._output_faces) != self._faces_per_filename[filename]:
                  continue
              retval = dict(filename=filename, image=image, detected_faces=self._output_faces)
  
keep keep keep keep replace replace replace replace replace replace replace keep keep keep keep keep
 plugins.extract - Create ExtractMedia class for pipeline flow
Bugfix - Fix memory leak in extract 
plugins/extract/align/_base.py