Spring
# 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
│ └── ...
└── ...