import tempfile
from pathlib import Path
import numpy as np
import torch
from tiles import TILE, write_tiles
from dataloader_rs import FileDataset, Image, ImageCollator, PyDataloader
from dataloader_rs import transforms as T
MEAN = [0.485, 0.456, 0.406]
STD = [0.229, 0.224, 0.225]
def main() -> None:
torch.set_num_threads(1)
decode = T.Compose([T.Decode(), T.ToRgb(), T.PadTo(TILE, TILE)])
normalize = T.Compose([T.ToFloat(), T.Normalize(MEAN, STD)])
with tempfile.TemporaryDirectory() as tmp:
paths, coords = write_tiles(Path(tmp))
def transform(index: int, data: bytes) -> tuple[Image, np.ndarray]:
image = decode(data) chw = torch.from_dlpack(image).permute(2, 0, 1) chw = torch.rot90(chw, k=index % 4, dims=(1, 2)) image = Image.from_array(chw, layout="chw") return normalize(image), coords[index]
loader = PyDataloader(
FileDataset(paths),
batch_size=4,
num_workers=2,
item_concurrency=2,
transform=transform,
collate_fn=ImageCollator(),
)
for batch, tile_coords in loader:
images = torch.from_dlpack(batch) print(tuple(images.shape), [tuple(int(v) for v in c) for c in tile_coords])
if __name__ == "__main__":
main()