2024-11-22 14:59:00 +08:00
|
|
|
import cv2
|
2024-11-21 11:39:52 +08:00
|
|
|
from PyQt5.QtCore import Qt
|
2024-11-22 14:59:00 +08:00
|
|
|
from PyQt5.QtGui import QPixmap, QImage
|
2024-11-21 11:39:52 +08:00
|
|
|
from PyQt5.QtWidgets import QDialog, QWidget, QVBoxLayout, QHBoxLayout, QGridLayout, QScrollArea, QPushButton, \
|
2024-11-22 18:09:21 +08:00
|
|
|
QSpacerItem, QSizePolicy, QLabel, QMessageBox
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-22 18:09:21 +08:00
|
|
|
from components.image_framework import MSG_LOCATION_RECORD, MSG_DETECTION_RECORD
|
2024-11-21 11:39:52 +08:00
|
|
|
from core.context import AppContext
|
|
|
|
from widget.embed_item import EmbedItem
|
|
|
|
|
|
|
|
class TaskRunDialog(QDialog):
|
|
|
|
def __init__(self, param, parent=None):
|
|
|
|
super(TaskRunDialog, self).__init__(parent)
|
|
|
|
self.ratio = AppContext.get_ratio()
|
|
|
|
self.checkIndex = 1
|
|
|
|
self.param = param
|
|
|
|
self.setWindowFlags(Qt.WindowStaysOnTopHint)
|
|
|
|
self.setWindowFlags(Qt.FramelessWindowHint)
|
|
|
|
self.setWindowModality(Qt.ApplicationModal)
|
|
|
|
self.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
|
self.setWindowTitle("检测窗口")
|
2024-11-24 01:28:21 +08:00
|
|
|
# self.showFullScreen()
|
2024-11-21 11:39:52 +08:00
|
|
|
|
|
|
|
self.bim_widget = None
|
|
|
|
self.check_widget = None
|
|
|
|
self.embed_widgets = []
|
|
|
|
|
2024-11-25 11:58:46 +08:00
|
|
|
# 广角镜头预览区
|
|
|
|
self.view_widget = None
|
2024-11-22 14:59:00 +08:00
|
|
|
self.view_label = None
|
|
|
|
self.picture_label = None
|
|
|
|
|
2024-11-21 11:39:52 +08:00
|
|
|
self.start_adjust_button = None
|
|
|
|
self.start_check_button = None
|
|
|
|
self.stop_check_button = None
|
|
|
|
self.stop_task_button = None
|
|
|
|
|
|
|
|
self.init_ui()
|
2024-11-22 14:59:00 +08:00
|
|
|
self.init_event()
|
|
|
|
|
|
|
|
def init_event(self):
|
|
|
|
AppContext.get_edge_context().get_component('image-framework').signals.on_image_detect_result.connect(
|
|
|
|
lambda data: self.image_result(data))
|
|
|
|
|
|
|
|
def image_result(self, msg):
|
2024-11-25 11:58:46 +08:00
|
|
|
qt_image = None
|
|
|
|
if msg.im2D is not None:
|
|
|
|
rgb_frame = cv2.cvtColor(msg.im2D, cv2.COLOR_BGR2RGB)
|
|
|
|
height, width, channels = rgb_frame.shape
|
|
|
|
bytes_per_line = channels * width
|
|
|
|
qt_image = QImage(rgb_frame.data, width, height, bytes_per_line, QImage.Format_RGB888)
|
|
|
|
|
2024-11-22 14:59:00 +08:00
|
|
|
if msg.msg_type == MSG_LOCATION_RECORD:
|
2024-11-25 11:58:46 +08:00
|
|
|
if qt_image is None:
|
2024-11-22 18:09:21 +08:00
|
|
|
return
|
|
|
|
try:
|
2024-11-25 11:58:46 +08:00
|
|
|
view_pixmap = QPixmap.fromImage(qt_image)
|
|
|
|
sc = view_pixmap.height() / 450
|
|
|
|
self.view_label.setFixedWidth(view_pixmap.width() / sc)
|
|
|
|
self.view_label.setPixmap(view_pixmap)
|
|
|
|
self.view_label.setGeometry((self.view_widget.width() - self.view_label.width()) / 2, 0, self.view_label.width(), self.view_label.height())
|
2024-11-22 18:09:21 +08:00
|
|
|
except Exception as e:
|
|
|
|
dd = 0
|
|
|
|
elif msg.msg_type == MSG_DETECTION_RECORD:
|
|
|
|
if msg.record.code < 0:
|
|
|
|
QMessageBox.warning(self, '错误信息', msg.record.errorInfo.decode('utf-8'))
|
2024-11-25 11:58:46 +08:00
|
|
|
self.set_button_default()
|
|
|
|
AppContext.get_edge_context().get_component('image-framework').start_location()
|
2024-11-22 18:09:21 +08:00
|
|
|
elif msg.record.code == 1008:
|
|
|
|
self.start_adjust_button.setEnabled(False)
|
|
|
|
self.start_check_button.setEnabled(True)
|
|
|
|
self.stop_check_button.setEnabled(True)
|
|
|
|
self.stop_task_button.setEnabled(False)
|
|
|
|
elif msg.record.code == 1012:
|
|
|
|
QMessageBox.warning(self, '成功信息', "检测结束")
|
|
|
|
self.set_button_default()
|
|
|
|
AppContext.get_edge_context().get_component('image-framework').start_location()
|
2024-11-25 11:58:46 +08:00
|
|
|
else:
|
|
|
|
dddd = 0
|
|
|
|
|
|
|
|
if qt_image is None:
|
|
|
|
return
|
|
|
|
try:
|
|
|
|
view_pixmap = QPixmap.fromImage(qt_image)
|
|
|
|
self.picture_label.setPixmap(view_pixmap)
|
|
|
|
except Exception as e:
|
|
|
|
dd = 0
|
2024-11-22 18:09:21 +08:00
|
|
|
else:
|
|
|
|
ddd = 0
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-22 18:09:21 +08:00
|
|
|
def showEvent(self, e):
|
|
|
|
AppContext.get_edge_context().get_component('image-framework').start_location()
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-22 10:21:44 +08:00
|
|
|
def init_ui(self):
|
2024-11-21 11:39:52 +08:00
|
|
|
# bim
|
|
|
|
self.bim_widget = QWidget()
|
|
|
|
self.bim_widget.setObjectName("bimWidget")
|
|
|
|
self.bim_widget.setFixedWidth(3000)
|
|
|
|
|
|
|
|
# 选择区
|
|
|
|
self.check_widget = QWidget(self.bim_widget)
|
|
|
|
self.check_widget.setObjectName("checkWidget")
|
|
|
|
self.check_widget.setFixedSize(160, 160)
|
|
|
|
self.check_widget.move(90, 230)
|
|
|
|
|
|
|
|
# 预埋件
|
|
|
|
self.embed_widgets = []
|
|
|
|
for item in self.param:
|
|
|
|
embed_item = EmbedItem(self.bim_widget)
|
|
|
|
embed_item.setObjectName(item["code"])
|
|
|
|
embed_item.setItemParam(item)
|
|
|
|
self.embed_widgets.append(embed_item)
|
|
|
|
|
|
|
|
map_widget = QWidget()
|
|
|
|
legend_widget = QWidget()
|
|
|
|
|
|
|
|
legend_layout = QHBoxLayout()
|
|
|
|
legend_layout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
legend_layout.setSpacing(0)
|
|
|
|
legend_widget.setLayout(legend_layout)
|
|
|
|
|
|
|
|
legend_check_widget = QWidget()
|
|
|
|
legend_check_widget.setObjectName("legendCheckWidget")
|
|
|
|
legend_std_widget = QWidget()
|
|
|
|
legend_std_widget.setObjectName("legendStdWidget")
|
|
|
|
legend_ok_widget = QWidget()
|
|
|
|
legend_ok_widget.setObjectName("legendOkWidget")
|
|
|
|
legend_ng_widget = QWidget()
|
|
|
|
legend_ng_widget.setObjectName("legendNgWidget")
|
|
|
|
legend_normal_widget = QWidget()
|
|
|
|
legend_normal_widget.setObjectName("legendNormalWidget")
|
|
|
|
|
|
|
|
legend_check_label = QLabel()
|
|
|
|
legend_check_label.setObjectName("legendCheckLabel")
|
|
|
|
legend_check_label.setText("检测区域")
|
|
|
|
legend_std_label = QLabel()
|
|
|
|
legend_std_label.setObjectName("legendStdLabel")
|
|
|
|
legend_std_label.setText("基准件")
|
|
|
|
legend_ok_label = QLabel()
|
|
|
|
legend_ok_label.setObjectName("legendOkLabel")
|
|
|
|
legend_ok_label.setText("合格件")
|
|
|
|
legend_ng_label = QLabel()
|
|
|
|
legend_ng_label.setObjectName("legendNgLabel")
|
|
|
|
legend_ng_label.setText("不合格件")
|
|
|
|
legend_normal_label = QLabel()
|
|
|
|
legend_normal_label.setObjectName("legendNormalLabel")
|
|
|
|
legend_normal_label.setText("待检测件")
|
|
|
|
|
|
|
|
legend_layout.addStretch(1)
|
|
|
|
legend_layout.addWidget(legend_check_widget)
|
|
|
|
legend_layout.addSpacing(5)
|
|
|
|
legend_layout.addWidget(legend_check_label)
|
|
|
|
legend_layout.addSpacing(40)
|
|
|
|
legend_layout.addWidget(legend_std_widget)
|
|
|
|
legend_layout.addSpacing(5)
|
|
|
|
legend_layout.addWidget(legend_std_label)
|
|
|
|
legend_layout.addSpacing(40)
|
|
|
|
legend_layout.addWidget(legend_ok_widget)
|
|
|
|
legend_layout.addSpacing(5)
|
|
|
|
legend_layout.addWidget(legend_ok_label)
|
|
|
|
legend_layout.addSpacing(40)
|
|
|
|
legend_layout.addWidget(legend_ng_widget)
|
|
|
|
legend_layout.addSpacing(5)
|
|
|
|
legend_layout.addWidget(legend_ng_label)
|
|
|
|
legend_layout.addSpacing(40)
|
|
|
|
legend_layout.addWidget(legend_normal_widget)
|
|
|
|
legend_layout.addSpacing(5)
|
|
|
|
legend_layout.addWidget(legend_normal_label)
|
|
|
|
legend_layout.addStretch(1)
|
|
|
|
|
|
|
|
content_widget = QWidget()
|
|
|
|
content_widget.setObjectName("contentWidget")
|
|
|
|
|
2024-11-22 14:59:00 +08:00
|
|
|
self.picture_label = QLabel()
|
|
|
|
self.picture_label.setObjectName("pictureWidget")
|
|
|
|
self.picture_label.setFixedWidth(450)
|
|
|
|
self.picture_label.setFixedHeight(450)
|
|
|
|
self.picture_label.setScaledContents(True)
|
2024-11-25 11:58:46 +08:00
|
|
|
# picture_pixmap = QPixmap("assets/img2.png")
|
|
|
|
# self.picture_label.setPixmap(picture_pixmap)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-25 11:58:46 +08:00
|
|
|
self.view_widget = QWidget()
|
|
|
|
self.view_widget.setObjectName("viewWidget")
|
|
|
|
self.view_widget.setFixedHeight(450)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-25 11:58:46 +08:00
|
|
|
self.view_label = QLabel(self.view_widget)
|
2024-11-22 14:59:00 +08:00
|
|
|
self.view_label.setObjectName("viewLabel")
|
|
|
|
self.view_label.setFixedHeight(450)
|
|
|
|
self.view_label.setScaledContents(True)
|
2024-11-25 11:58:46 +08:00
|
|
|
# view_pixmap = QPixmap("assets/img1.jpg")
|
|
|
|
# sc = view_pixmap.height() / 450
|
|
|
|
# self.view_label.setFixedWidth(view_pixmap.width() / sc)
|
|
|
|
# self.view_label.setPixmap(view_pixmap)
|
|
|
|
# self.view_label.setGeometry((view_widget.width() - self.view_label.width() / 2), 0, self.view_label.width(), self.view_label.height())
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-25 11:58:46 +08:00
|
|
|
view_check_widget = QWidget(self.view_widget)
|
2024-11-21 11:39:52 +08:00
|
|
|
view_check_widget.setObjectName("viewCheckWidget")
|
2024-11-22 14:59:00 +08:00
|
|
|
view_check_widget.setGeometry(self.view_label.geometry().x() + 145, 170, 240, 240)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
|
|
|
# view_widget = QWidget()
|
|
|
|
# view_widget.setObjectName("viewWidget")
|
|
|
|
# view_widget.setFixedWidth(1000)
|
|
|
|
# view_widget.setFixedHeight(450)
|
|
|
|
# picture_widget = QWidget()
|
|
|
|
# picture_widget.setObjectName("pictureWidget")
|
|
|
|
# picture_widget.setFixedHeight(450)
|
|
|
|
|
|
|
|
tool_widget = QWidget()
|
|
|
|
tool_widget.setObjectName("toolWidget")
|
|
|
|
tool_widget.setFixedWidth(150)
|
|
|
|
tool_widget.setFixedHeight(450)
|
|
|
|
|
|
|
|
tool_layout = QVBoxLayout()
|
|
|
|
tool_layout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
tool_layout.setSpacing(0)
|
|
|
|
|
|
|
|
self.start_adjust_button = QPushButton()
|
|
|
|
self.start_adjust_button.setObjectName("startAdjustButton")
|
|
|
|
self.start_adjust_button.setText("开始校准")
|
|
|
|
self.start_adjust_button.setFixedHeight(self.ratio * 42)
|
|
|
|
self.start_adjust_button.clicked.connect(self.start_adjust)
|
|
|
|
|
|
|
|
self.start_check_button = QPushButton()
|
|
|
|
self.start_check_button.setObjectName("startCheckButton")
|
|
|
|
self.start_check_button.setEnabled(False)
|
|
|
|
self.start_check_button.setText("开始检测")
|
|
|
|
self.start_check_button.setFixedHeight(self.ratio * 42)
|
|
|
|
self.start_check_button.clicked.connect(self.start_check)
|
|
|
|
|
2024-11-22 18:09:21 +08:00
|
|
|
self.stop_check_button = QPushButton()
|
|
|
|
self.stop_check_button.setObjectName("stopCheckButton")
|
|
|
|
self.stop_check_button.setEnabled(False)
|
|
|
|
self.stop_check_button.setText("停止检测")
|
|
|
|
self.stop_check_button.setFixedHeight(self.ratio * 42)
|
|
|
|
self.stop_check_button.clicked.connect(self.stop_check)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
|
|
|
self.stop_task_button = QPushButton()
|
|
|
|
self.stop_task_button.setObjectName("stopTaskButton")
|
|
|
|
self.stop_task_button.setText("结束任务")
|
|
|
|
self.stop_task_button.setFixedHeight(self.ratio * 42)
|
2024-11-22 18:09:21 +08:00
|
|
|
self.stop_task_button.clicked.connect(self.stop_task)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
|
|
|
tool_widget.setLayout(tool_layout)
|
|
|
|
|
|
|
|
spacer = QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding)
|
|
|
|
tool_layout.addItem(spacer)
|
|
|
|
tool_layout.addWidget(self.start_adjust_button)
|
|
|
|
tool_layout.addSpacing(20)
|
|
|
|
tool_layout.addWidget(self.start_check_button)
|
|
|
|
tool_layout.addSpacing(20)
|
|
|
|
tool_layout.addWidget(self.stop_check_button)
|
|
|
|
tool_layout.addSpacing(20)
|
|
|
|
tool_layout.addWidget(self.stop_task_button)
|
|
|
|
tool_layout.addSpacing(20)
|
|
|
|
|
|
|
|
content_layout = QHBoxLayout()
|
|
|
|
content_layout.setContentsMargins(0, 0, 0, 20)
|
|
|
|
content_layout.setSpacing(0)
|
2024-11-25 11:58:46 +08:00
|
|
|
content_layout.addWidget(self.view_widget)
|
2024-11-21 11:39:52 +08:00
|
|
|
content_layout.addSpacing(20)
|
2024-11-22 14:59:00 +08:00
|
|
|
content_layout.addWidget(self.picture_label)
|
2024-11-21 11:39:52 +08:00
|
|
|
content_layout.addSpacing(20)
|
|
|
|
content_layout.addWidget(tool_widget)
|
|
|
|
content_widget.setLayout(content_layout)
|
|
|
|
|
|
|
|
layout = QVBoxLayout()
|
|
|
|
layout.setContentsMargins(20, 20, 20, 20)
|
|
|
|
layout.setSpacing(0)
|
|
|
|
layout.addWidget(map_widget)
|
|
|
|
layout.addSpacing(5)
|
|
|
|
layout.addWidget(legend_widget)
|
|
|
|
layout.addSpacing(20)
|
|
|
|
layout.addWidget(content_widget)
|
|
|
|
self.setLayout(layout)
|
|
|
|
|
|
|
|
map_area = QScrollArea()
|
|
|
|
map_area.setObjectName("mapArea")
|
|
|
|
map_area.setWidgetResizable(True)
|
|
|
|
map_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
|
|
|
|
map_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
|
|
|
map_widget.setLayout(QGridLayout())
|
|
|
|
map_widget.layout().setContentsMargins(0, 0, 0, 0)
|
|
|
|
map_widget.layout().setSpacing(0)
|
|
|
|
map_widget.layout().addWidget(map_area)
|
|
|
|
map_area.setWidget(self.bim_widget)
|
|
|
|
|
2024-11-22 18:09:21 +08:00
|
|
|
self.set_button_default()
|
|
|
|
|
|
|
|
# 校准
|
2024-11-21 11:39:52 +08:00
|
|
|
def start_adjust(self):
|
|
|
|
self.start_adjust_button.setEnabled(False)
|
2024-11-22 18:09:21 +08:00
|
|
|
self.start_check_button.setEnabled(False)
|
|
|
|
self.stop_check_button.setEnabled(False)
|
|
|
|
self.stop_task_button.setEnabled(False)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
2024-11-22 18:09:21 +08:00
|
|
|
result = AppContext.get_edge_context().get_component('image-framework').start_adjust()
|
|
|
|
if result.code < 0:
|
|
|
|
self.set_button_default()
|
|
|
|
QMessageBox.warning(self, '校准启动失败', result.errorInfo)
|
2024-11-22 10:21:44 +08:00
|
|
|
|
2024-11-21 11:39:52 +08:00
|
|
|
def start_check(self):
|
|
|
|
self.start_adjust_button.setEnabled(False)
|
|
|
|
self.start_check_button.setEnabled(False)
|
2024-11-22 18:09:21 +08:00
|
|
|
self.stop_check_button.setEnabled(False)
|
|
|
|
self.stop_task_button.setEnabled(False)
|
|
|
|
|
|
|
|
result = AppContext.get_edge_context().get_component('image-framework').start_check()
|
|
|
|
if result.code < 0:
|
|
|
|
self.set_button_default()
|
|
|
|
QMessageBox.warning(self, '检测启动失败', result.errorInfo)
|
2024-11-21 11:39:52 +08:00
|
|
|
|
|
|
|
def stop_check(self):
|
2024-11-22 18:09:21 +08:00
|
|
|
self.start_adjust_button.setEnabled(False)
|
|
|
|
self.start_check_button.setEnabled(False)
|
|
|
|
self.stop_check_button.setEnabled(False)
|
|
|
|
self.stop_task_button.setEnabled(False)
|
|
|
|
result = AppContext.get_edge_context().get_component('image-framework').stop_check()
|
|
|
|
if result.code < 0:
|
|
|
|
self.set_button_default()
|
|
|
|
QMessageBox.warning(self, '检测停止失败', result.errorInfo)
|
|
|
|
|
|
|
|
def stop_task(self):
|
|
|
|
AppContext.get_edge_context().get_component('image-framework').stop_all()
|
|
|
|
self.reject()
|
|
|
|
|
|
|
|
def set_button_default(self):
|
2024-11-21 11:39:52 +08:00
|
|
|
self.start_adjust_button.setEnabled(True)
|
|
|
|
self.start_check_button.setEnabled(False)
|
2024-11-22 18:09:21 +08:00
|
|
|
self.stop_check_button.setEnabled(False)
|
|
|
|
self.stop_task_button.setEnabled(True)
|