DA3-LARGE / image_processing_depth_anything_3.py
bigshanedogg's picture
Upload DA3-LARGE (transformers port, original code)
456e761 verified
Raw History Blame Contribute Delete
1.99 kB
"""Depth Anything 3 preprocessing: the package's ``InputProcessor`` (vendored in ``da3_input_processor.py``) behind the
transformers image-processor interface. Images (PIL / numpy / paths) -> ``pixel_values`` (1, N, 3, H, W), resized
("upper_bound_resize" to 504 by default, sides multiples of 14) and ImageNet-normalised; camera parameters given
with the images come back resized to match (``extrinsics`` / ``intrinsics``)."""
from transformers.feature_extraction_utils import BatchFeature
from transformers.image_processing_utils import BaseImageProcessor
from .da3_input_processor import InputProcessor
class DepthAnything3ImageProcessor(BaseImageProcessor):
model_input_names = ["pixel_values"]
def __init__(self, process_res: int = 504, process_res_method: str = "upper_bound_resize", **kwargs):
super().__init__(**kwargs)
self.process_res = process_res
self.process_res_method = process_res_method
def preprocess(self, images, extrinsics=None, intrinsics=None, process_res=None, process_res_method=None,
return_tensors=None, **kwargs) -> BatchFeature:
if not isinstance(images, (list, tuple)):
images = [images]
tensor, extrinsics, intrinsics = InputProcessor()(
list(images),
extrinsics.copy() if extrinsics is not None else None,
intrinsics.copy() if intrinsics is not None else None,
process_res or self.process_res,
process_res_method or self.process_res_method,
**kwargs,
)
# InputProcessor returns (N, 3, H, W); the package API adds the batch axis (_prepare_model_inputs)
data = {"pixel_values": tensor[None].float()}
if extrinsics is not None:
data["extrinsics"] = extrinsics[None]
if intrinsics is not None:
data["intrinsics"] = intrinsics[None]
return BatchFeature(data, tensor_type=return_tensors)
__all__ = ["DepthAnything3ImageProcessor"]