Skip to content

Commit

Permalink
Refactored xout_disparity so it uses XoutSeqSync
Browse files Browse the repository at this point in the history
  • Loading branch information
Erol444 committed Jun 28, 2023
1 parent e502ffd commit 99e2702
Showing 1 changed file with 19 additions and 28 deletions.
47 changes: 19 additions & 28 deletions depthai_sdk/src/depthai_sdk/oak_outputs/xout/xout_disparity.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from depthai_sdk.oak_outputs.xout import Clickable
from depthai_sdk.oak_outputs.xout.xout_base import StreamXout
from depthai_sdk.oak_outputs.xout.xout_frames import XoutFrames
from depthai_sdk.oak_outputs.xout.xout_seq_sync import XoutSeqSync
from depthai_sdk.visualize.configs import StereoColor

try:
Expand All @@ -19,7 +20,7 @@
cv2 = None


class XoutDisparity(XoutFrames, Clickable):
class XoutDisparity(XoutSeqSync, XoutFrames, Clickable):
def __init__(self,
device: dai.Device,
frames: StreamXout,
Expand Down Expand Up @@ -78,15 +79,20 @@ def __init__(self,
)
self.use_wls_filter = False

self.msgs = dict()

XoutFrames.__init__(self, frames=frames, fps=fps)
XoutSeqSync.__init__(self, [frames, mono_frames])
Clickable.__init__(self, decay_step=int(self.fps))


def on_callback(self, packet) -> None:
if self.ir_settings['auto_mode']:
self._auto_ir_search(packet.frame)

def xstreams(self) -> List[StreamXout]:
if self.mono_frames is None:
return [self.frames]
return [self.frames, self.mono_frames]

def visualize(self, packet: DepthPacket):
frame = packet.frame
disparity_frame = (frame * self.multiplier).astype(np.uint8)
Expand Down Expand Up @@ -129,34 +135,18 @@ def visualize(self, packet: DepthPacket):

super().visualize(packet)

def xstreams(self) -> List[StreamXout]:
def package(self, msgs: Dict) -> DepthPacket:
if self.mono_frames is None:
return [self.frames]
return [self.frames, self.mono_frames]

def new_msg(self, name: str, msg: dai.Buffer) -> None:
if name not in self._streams:
return # From Replay modules. TODO: better handling?

# TODO: what if msg doesn't have sequence num?
seq = str(msg.getSequenceNum())

if seq not in self.msgs:
self.msgs[seq] = dict()

if name == self.frames.name:
self.msgs[seq][name] = msg
elif name == self.mono_frames.name:
self.msgs[seq][name] = msg
mono_frame = None
else:
raise ValueError('Message from unknown stream name received by TwoStageSeqSync!')

if len(self.msgs[seq]) == len(self.xstreams()):
# Frames synced!
if self.queue.full():
self.queue.get() # Get one, so queue isn't full
mono_frame = msgs[self.mono_frames.name]
return DepthPacket(
self.get_packet_name(),
img_frame=msgs[self.frames.name],
mono_frame=mono_frame,
visualizer=self._visualizer
)

mono_frame = None
if self.mono_frames is not None:
mono_frame = self.msgs[seq][self.mono_frames.name]

Expand Down Expand Up @@ -252,3 +242,4 @@ def _update_ir(self):
def _reset_buffers(self):
self._X, self._y = [], []
del self._metrics_buffer['fill_rate']

0 comments on commit 99e2702

Please sign in to comment.