test real

This commit is contained in:
remilia 2025-04-15 21:18:04 +08:00
parent 6308cc5dc2
commit 7d10eba483
22 changed files with 357 additions and 73 deletions

View File

@ -0,0 +1,145 @@
[Root]
VersionDriverOEMPA=1.3.0.1
CycleCount=1
EnableFMC=1
FMCElementStart=0
FMCElementStop=255
FMCElementStep=1
DisableUSB3=1
AscanBitSize=14Bits
Enable256=0
SWEncoder1Resolution=1
TriggerMode=Internal
Encoder1A=DigitalInput01
Encoder1B=DigitalInput02
Encoder1Type=Quadrature4Edges
RequestIO=OnCycleOnly
[Cycle:0]
GainDigital=0.000000 dB
BeamCorrection=0.0 dB
Start=0.000000 us
Range=100.000000 us
TimeSlot=4169.900000 us
PointFactor=2
CompressionType=Decimation
Rectification=Signed
FilterIndex=0
GainAnalog=40.000000 dB
GateCount=0
[Cycle:0\Pulser]
WedgeDelay=0.0 us
Element.count=256
Element_0=0;1;2;3;4;5;6;7
Element_8=8;9;10;11;12;13;14;15
Element_16=16;17;18;19;20;21;22;23
Element_24=24;25;26;27;28;29;30;31
Element_32=32;33;34;35;36;37;38;39
Element_40=40;41;42;43;44;45;46;47
Element_48=48;49;50;51;52;53;54;55
Element_56=56;57;58;59;60;61;62;63
Element_64=64;65;66;67;68;69;70;71
Element_72=72;73;74;75;76;77;78;79
Element_80=80;81;82;83;84;85;86;87
Element_88=88;89;90;91;92;93;94;95
Element_96=96;97;98;99;100;101;102;103
Element_104=104;105;106;107;108;109;110;111
Element_112=112;113;114;115;116;117;118;119
Element_120=120;121;122;123;124;125;126;127
Element_128=128;129;130;131;132;133;134;135
Element_136=136;137;138;139;140;141;142;143
Element_144=144;145;146;147;148;149;150;151
Element_152=152;153;154;155;156;157;158;159
Element_160=160;161;162;163;164;165;166;167
Element_168=168;169;170;171;172;173;174;175
Element_176=176;177;178;179;180;181;182;183
Element_184=184;185;186;187;188;189;190;191
Element_192=192;193;194;195;196;197;198;199
Element_200=200;201;202;203;204;205;206;207
Element_208=208;209;210;211;212;213;214;215
Element_216=216;217;218;219;220;221;222;223
Element_224=224;225;226;227;228;229;230;231
Element_232=232;233;234;235;236;237;238;239
Element_240=240;241;242;243;244;245;246;247
Element_248=248;249;250;251;252;253;254;255
Delay.count=256;1
Delay_0=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_8=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_16=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_24=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_32=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_40=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_48=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_56=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_64=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_72=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_80=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_88=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_96=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_104=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_112=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_120=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_128=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_136=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_144=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_152=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_160=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_168=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_176=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_184=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_192=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_200=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_208=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_216=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_224=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_232=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_240=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_248=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Width.count=256
Width_0=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_8=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_16=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_24=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_32=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_40=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_48=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_56=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_64=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_72=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_80=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_88=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_96=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_104=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_112=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_120=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_128=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_136=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_144=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_152=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_160=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_168=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_176=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_184=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_192=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_200=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_208=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_216=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_224=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_232=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_240=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_248=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
[Cycle:0\Receiver]
WedgeDelay=0.0 us
Element.count=1
Element=0
Focusing=Standard
Delay.count=1;1
Delay=0.0 us
Gain.count=1
Gain=0.0 dB
FocalTimeOfFlight.count=1
FocalTimeOfFlight=0.0 us

View File

@ -9,6 +9,13 @@ DisableUSB3=1
AscanBitSize=14Bits
Enable256=0
SWEncoder1Resolution=1
TriggerMode=Internal
Encoder1A=DigitalInput01
Encoder1B=DigitalInput02
Encoder1Type=Quadrature4Edges
RequestIO=OnCycleOnly
[Cycle:0]
GainDigital=0.000000 dB
BeamCorrection=0.0 dB

1
config/imaging/baby.json Normal file
View File

