  
  >>> face = self.to_detected_face(<face left>, <face top>, <face right>, <face bottom>)
  """
  import logging
  
  from dataclasses import dataclass, field
  from typing import Generator, List, Optional, Tuple, TYPE_CHECKING
  
  import numpy as np
  from tensorflow.python.framework import errors_impl as tf_errors  # pylint:disable=no-name-in-module  # noqa
 
</s> remove from lib.align import AlignedFace
 </s> add from lib.align import AlignedFace, DetectedFace
from lib.image import read_image_meta </s> remove from typing import Any, cast, Dict, Generator, List, Optional, Tuple, TYPE_CHECKING, Union
 </s> add from typing import cast, Dict, Generator, List, Optional, Tuple, TYPE_CHECKING, Union </s> remove from typing import List, Dict, Optional
 </s> add from typing import List, Dict, Optional, Tuple, TYPE_CHECKING, Union
import sys
  
  >>> face = self.to_detected_face(<face left>, <face top>, <face right>, <face bottom>)
  """
  import logging
import sys
  
  from dataclasses import dataclass, field
  from typing import Generator, List, Optional, Tuple, TYPE_CHECKING
  
  import numpy as np
  from tensorflow.python.framework import errors_impl as tf_errors  # pylint:disable=no-name-in-module  # noqa
keep keep keep add keep keep keep keep keep keep
 Update Face Filter
  - Remove old face filter
  - plugins.extract.pipeline: Expose plugins directly
  - Change `is_aligned` from plugin level to ExtractMedia level
  - Allow extract pipeline to take faceswap aligned images
  - Add ability for recognition plugins to accept aligned faces as input
  - Add face filter to recognition plugin
  - Move extractor pipeline IO ops to own class 
plugins/extract/recognition/_base.py