make pipeline progress more accurate and complete
This commit is contained in:
parent
746f2f56cd
commit
1cf8c7eff6
|
@ -124,12 +124,13 @@ class ChainPipeline:
|
|||
callback = ChainProgress.from_progress(callback)
|
||||
|
||||
# set estimated totals
|
||||
steps = params.steps
|
||||
if "size" in pipeline_kwargs and isinstance(pipeline_kwargs["size"], Size):
|
||||
size = pipeline_kwargs["size"]
|
||||
steps = self.steps(params, size)
|
||||
else:
|
||||
size = sources.size()
|
||||
|
||||
worker.set_totals(steps, stages=len(self.stages), tiles=0)
|
||||
total_steps = self.steps(params, size)
|
||||
worker.set_totals(total_steps, stages=len(self.stages), tiles=0)
|
||||
|
||||
start = monotonic()
|
||||
|
||||
|
@ -182,6 +183,7 @@ class ChainPipeline:
|
|||
source_tile: List[Image.Image],
|
||||
tile_mask: Image.Image,
|
||||
dims: Tuple[int, int, int],
|
||||
progress: Tuple[int, int],
|
||||
) -> List[Image.Image]:
|
||||
for _i in range(worker.retries):
|
||||
try:
|
||||
|
@ -203,7 +205,7 @@ class ChainPipeline:
|
|||
for j, image in enumerate(tile_result.as_image()):
|
||||
save_image(server, f"last-tile-{j}.png", image)
|
||||
|
||||
worker.set_tiles(worker.tiles.current + 1)
|
||||
worker.set_tiles(current=progress[0], total=progress[1])
|
||||
|
||||
return tile_result
|
||||
except CancelledException as err:
|
||||
|
|
|
@ -26,7 +26,7 @@ class TileCallback(Protocol):
|
|||
"""
|
||||
|
||||
def __call__(
|
||||
self, sources: List[Image.Image], mask: Image.Image, dims: Tuple[int, int, int]
|
||||
self, sources: List[Image.Image], mask: Image.Image, dims: Tuple[int, int, int], progress: Tuple[int, int]
|
||||
) -> StageResult:
|
||||
"""
|
||||
Run this stage against a single tile.
|
||||
|
@ -268,11 +268,13 @@ def process_tile_stack(
|
|||
|
||||
tiles: List[Tuple[int, int, Image.Image]] = []
|
||||
tile_coords = tile_generator(width, height, tile, overlap)
|
||||
single_tile = len(tile_coords) == 1
|
||||
|
||||
total_tiles = len(tile_coords)
|
||||
single_tile = total_tiles == 1
|
||||
|
||||
for counter, (left, top) in enumerate(tile_coords):
|
||||
logger.info(
|
||||
"processing tile %s of %s, %sx%s", counter, len(tile_coords), left, top
|
||||
"processing tile %s of %s, %sx%s", counter, total_tiles, left, top
|
||||
)
|
||||
|
||||
right = left + tile
|
||||
|
@ -341,8 +343,9 @@ def process_tile_stack(
|
|||
tile_mask = mask.crop((left, top, right, bottom))
|
||||
|
||||
for image_filter in filters:
|
||||
tile_stack = image_filter(tile_stack, tile_mask, (left, top, tile))
|
||||
tile_stack = image_filter(tile_stack, tile_mask, (left, top, tile), (counter, total_tiles))
|
||||
|
||||
# TODO: this should be inverted to extract them from the result
|
||||
if isinstance(tile_stack, list):
|
||||
tile_stack = StageResult.from_images(tile_stack, metadata=stack.metadata)
|
||||
|
||||
|
|
|
@ -189,9 +189,9 @@ class WorkerContext:
|
|||
self.tiles = self.tiles.update(current)
|
||||
|
||||
def set_totals(self, steps: int, stages: int = 0, tiles: int = 0) -> None:
|
||||
self.steps.total = steps
|
||||
self.stages.total = stages
|
||||
self.tiles.total = tiles
|
||||
self.steps = Progress(0, steps)
|
||||
self.stages.total = Progress(0, stages)
|
||||
self.tiles.total = Progress(0, tiles)
|
||||
|
||||
def finish(self) -> None:
|
||||
if self.job is None:
|
||||
|
|
Loading…
Reference in New Issue