-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
114 lines (94 loc) · 3.54 KB
/
app.py
File metadata and controls
114 lines (94 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import threading
import numpy as np
from toolbox.qt import qtbase
from toolbox.qt import QTaskCamera
from toolbox.cam3d.cam3d_base import Camera3DWrapper
from toolbox.cam3d.cam3d_base import Camera3DBase
from .ui.ui_form import Ui_DemoWindow
from . import q_appcfg
from loguru import logger
from toolbox.core.log import LogHelper
from toolbox.core.log import printc
from .bgtask.pc_viz import RealTimePointCloudViewer
class MainWindow(qtbase.QApp):
"""应用具体实现"""
# 定时器和线程名称
TH_CAM = "cam"
is_quit_confirm = 0 # 程序退出确认
is_keyboard_ctrl = 1 # 键盘控制开关
is_debug = 0
def __init__(self, parent = None):
ui = self.ui = Ui_DemoWindow()
super().__init__(ui, parent, q_appcfg)
self.pre_init()
self.init(ui_logger=self.ui.txt_log, logger=logger)
self.load_cam3d()
self.post_init()
def load_cam3d(self):
# 摄像头
zero_img = np.zeros((480, 640, 3), dtype=np.uint8)
self.zero_img = qtbase.QPixmap(qtbase.cv2qt(zero_img))
self.reset_viz()
from toolbox.cam3d import load_cam3d
# camtypes_for_S_mode = self.appcfg.get('camtypes_for_S_mode', [])
self.cam: Camera3DBase = load_cam3d(
self.APPCFG_DICT['camtype'], [],
is_start=1,
is_warmup=1)
cam3d_wrapper = Camera3DWrapper(self.cam)
self.robot_cam_th = QTaskCamera(cam3d_wrapper)
self.robot_cam_th.bind(on_data=self.get_obs)
self.add_th(self.TH_CAM, self.robot_cam_th, 1)
# 点云可视化
self.pc_viz_widget = RealTimePointCloudViewer(self.cam)
self.replace_widget(self.ui.wd_bottom, self.pc_viz_widget)
def post_init(self):
self.set_theme("blue", 0)
self.bind_clicked(self.ui.btn_run, self.play)
self.bind_clicked(self.ui.btn_stop, self.stop_play)
self.add_log("程序初始化完成", color="green")
self.pc_viz_widget.update_point_cloud_bg()
def stop_play(self):
...
def play(self):
"""执行任务理解逻辑"""
self.pc_viz_widget.update_point_cloud_bg()
def reset_viz(self):
self.pix_left = self.zero_img
self.pix_right = self.zero_img
def paintEvent(self, event: qtbase.QtGui.QPaintEvent) -> None:
"""图像显示区支持自适应缩放"""
ui = self.ui
self._resize_and_scaled(ui.lb_left, ui.wd_left, self.pix_left)
self._resize_and_scaled(ui.lb_right, ui.wd_right, self.pix_right)
return super().paintEvent(event)
def close_ready(self):
...
def get_obs(self, frames: dict):
# if not frames['ret']: return
self.pix_left = qtbase.QPixmap(qtbase.cv2qt(frames['v1']))
self.pix_right = qtbase.QPixmap(qtbase.cv2qt(frames['v2']))
def keyPressEvent(self, event: qtbase.QKeyEvent):
super().keyPressEvent(event)
# print(self.pressed_keys)
# 热重载 ctrl+r
if self.is_keys_pressed([
qtbase.qt_keys.Key_Control,
qtbase.qt_keys.Key_R
]):
self.hot_reload()
def hot_reload(self):
self.pre_init()
self.init()
self.post_init()
self.add_log("hot reload")
def main():
LogHelper.init(q_appcfg.slot)
printc(f"{q_appcfg}")
import sys
qapp = qtbase.QApplication(sys.argv)
# 设置全局默认字体
qapp.setFont(qtbase.QFont("微软雅黑", 11))
mapp = MainWindow()
mapp.show()
sys.exit(qapp.exec())