| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import functools |
| from dataclasses import dataclass |
|
|
| from .image_processing_utils import BaseImageProcessor |
| from .utils.import_utils import is_torchvision_available |
|
|
|
|
| if is_torchvision_available(): |
| from torchvision.transforms import Compose |
|
|
|
|
| @dataclass(frozen=True) |
| class SizeDict: |
| """ |
| Hashable dictionary to store image size information. |
| """ |
|
|
| height: int = None |
| width: int = None |
| longest_edge: int = None |
| shortest_edge: int = None |
| max_height: int = None |
| max_width: int = None |
|
|
| def __getitem__(self, key): |
| if hasattr(self, key): |
| return getattr(self, key) |
| raise KeyError(f"Key {key} not found in SizeDict.") |
|
|
|
|
| class BaseImageProcessorFast(BaseImageProcessor): |
| _transform_params = None |
|
|
| def _build_transforms(self, **kwargs) -> "Compose": |
| """ |
| Given the input settings e.g. do_resize, build the image transforms. |
| """ |
| raise NotImplementedError |
|
|
| def _validate_params(self, **kwargs) -> None: |
| for k, v in kwargs.items(): |
| if k not in self._transform_params: |
| raise ValueError(f"Invalid transform parameter {k}={v}.") |
|
|
| @functools.lru_cache(maxsize=1) |
| def get_transforms(self, **kwargs) -> "Compose": |
| self._validate_params(**kwargs) |
| return self._build_transforms(**kwargs) |
|
|
| def to_dict(self): |
| encoder_dict = super().to_dict() |
| encoder_dict.pop("_transform_params", None) |
| return encoder_dict |
|
|