58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import numpy as np
|
|
|
|
from .event_bus import EventBus
|
|
|
|
|
|
class ImagePipeline:
|
|
def __init__(self, bus: EventBus):
|
|
self.bus = bus
|
|
self.id_counter = 0
|
|
self.stages = {}
|
|
self.stagedata = {}
|
|
self.stagedata_full = {}
|
|
|
|
def register_stage(self, name: str):
|
|
self.stages[self.id_counter] = name
|
|
self.stagedata[self.id_counter] = None
|
|
self.stagedata_full[self.id_counter] = None
|
|
self.bus.publish_deferred("pipeline_stages", self.stages)
|
|
self.id_counter += 1
|
|
return self.id_counter-1
|
|
|
|
def rename_stage(self, id: int, name: str):
|
|
if id in self.stages:
|
|
self.stages[id] = name
|
|
self.bus.publish_deferred("pipeline_stages", self.stages)
|
|
|
|
def publish(self, id: int, img: np.ndarray, full_res=False):
|
|
if img is None:
|
|
return
|
|
if full_res:
|
|
self.stagedata_full[id] = img.astype(np.float32)
|
|
self.bus.publish_deferred(
|
|
"pipeline_stage_full", (id, self.stagedata_full[id]))
|
|
else:
|
|
self.stagedata[id] = img.astype(np.float32)
|
|
self.bus.publish_deferred(
|
|
"pipeline_stage", (id, self.stagedata[id]))
|
|
|
|
def get_stage_data(self, id: int):
|
|
if id >= 0 and id < len(self.stages):
|
|
return self.stagedata[id]
|
|
else:
|
|
return None
|
|
|
|
def get_stage_name(self, id: int):
|
|
if id >= 0 and id < len(self.stages):
|
|
return self.stages[id]
|
|
else:
|
|
return None
|
|
|
|
def republish_stages(self):
|
|
self.bus.publish_deferred("pipeline_stages", self.stages)
|
|
|
|
def remove_stage(self, id: int):
|
|
del self.stages[id]
|
|
del self.stagedata[id]
|
|
self.republish_stages()
|