class MainGUI(QWidget): def __init__(self): super().__init__() self.init_pipeline() self.init_UI() return def init_pipeline(self): self.pipeline = Pipeline() self.engine = 'EN' return def init_UI(self): self.setGeometry(0, 0, 0, 0) self.setStyleSheet('QWidget {background-color: #ffffff;}') self.setWindowIcon(QIcon('assets/logo.png')) self.setWindowTitle('Air-Writing Data Generator') self.btn_conn = QPushButton('Connect Camera') self.btn_conn.setMinimumSize(500, 40) self.btn_conn_style_0 = 'QPushButton {background-color: #00a86c; border: none; color: #ffffff; font-family: ubuntu, arial; font-size: 16px;}' self.btn_conn_style_1 = 'QPushButton {background-color: #ff6464; border: none; color: #ffffff; font-family: ubuntu, arial; font-size: 16px;}' self.btn_conn.setStyleSheet(self.btn_conn_style_0) self.cam_feed = QLabel() self.cam_feed.setMinimumSize(640, 480) self.cam_feed.setAlignment(Qt.AlignCenter) self.cam_feed.setFrameStyle(QFrame.StyledPanel) self.cam_feed.setStyleSheet('QLabel {background-color: #000000;}') h_box1 = QHBoxLayout() h_box1.addWidget(self.btn_conn) v_box1 = QVBoxLayout() v_box1.addLayout(h_box1) v_box1.addWidget(self.cam_feed) g_box0 = QGridLayout() g_box0.addLayout(v_box1, 0, 0, -1, 2) self.setLayout(g_box0) self.flg_conn = False self.btn_conn.clicked.connect(self.connect) return def moveWindowToCenter(self): window_rect = self.frameGeometry() screen_cent = QDesktopWidget().availableGeometry().center() window_rect.moveCenter(screen_cent) self.move(window_rect.topLeft()) return def connect(self): self.flg_conn = not self.flg_conn if self.flg_conn: self.btn_conn.setStyleSheet(self.btn_conn_style_1) self.btn_conn.setText('Disconnect Camera') self.video = VideoStream() self.timer = QTimer() self.timer.timeout.connect(self.update) self.timer.start(50) else: self.btn_conn.setStyleSheet(self.btn_conn_style_0) self.btn_conn.setText('Connect Camera') self.cam_feed.clear() self.timer.stop() self.video.clear() return def update(self): frame = self.video.getFrame(flip=1) if not frame is None: frame = self.pipeline.run_inference(frame, self.engine, True) frame = QImage(frame, frame.shape[1], frame.shape[0], frame.strides[0], QImage.Format_RGB888) self.cam_feed.setPixmap(QPixmap.fromImage(frame)) else: self.cam_feed.clear() return def closeEvent(self, event): if self.flg_conn: self.connect() return