fix recorder
This commit is contained in:
parent
b4239c3c74
commit
1900c0c528
@ -20,6 +20,7 @@ from flandre.nodes.ImageFFMPEG import ImageFFMPEG
|
|||||||
from flandre.nodes.ImageQt import ImageQt
|
from flandre.nodes.ImageQt import ImageQt
|
||||||
from flandre.nodes.Midi import Midi
|
from flandre.nodes.Midi import Midi
|
||||||
from flandre.nodes.Mi import Mi
|
from flandre.nodes.Mi import Mi
|
||||||
|
from flandre.nodes.Recorder import Recorder
|
||||||
from flandre.utils.Msg import KillMsg, NodeOnlineMsg, Msg1, Msg2
|
from flandre.utils.Msg import KillMsg, NodeOnlineMsg, Msg1, Msg2
|
||||||
from flandre.config import CONFIG_FOLDER
|
from flandre.config import CONFIG_FOLDER
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ class LaunchComponent(Enum):
|
|||||||
Robot = Robot
|
Robot = Robot
|
||||||
Loader = Loader
|
Loader = Loader
|
||||||
Device = Device
|
Device = Device
|
||||||
|
Recorder = Recorder
|
||||||
Beamformer = Beamformer
|
Beamformer = Beamformer
|
||||||
ImageFFMPEG = ImageFFMPEG
|
ImageFFMPEG = ImageFFMPEG
|
||||||
ImageQt = ImageQt
|
ImageQt = ImageQt
|
||||||
|
|||||||
@ -84,6 +84,8 @@ class Beamformer(Node):
|
|||||||
arg_msg: ImageArgMsg = Msg.decode_msg(r[:id2])
|
arg_msg: ImageArgMsg = Msg.decode_msg(r[:id2])
|
||||||
rf_frame_msg: RfFrameMsg = Msg.decode_msg(r[id2:])
|
rf_frame_msg: RfFrameMsg = Msg.decode_msg(r[id2:])
|
||||||
mat = RfMat.from_rf_frame(rf_frame_msg.rf_frame, 'gpu')
|
mat = RfMat.from_rf_frame(rf_frame_msg.rf_frame, 'gpu')
|
||||||
|
if mat is None:
|
||||||
|
continue
|
||||||
if arg_msg.v2 != last_v2 or arg_msg.f_rows != last_f_rows:
|
if arg_msg.v2 != last_v2 or arg_msg.f_rows != last_f_rows:
|
||||||
last_v2 = arg_msg.v2
|
last_v2 = arg_msg.v2
|
||||||
last_f_rows = arg_msg.f_rows
|
last_f_rows = arg_msg.f_rows
|
||||||
|
|||||||
@ -29,6 +29,7 @@ class Muxer(Node):
|
|||||||
self.play_mode: str | None = None
|
self.play_mode: str | None = None
|
||||||
self.rep_socket: zmq.Socket = None
|
self.rep_socket: zmq.Socket = None
|
||||||
self.req_driver_socket: zmq.Socket = None
|
self.req_driver_socket: zmq.Socket = None
|
||||||
|
self.driver_pull_socket: zmq.Socket = None
|
||||||
self.playback_rf_msg: RfFrameMsg | None = None
|
self.playback_rf_msg: RfFrameMsg | None = None
|
||||||
self.device_enabled = False
|
self.device_enabled = False
|
||||||
self.driver_data_raw = b''
|
self.driver_data_raw = b''
|
||||||
@ -38,6 +39,8 @@ class Muxer(Node):
|
|||||||
self.rep_socket: zmq.Socket = self.c.ctx.socket(zmq.REP)
|
self.rep_socket: zmq.Socket = self.c.ctx.socket(zmq.REP)
|
||||||
self.rep_socket.bind(f'tcp://localhost:{C.muxer_rep_port}')
|
self.rep_socket.bind(f'tcp://localhost:{C.muxer_rep_port}')
|
||||||
self.req_driver_socket: zmq.Socket = self.c.ctx.socket(zmq.REQ)
|
self.req_driver_socket: zmq.Socket = self.c.ctx.socket(zmq.REQ)
|
||||||
|
# self.driver_pull_socket = self.c.ctx.socket(zmq.PULL)
|
||||||
|
# self.driver_pull_socket.connect(C.live_push_socket)
|
||||||
# self.req_driver_socket.connect(C.driver_rep_socket)
|
# self.req_driver_socket.connect(C.driver_rep_socket)
|
||||||
self.req_driver_socket.connect(C.live_rep_socket)
|
self.req_driver_socket.connect(C.live_rep_socket)
|
||||||
self.c.poller.register(self.rep_socket, zmq.POLLIN)
|
self.c.poller.register(self.rep_socket, zmq.POLLIN)
|
||||||
@ -45,6 +48,9 @@ class Muxer(Node):
|
|||||||
def p_thread(self):
|
def p_thread(self):
|
||||||
while self.run_p_thread:
|
while self.run_p_thread:
|
||||||
if self.play_mode == 'live':
|
if self.play_mode == 'live':
|
||||||
|
# ii = self.driver_pull_socket.poll(timeout=1000)
|
||||||
|
# if ii > 0:
|
||||||
|
# self.driver_data_raw = self.driver_pull_socket.recv()
|
||||||
self.req_driver_socket.send(struct.pack('i', Device.magic) + struct.pack('i', DeviceCmd.GetData.value))
|
self.req_driver_socket.send(struct.pack('i', Device.magic) + struct.pack('i', DeviceCmd.GetData.value))
|
||||||
self.driver_data_raw = self.req_driver_socket.recv()
|
self.driver_data_raw = self.req_driver_socket.recv()
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -5,18 +5,17 @@ from pathlib import Path
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import zmq
|
import zmq
|
||||||
|
|
||||||
from flandre.config import LIVE_SOCKET,C
|
from flandre.config import C
|
||||||
from flandre.nodes.Node import Node
|
from flandre.nodes.Node import Node
|
||||||
from flandre.utils.Msg import ImageArgMsg, KillMsg, SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, \
|
from flandre.utils.Msg import ImageArgMsg, KillMsg, SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, \
|
||||||
RfFrameWithMetaMsg, RequestRfFrameMsg, RecordFrameMsg, RobotRtsiMsg
|
RequestRfFrameMsg, RecordFrameMsg, RobotRtsiMsg, SeqMetaMsg
|
||||||
from flandre.utils.RfFile import RfSequenceMeta
|
from flandre.utils.RfMeta import RfFrameMeta, RfSequenceMeta
|
||||||
from flandre.utils.RfMeta import RfFrameMeta
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Recorder(Node):
|
class Recorder(Node):
|
||||||
topics = [SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, RfFrameWithMetaMsg, RequestRfFrameMsg,
|
topics = [SetSeqMetaMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, RequestRfFrameMsg,
|
||||||
ImageArgMsg, RobotRtsiMsg]
|
ImageArgMsg, RobotRtsiMsg]
|
||||||
|
|
||||||
def __init__(self, level=logging.INFO):
|
def __init__(self, level=logging.INFO):
|
||||||
@ -34,12 +33,13 @@ class Recorder(Node):
|
|||||||
)
|
)
|
||||||
device_socket = self.context.socket(zmq.PULL)
|
device_socket = self.context.socket(zmq.PULL)
|
||||||
self.c.poller.register(device_socket, zmq.POLLIN)
|
self.c.poller.register(device_socket, zmq.POLLIN)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
socks = dict(self.c.poller.poll())
|
socks = dict(self.c.poller.poll())
|
||||||
for k in socks:
|
for k in socks:
|
||||||
if k == device_socket:
|
if k == device_socket:
|
||||||
buffer = device_socket.recv()
|
buffer = device_socket.recv()
|
||||||
_, sequence_id, encoder = struct.unpack_from('=iqi', buffer)
|
_, sequence_id, encoder = struct.unpack_from('=IQi', buffer)
|
||||||
s = buffer[4 + 8 + 4:]
|
s = buffer[4 + 8 + 4:]
|
||||||
if self.seq_meta_live is not None and s.__len__() // 2 == np.prod(self.seq_meta_live.shape):
|
if self.seq_meta_live is not None and s.__len__() // 2 == np.prod(self.seq_meta_live.shape):
|
||||||
(self.record_path / RfFrameMeta(
|
(self.record_path / RfFrameMeta(
|
||||||
@ -64,7 +64,7 @@ class Recorder(Node):
|
|||||||
if isinstance(msg, KillMsg):
|
if isinstance(msg, KillMsg):
|
||||||
if msg.name == '':
|
if msg.name == '':
|
||||||
return
|
return
|
||||||
elif isinstance(msg, SetSeqMetaMsg):
|
elif isinstance(msg, SeqMetaMsg):
|
||||||
match msg.target:
|
match msg.target:
|
||||||
case 'live':
|
case 'live':
|
||||||
self.seq_meta_live = RfSequenceMeta.from_name(msg.name)
|
self.seq_meta_live = RfSequenceMeta.from_name(msg.name)
|
||||||
|
|||||||
@ -131,6 +131,8 @@ class RfMat:
|
|||||||
seq_meta = frame.seq_meta
|
seq_meta = frame.seq_meta
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
if seq_meta.prod() != frame.__bytes__().__len__() // 2:
|
||||||
|
return None
|
||||||
m = np.frombuffer(frame.__bytes__(), dtype=np.int16).reshape(seq_meta.shape).copy()
|
m = np.frombuffer(frame.__bytes__(), dtype=np.int16).reshape(seq_meta.shape).copy()
|
||||||
if device == 'gpu':
|
if device == 'gpu':
|
||||||
m = cp.asarray(m)
|
m = cp.asarray(m)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user