Spring

https://spring-benchmark.org/

# download train_frame_left.zip and train_flow_FW_left.zip from
# https://darus.uni-stuttgart.de/dataset.xhtml?persistentId=doi:10.18419/darus-3376
f=spring_sample.zip
wget https://cloud.visus.uni-stuttgart.de/index.php/s/5MtTY23RWcWfgPE/download -O ${f}
unzip -q ${f}
 1__all__ = [
 2    'visualize',
 3]
 4
 5from typing import Any, Iterable
 6
 7T = dict[str, Any]
 8
 9
10def visualize(dataset: Iterable[T]) -> None:
11    from collections import defaultdict
12
13    import cv2
14    import numpy as np
15    import tqdm
16
17    import todd.tasks.optical_flow_estimation as ofe
18    from todd.patches.cv2 import ColorMap, VideoWriter
19
20    color_map = ColorMap(cv2.COLORMAP_JET)
21    video_writers: defaultdict[str, VideoWriter] = \
22        defaultdict(lambda: VideoWriter(12.))
23    for data in tqdm.tqdm(dataset):
24        id_: str = data['id_']
25        of = ofe.OpticalFlow(data['of'])
26        frame = np.concatenate([
27            data['frame1'],
28            of.to_color().numpy(),
29            color_map(of.a),
30            color_map(of.r),
31            color_map(of.u),
32            color_map(of.v),
33        ])
34        scene, _ = id_.split('/', 1)
35        video_writers[scene].write(frame)
36    for name, video_writer in video_writers.items():
37        video_writer.dump(f'{name}.mp4')
 1import pathlib
 2from typing import Any
 3
 4import todd.tasks.optical_flow_estimation as ofe
 5from todd import Config
 6from todd.configs import PyConfig
 7
 8T = dict[str, Any]
 9
10
11def downsample(data: T) -> T:
12    data['of'] = data['of'][::2, ::2]
13    return data
14
15
16dataset = ofe.datasets.SpringDataset(
17    access_layer=Config(
18        data_root='data/spring_sample',
19        task_name='train',
20        modality='flow_FW_left',
21    ),
22    frame_access_layer=Config(modality='frame_left'),
23)
24PyConfig.load(
25    pathlib.Path(__file__).parent / 'optical_flow.py',
26).visualize(map(downsample, dataset))
data/spring/train/
├── 0001
│   ├── flow_FW_left
│   │   ├── flow_FW_left_0001.flo5
│   │   └── ...
│   └── frame_left
│       ├── frame_left_0001.png
│       └── ...
└── ...

data/spring_sample/train/
├── 0001
│   ├── cam_data
│   │   ├── extrinsics.txt
│   │   ├── focaldistance.txt
│   │   └── intrinsics.txt
│   ├── disp1_left|disp2_FW_left
│   │   ├── (disp1_left|disp2_FW_left)_0001.dsp5
│   │   └── ...
│   ├── flow_FW_left
│   │   ├── flow_FW_left_0001.flo5
│   │   └── ...
│   ├── frame_left
│   │   ├── frame_left_0001.png
│   │   └── ...
│   └── maps
│       └── detailmap_disp1_left|detailmap_disp2_FW_left|detailmap_flow_FW_left|matchmap_disp1_left|matchmap_disp2_FW_left|matchmap_flow_FW_left|rigidmap_FW_left|skymap_left
│          ├── (detailmap_disp1_left|detailmap_disp2_FW_left|detailmap_flow_FW_left|matchmap_disp1_left|matchmap_disp2_FW_left|matchmap_flow_FW_left|rigidmap_FW_left|skymap_left)_0001.png
│          └── ...
└── ...