in scripts/render/pipeline.py [0:0]
def depth_estimation(self):
"""Runs distributed depth estimation with temporal filtering."""
post_resize_params = copy(self.base_params)
if self.base_params["disparity_type"] == "disparity":
post_resize_params["color"] = os.path.join(
self.base_params["input_root"],
image_type_paths[config.type_to_levels_type["color"]],
)
post_resize_params["foreground_masks"] = os.path.join(
self.base_params["input_root"],
image_type_paths[config.type_to_levels_type["foreground_masks"]],
)
post_resize_params["background_disp"] = os.path.join(
self.base_params["input_root"],
image_type_paths[config.type_to_levels_type["background_disp"]],
)
elif self.base_params["disparity_type"] == "background_disp":
post_resize_params["color"] = os.path.join(
self.base_params["input_root"],
image_type_paths[config.type_to_levels_type["color"]],
)
start_level = (
post_resize_params["level_start"]
if post_resize_params["level_start"] != -1
else len(config.WIDTHS) - 1
)
if post_resize_params["level_end"] != -1:
end_level = post_resize_params["level_end"]
else:
for level, width in enumerate(config.WIDTHS):
if post_resize_params["resolution"] >= width:
end_level = level
break
# Ranges for temporal filtering (only used if performing temporal filtering)
filter_ranges = [
{
"first": frame_chunk["first"],
"last": frame_chunk["last"],
"filter_first": get_frame_name(
max(
int(post_resize_params["first"]),
int(frame_chunk["first"]) - post_resize_params["time_radius"],
)
),
"filter_last": get_frame_name(
min(
int(post_resize_params["last"]),
int(frame_chunk["last"]) + post_resize_params["time_radius"],
)
),
}
for frame_chunk in self.frame_chunks
]
for level in range(start_level, end_level - 1, -1):
depth_params = copy(post_resize_params)
if level != end_level:
depth_params[
"output_formats"
] = "pfm" # Force only PFM at non-finest levels
depth_params.update(
{
"app": f"DerpCLI: Level {level}",
"level_start": level,
"level_end": level,
"image_type": depth_params["disparity_type"],
"dst_level": level,
"dst_image_type": depth_params["disparity_type"],
}
)
self.run_halted_queue(depth_params, self.frame_chunks)
if post_resize_params["do_temporal_filter"]:
filter_params = copy(post_resize_params)
filter_params.update(
{
"app": "TemporalBilateralFilter",
"level": level,
"use_foreground_masks": post_resize_params[
"do_temporal_masking"
],
"dst_level": level,
"dst_image_type": "disparity_time_filtered",
}
)
self.run_halted_queue(filter_params, filter_ranges)
transfer_params = copy(post_resize_params)
transfer_params.update(
{
"app": "Transfer",
"src_level": level,
"src_image_type": "disparity_time_filtered",
"dst_level": level,
"dst_image_type": "disparity",
"force_recompute": True,
}
)
self.run_halted_queue(transfer_params, self.frame_chunks)
if post_resize_params["resolution"] > config.WIDTHS[end_level]:
# The upsampling color level is the smallest one larger than our last level
dst_level = end_level - 1 if end_level > 0 else None
upsample_params = copy(self.base_params)
upsample_params.update(
{
"app": "UpsampleDisparity",
"level": end_level,
"image_type": post_resize_params["disparity_type"],
"dst_level": dst_level,
"dst_image_type": config.type_to_upsample_type["disparity"],
}
)
if post_resize_params["disparity_type"] == "background_disp":
frame_chunks = self.background_frame
elif post_resize_params["disparity_type"] == "disparity":
frame_chunks = self.frame_chunks
else:
raise Exception(
f"Invalid disparity type {post_resize_params['disparity_type']}"
)
self.run_halted_queue(upsample_params, frame_chunks)
transfer_params = copy(post_resize_params)
transfer_params.update(
{
"app": "Transfer",
"src_level": None,
"src_image_type": config.type_to_upsample_type["disparity"],
"dst_level": None,
"dst_image_type": post_resize_params["disparity_type"],
}
)
self.run_halted_queue(transfer_params, frame_chunks)
else:
transfer_params = copy(post_resize_params)
transfer_params.update(
{
"app": "Transfer",
"src_level": end_level,
"src_image_type": post_resize_params["disparity_type"],
"dst_level": None,
"dst_image_type": post_resize_params["disparity_type"],
}
)
self.run_halted_queue(transfer_params, self.frame_chunks)