@ -0,0 +1 @@
{"t_end": 2068, "t_start": 1439, "v2": 1524, "dct_center": 1086, "dct_bandwidth": 915, "f_rows": 3944, "beta": 30}

View File

@ -0,0 +1 @@
{"t_end": 5002, "t_start": 3239, "v2": 1524, "dct_center": 798, "dct_bandwidth": 857, "f_rows": 4939, "beta": 30}

View File

@ -18,6 +18,7 @@ from flandre.nodes.Robot import Robot
from flandre.nodes.ImageFFMPEG import ImageFFMPEG
from flandre.nodes.ImageQt import ImageQt
from flandre.nodes.Midi import Midi
from flandre.nodes.Mi import Mi
from flandre.utils.Msg import KillMsg
from flandre.config import CONFIG_FOLDER
@ -33,6 +34,7 @@ class LaunchComponent(Enum):
ImageFFMPEG = ImageFFMPEG
ImageQt = ImageQt
Midi = Midi
Mi = Mi
def launch(arg: dict[LaunchComponent, dict]):

View File

@ -2,6 +2,7 @@ import logging
import time
import cupy as cp
import cv2
import zmq
from flandre.beamformer.das import gen_pwi
@ -10,7 +11,7 @@ from flandre.config import C
from flandre.nodes.Node import Node
from flandre.utils.Config import DeviceConfig
from flandre.utils.Msg import ImageArgMsg, Msg, RfFrameWithMetaMsg, BeamformerMsg, \
SeqMetaMsg, RfMatMsg
SeqMetaMsg, RfMatMsg, RGB888Msg
from flandre.utils.RfFile import RfSequenceMeta
from flandre.utils.RfMat import RfMat
@ -34,17 +35,22 @@ class Beamformer(Node):
return
d2 = (data
# .dct(80, 1500)
.dct_center(arg.dct_center, arg.dct_bandwidth)
.call(lambda m: m.astype(cp.int16))
.call(pwi)
.call(cp.asarray, order='C')
.argrelextrema()
.conv_guass(b=arg.beta * 0.01)
.crop_center(arg.t_start, arg.t_end)
# .dct_center(arg.dct_center, arg.dct_bandwidth)
# .call(lambda m: m.astype(cp.int16))
# .call(pwi)
# .call(cp.asarray, order='C')
# .argrelextrema()
# .conv_guass(b=arg.beta * 0.01)
# .crop_center(arg.t_start, arg.t_end)
.rotate90()
.cpu()
.grey()
.call(cv2.cvtColor, cv2.COLOR_GRAY2RGB)
# .pseudo_color()
)
# time.sleep(0.01)
self.send(RfMatMsg(d2))
# self.send(RGB888Msg(d2.__bytes__(), d2.w, d2.h))
def loop(self):
time.sleep(1)
@ -79,5 +85,8 @@ class Beamformer(Node):
last_f_rows = arg_msg.f_rows
dc = DeviceConfig(v2=arg_msg.v2, rows=arg_msg.f_rows)
pwi, _ = gen_pwi(direct_dist(dc), dc)
if seq_meta.mode == RfSequenceMeta.RfSequenceMode.PWI:
self.process_pwi(mat, arg_msg, pwi)
try:
if seq_meta.mode == RfSequenceMeta.RfSequenceMode.PWI:
self.process_pwi(mat, arg_msg, pwi)
except Exception as e:
logger.warning(e)

View File

@ -6,13 +6,14 @@ import zmq
from flandre.config import C
from flandre.nodes.Node import Node
from flandre.utils.Msg import BMMsg, SetWindowVisibleMsg
from flandre.utils.Msg import BMMsg, SetWindowVisibleMsg, RfMatMsg
from flandre.utils.RfMat import RfMat
logger = logging.getLogger(__name__)
class ImageCV(Node):
topics = [BMMsg, SetWindowVisibleMsg]
topics = [BMMsg, SetWindowVisibleMsg, RfMatMsg]
def __init__(self, level=logging.INFO):
super().__init__(level=level)
@ -29,6 +30,10 @@ class ImageCV(Node):
b = np.frombuffer(msg.data, dtype=np.uint8)
b = np.reshape(b, (C.video_height, C.video_width, 4))
self.buffer = b
elif isinstance(msg, RfMatMsg):
rfmat: RfMat = msg.rfmat
b = rfmat.pseudo_color().m
self.buffer = b
elif isinstance(msg, SetWindowVisibleMsg):
if msg.name == 'bscan' and msg.sender != 'cv':
self.show = msg.value

