Oliver Hamilton
Upload 29 files
a083fd4 verified
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
"""Synchronous Executor based on ModelAPI."""
from __future__ import annotations
import time
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from demo_package.model_wrapper import ModelWrapper
from demo_package.visualizers import BaseVisualizer
from demo_package.streamer.streamer import get_streamer
from demo_package.visualizers import dump_frames
class SyncExecutor:
"""Synchronous executor for model inference.
Args:
model (ModelContainer): model for inference
visualizer (Visualizer): visualizer of inference results. Defaults to None.
"""
def __init__(self, model: ModelWrapper, visualizer: BaseVisualizer) -> None:
self.model = model
self.visualizer = visualizer
def run(self, input_stream: int | str, loop: bool = False) -> None:
"""Run demo using input stream (image, video stream, camera)."""
streamer = get_streamer(input_stream, loop)
saved_frames = []
for frame in streamer:
# getting result include preprocessing, infer, postprocessing for sync infer
start_time = time.perf_counter()
predictions, _ = self.model(frame)
output = self.visualizer.draw(frame, predictions)
self.visualizer.show(output)
if output is not None:
saved_frames.append(output)
if self.visualizer.is_quit():
break
# visualize video not faster than the original FPS
self.visualizer.video_delay(time.perf_counter() - start_time, streamer)
dump_frames(saved_frames, self.visualizer.output, input_stream, streamer)