View File

@ -11,7 +11,7 @@ from flandre.config import C
from flandre.nodes.Node import Node
from flandre.pyqt.Image import Ui_MainWindow
from flandre.pyqt.ZMQReceiver import ZMQReceiver
from flandre.utils.Msg import KillMsg, Msg, BMMsg, RfMatMsg, KeyPressMsg
from flandre.utils.Msg import KillMsg, Msg, BMMsg, RfMatMsg, KeyPressMsg, RGB888Msg
from flandre.utils.RfMat import RfMat
@ -61,25 +61,16 @@ class Adv(QMainWindow, Ui_MainWindow):
h = msg.rfmat.h
d: RfMat = msg.rfmat
d2 = (d
.pseudo_color(cond=not self.grey)
.grey(cond=self.grey)
.resize((int(w * self.zoom), int(h * self.zoom)))
.watermark(cond=self.watermark)
)
w = d2.w
h = d2.h
if self.grey:
qImg = QImage(
d2.__bytes__(),
w, h, w,
QImage.Format.Format_Grayscale8
)
else:
qImg = QImage(
d2.__bytes__(),
w, h, 3 * w,
QImage.Format.Format_BGR888
)
qImg = QImage(
d2.__bytes__(),
w, h, 3 * w,
QImage.Format.Format_BGR888
)
self.g.setPixmap(QPixmap(qImg))
self.s.setSceneRect(0.0, 0.0, w, h)
if self.scale:
@ -88,6 +79,38 @@ class Adv(QMainWindow, Ui_MainWindow):
if self.need_fit:
self.graphicsView.fitInView(self.s.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
self.need_fit = False
# elif isinstance(msg, RGB888Msg):
# w = msg.w
# h = msg.h
# d: RfMat = msg.rfmat
# d2 = (d
# .resize((int(w * self.zoom), int(h * self.zoom)))
# .watermark(cond=self.watermark)
# )
# w = d2.w
# h = d2.h
# if self.grey:
# qImg = QImage(
# d2.__bytes__(),
# w, h, w,
# QImage.Format.Format_Grayscale8
# )
# else:
# qImg = QImage(
# d2.__bytes__(),
# w, h, 3 * w,
# QImage.Format.Format_BGR888
# )
# self.g.setPixmap(QPixmap(qImg))
# self.s.setSceneRect(0.0, 0.0, w, h)
# if self.scale:
# self.graphicsView.fitInView(self.s.sceneRect())
# else:
# if self.need_fit:
# self.graphicsView.fitInView(self.s.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
# self.need_fit = False
#
# RGB888Msg
class ImageQt(Node):

View File

@ -1,4 +1,5 @@
import logging
import time
from pathlib import Path
import zmq

View File

@ -89,7 +89,8 @@ class Adv(QMainWindow, Ui_MainWindow):
self.s_sid.valueChanged.connect(self.on_s_sid)
self.sp_sid.valueChanged.connect(self.on_sp_sid)
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
self.seq_meta: RfSequenceMeta | None = None
self.playback_seq_meta: RfSequenceMeta | None = None
self.live_seq_meta: RfSequenceMeta | None = None
# self.b_play_live.clicked.connect(self.on_play_live)
# self.b_play_playback.clicked.connect(self.on_play_playback)
@ -97,10 +98,6 @@ class Adv(QMainWindow, Ui_MainWindow):
self.record = False
self.device_connected = False
self.device_enabled = False
# self.b_device_enabled.clicked.connect(lambda: self.p.send(SetDeviceEnabledMsg(not self.device_enabled)))
# self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected)))
# self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta)
self.b_live_seq_apply.clicked.connect(self.on_seq_meta)
self.l_base.textChanged.connect(lambda e:
self.l_base.setStyleSheet("")
if Path(e).exists() else
@ -201,6 +198,10 @@ class Adv(QMainWindow, Ui_MainWindow):
base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__())
self.l_base.setText(Path(base).__str__())
@pyqtSlot()
def on_b_test1_clicked(self):
logger.info(f'test1 {self.arg}')
@pyqtSlot()
def on_b_base_clicked(self):
if Path(self.l_base.text()):
@ -242,6 +243,8 @@ class Adv(QMainWindow, Ui_MainWindow):
if b:
self.g_playback.setChecked(False)
self.p.send(SetPlayMode('live'))
if self.live_seq_meta is not None:
self.update_max(max(self.live_seq_meta.shape))
logger.info(f'set playmode live')
@pyqtSlot(bool)
@ -249,6 +252,8 @@ class Adv(QMainWindow, Ui_MainWindow):
if b:
self.g_live.setChecked(False)
self.p.send(SetPlayMode('playback'))
if self.playback_seq_meta is not None:
self.update_max(max(self.playback_seq_meta.shape))
logger.info(f'set playmode playback')
def on_device_disable(self):
@ -336,6 +341,19 @@ class Adv(QMainWindow, Ui_MainWindow):
else:
QMessageBox.warning(None, 'hint', 'Commit is empty!!')
def update_max(self, m):
self.s_t_start.setMaximum(m)
self.s_t_end.setMaximum(m)
self.s_dct_center.setMaximum(m)
self.s_dct_bandwidth.setMaximum(m)
self.s_f_rows.setMaximum(m)
self.sp_crop_center.setMaximum(m)
self.sp_crop_width.setMaximum(m)
self.sp_dct_center.setMaximum(m)
self.sp_dct_bandwidth.setMaximum(m)
self.sp_f_rows.setMaximum(m)
def on_zmq_event(self, msg: QByteArray):
try:
msg = Msg.decode_msg(msg.data())
@ -357,6 +375,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.sp_crop_center.setValue(msg.t_start)
self.sp_crop_width.setValue(msg.t_end)
self.sp_f_rows.setValue(msg.f_rows)
self.sp_v2.setValue(msg.v2)
self.sp_dct_center.setValue(msg.dct_center)
self.sp_dct_bandwidth.setValue(msg.dct_bandwidth)
@ -387,21 +406,15 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.value.__len__() > 0:
self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.currentText()))
elif isinstance(msg, SetSeqMetaMsg):
self.seq_meta = RfSequenceMeta.from_name(msg.name)
mmax_shape0 = max(self.seq_meta.shape)
self.s_t_start.setMaximum(mmax_shape0)
self.s_t_end.setMaximum(mmax_shape0)
self.s_dct_center.setMaximum(mmax_shape0)
self.s_dct_bandwidth.setMaximum(mmax_shape0)
self.s_f_rows.setMaximum(mmax_shape0)
self.sp_crop_center.setMaximum(mmax_shape0)
self.sp_crop_width.setMaximum(mmax_shape0)
self.sp_dct_center.setMaximum(mmax_shape0)
self.sp_dct_bandwidth.setMaximum(mmax_shape0)
self.sp_f_rows.setMaximum(mmax_shape0)
if msg.target == 'playback':
self.playback_seq_meta = RfSequenceMeta.from_name(msg.name)
self.update_max(max(self.playback_seq_meta.shape))
elif isinstance(msg, SeqMetaMsg):
if msg.target == 'live':
self.l_live_seq_name.setText(msg.name)
self.b_live_seq_apply.setEnabled(True)
self.live_seq_meta = RfSequenceMeta.from_name(msg.name)
self.update_max(max(self.live_seq_meta.shape))
elif isinstance(msg, DeviceConnectedMsg):
if msg.value:
self.set_device_connection(LinkStatus.GREEN)
@ -414,19 +427,7 @@ class Adv(QMainWindow, Ui_MainWindow):
else:
self.set_device_enable(LinkStatus.RED)
self.update_device_buttons()
elif isinstance(msg, SeqMetaMsg):
if msg.target == 'live':
self.l_live_seq_name.setText(msg.name)
self.b_live_seq_apply.setEnabled(True)
# elif isinstance(msg, DeviceOnlineMsg):
# if msg.value:
# # self.l_online.setStyleSheet("")
# # self.l_online.setText("Device Online")
# self.g_device.setEnabled(True)
# else:
# # self.l_online.setStyleSheet("background-color: pink;")
# # self.l_online.setText("Device Offline")
# self.g_device.setEnabled(False)
elif isinstance(msg, DeviceConfigListMsg):
for name, txt in msg.arr:
self.c_live_seq_name.addItem(name, txt)
@ -553,7 +554,8 @@ class Adv(QMainWindow, Ui_MainWindow):
self.p.send(SetSidMsg(v))
# @pyqtSlot(int)
def on_seq_meta(self):
@pyqtSlot()
def on_b_live_seq_apply_clicked(self):
v = self.c_live_seq_name.currentIndex()
name = self.c_live_seq_name.currentText()
if name != 'Empty':

View File

@ -74,6 +74,10 @@ class Mi(Node):
self.ping60enable = False
time.sleep(10)
def start(self):
self.device_py_req_socket.send(b'start')
self.device_py_req_socket.recv()
def loop(self):
if c1_connected() and check_socket(C.device_py_rep_socket):
self.device_py_req_socket.send(b'get_device_status')

View File

@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1238, 1017)
MainWindow.resize(1238, 1044)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
@ -367,6 +367,9 @@ class Ui_MainWindow(object):
self.checkBox = QtWidgets.QCheckBox(parent=self.centralwidget)
self.checkBox.setObjectName("checkBox")
self.horizontalLayout_6.addWidget(self.checkBox)
self.b_test1 = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_test1.setObjectName("b_test1")
self.horizontalLayout_6.addWidget(self.b_test1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_6.addItem(spacerItem1)
self.gridLayout.addLayout(self.horizontalLayout_6, 5, 0, 1, 2)
@ -486,6 +489,7 @@ class Ui_MainWindow(object):
self.label_7.setObjectName("label_7")
self.gridLayout_5.addWidget(self.label_7, 6, 0, 1, 1)
self.sp_crop_width = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_crop_width.setMaximum(9999)
self.sp_crop_width.setObjectName("sp_crop_width")
self.gridLayout_5.addWidget(self.sp_crop_width, 4, 2, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
@ -497,6 +501,7 @@ class Ui_MainWindow(object):
self.s_t_end.setObjectName("s_t_end")
self.gridLayout_5.addWidget(self.s_t_end, 4, 1, 1, 1)
self.sp_dct_bandwidth = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_dct_bandwidth.setMaximum(9999)
self.sp_dct_bandwidth.setObjectName("sp_dct_bandwidth")
self.gridLayout_5.addWidget(self.sp_dct_bandwidth, 7, 2, 1, 1)
self.label_5 = QtWidgets.QLabel(parent=self.centralwidget)
@ -524,9 +529,11 @@ class Ui_MainWindow(object):
self.sp_v2.setObjectName("sp_v2")
self.gridLayout_5.addWidget(self.sp_v2, 5, 2, 1, 1)
self.sp_dct_center = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_dct_center.setMaximum(9999)
self.sp_dct_center.setObjectName("sp_dct_center")
self.gridLayout_5.addWidget(self.sp_dct_center, 6, 2, 1, 1)
self.sp_f_rows = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_f_rows.setMaximum(7000)
self.sp_f_rows.setObjectName("sp_f_rows")
self.gridLayout_5.addWidget(self.sp_f_rows, 8, 2, 1, 1)
self.s_f_rows = QtWidgets.QSlider(parent=self.centralwidget)
@ -559,6 +566,7 @@ class Ui_MainWindow(object):
self.label_2.setObjectName("label_2")
self.gridLayout_5.addWidget(self.label_2, 0, 0, 1, 3)
self.sp_crop_center = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_crop_center.setMaximum(9999)
self.sp_crop_center.setObjectName("sp_crop_center")
self.gridLayout_5.addWidget(self.sp_crop_center, 3, 2, 1, 1)
self.s_beta = QtWidgets.QSlider(parent=self.centralwidget)
@ -572,6 +580,7 @@ class Ui_MainWindow(object):
self.label_35.setObjectName("label_35")
self.gridLayout_5.addWidget(self.label_35, 9, 0, 1, 1)
self.sp_beta = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_beta.setMaximum(9999)
self.sp_beta.setObjectName("sp_beta")
self.gridLayout_5.addWidget(self.sp_beta, 9, 2, 1, 1)
self.gridLayout.addLayout(self.gridLayout_5, 3, 0, 1, 1)
@ -643,6 +652,7 @@ class Ui_MainWindow(object):
self.l_probe_angle.setText(_translate("MainWindow", "TextLabel"))
self.cb_bscan.setText(_translate("MainWindow", "BSCAN"))
self.checkBox.setText(_translate("MainWindow", "FOCUS"))
self.b_test1.setText(_translate("MainWindow", "test1"))
self.label_23.setText(_translate("MainWindow", "Force"))
self.label_22.setText(_translate("MainWindow", "Position"))
self.label_19.setText(_translate("MainWindow", "6DOF Cobot"))

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>1238</width>
<height>1017</height>
<height>1044</height>
</rect>
</property>
<property name="windowTitle">
@ -681,6 +681,13 @@ border-radius: 7px;
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_test1">
<property name="text">
<string>test1</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
@ -910,7 +917,11 @@ border-radius: 7px;
</widget>
</item>
<item row="4" column="2">
<widget class="QSpinBox" name="sp_crop_width"/>
<widget class="QSpinBox" name="sp_crop_width">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="10" column="1">
<spacer name="verticalSpacer_2">
@ -939,7 +950,11 @@ border-radius: 7px;
</widget>
</item>
<item row="7" column="2">
<widget class="QSpinBox" name="sp_dct_bandwidth"/>
<widget class="QSpinBox" name="sp_dct_bandwidth">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
@ -987,10 +1002,18 @@ border-radius: 7px;
</widget>
</item>
<item row="6" column="2">
<widget class="QSpinBox" name="sp_dct_center"/>
<widget class="QSpinBox" name="sp_dct_center">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QSpinBox" name="sp_f_rows"/>
<widget class="QSpinBox" name="sp_f_rows">
<property name="maximum">
<number>7000</number>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QSlider" name="s_f_rows">
@ -1052,7 +1075,11 @@ border-radius: 7px;
</widget>
</item>
<item row="3" column="2">
<widget class="QSpinBox" name="sp_crop_center"/>
<widget class="QSpinBox" name="sp_crop_center">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QSlider" name="s_beta">
@ -1078,7 +1105,11 @@ border-radius: 7px;
</widget>
</item>
<item row="9" column="2">
<widget class="QSpinBox" name="sp_beta"/>
<widget class="QSpinBox" name="sp_beta">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
</layout>
</item>

View File

@ -53,6 +53,7 @@ class BG(Enum):
HeaderByteMsg = auto()
RfMatMsg = auto()
KeyPressMsg = auto()
RGB888Msg = auto()
class Msg:
@ -319,6 +320,19 @@ class RfFrameMsg(Msg):
)
class RGB888Msg(HeaderByteMsg):
def __init__(self, b: bytes, w: int, h: int):
self.w = w
self.h = h
super().__init__(dict(h=h, w=w), b)
@classmethod
def decode(cls, data) -> 'RGB888Msg':
msg = super(RGB888Msg, cls).decode(data)
return RGB888Msg(msg.data, msg.header['w'], msg.header['h'])
class RfMatMsg(HeaderByteMsg):
def __init__(self, rfmat: 'RfMat'):

View File

@ -237,11 +237,12 @@ class RfMat:
color2 = (128, 128, 128)
else:
raise NotImplementedError()
cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, 4, color1, 8)
cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, 4, color2, 4)
fontsize = 2
cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, fontsize, color1, 8)
cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, fontsize, color2, 4)
cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, 4, color1, 8)
cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, 4, color2, 4)
cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, fontsize, color1, 8)
cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, fontsize, color2, 4)
if canvas.shape.__len__() == 2:
ccp.m[canvas == 255] = 255

3
software.json Normal file
View File

@ -0,0 +1,3 @@
{
"base_dir": "/home/lambda/source/scarlet/flandre/@DS"
}

25
test/testdevicegui.py Normal file
View File

@ -0,0 +1,25 @@
import struct
import time
import cv2
import numpy as np
import zmq
from flandre.config import C
from flandre.nodes.Device import Device, DeviceCmd
from flandre.nodes.Mi import Mi
if __name__ == '__main__':
context = zmq.Context()
req_driver_socket = context.socket(zmq.REQ)
req_driver_socket.connect(C.live_rep_socket)
magic = 7355608
cmd = DeviceCmd.GetData
cv2.namedWindow("test", cv2.WINDOW_AUTOSIZE)
while True:
req_driver_socket.send(struct.pack('i', magic) + struct.pack('i', cmd.value))
b = req_driver_socket.recv()
arr = np.frombuffer(b, dtype=np.int16, offset=4 + 8 + 4).reshape((256, 5002))
cv2.imshow('test', arr)
cv2.waitKey(0)
# print(b.__len__())