Пример #1
0
class PlateInputTools:
    def __init__(self):
        super(PlateInputTools, self).__init__()
        self.sql_name = 'plateinfo'
        self.tools = SqlTools.Tools()
        self.tools.create_sql(self.sql_name, 'plateinfo')
        self.ui = QUiLoader().load('../Gui/PlateInput.ui')
        self.ui.pushButton.clicked.connect(self.input)
        self.ui.pushButton_2.clicked.connect(self.cancel)

    def input(self):
        plate = self.ui.lineEdit.text()
        check_plate = self.tools.check_plate(plate)
        if check_plate[0]:
            QMessageBox.information(self.ui, '提示!', '车牌已存在,请勿重复录入!')
            return
        else:
            res = self.tools.input_plate(plate)
            if res[0]:
                QMessageBox.information(self.ui, '提示!', res[1])
            else:
                QMessageBox.information(self.ui, '提示!', res[1])
                return

    def cancel(self):
        self.ui.close()
Пример #2
0
class MainWindow:
    def __init__(self):

        self.ui = QUiLoader().load('mainwindow.ui')
        self.ui.LoginButton.clicked.connect(self.Login)

    def Login(self):
        global is_t, is_s, username
        self.sql_s = "select stu_id,password from student"
        self.sql_t = "select t_id,password from teacher"
        cursor.execute(self.sql_s)
        self.result_s = cursor.fetchall()
        cursor.execute(self.sql_t)
        self.result_t = cursor.fetchall()
        self.result = self.result_s + self.result_t

        if (int(self.ui.Login_username.text()),
                self.ui.Login_password.text()) in self.result:
            username = self.ui.Login_username.text()
            if (int(self.ui.Login_username.text()),
                    self.ui.Login_password.text()) in self.result_t:
                is_t = 1
            else:
                is_s = 1
            self.ui.close()
        else:
            QMessageBox.warning(self.ui, '登录失败', '账号或密码输入错误,请重新输入')
class LoadModelWin():  # 加载模型的窗口
    def __init__(self):
        super().__init__()
        self.ui = QUiLoader().load('ui/load_model_win.ui')
        self.ui.browse_btn.clicked.connect(self.get_model_path)
        self.ui.ok_btn.clicked.connect(self.ok)
        self.ui.cancel_btn.clicked.connect(self.cancel)

    def get_model_path(self):
        FileDialog = QFileDialog(self.ui.browse_btn)  # 实例化
        FileDialog.setFileMode(QFileDialog.AnyFile)  # 可以打开任何文件
        model_file, _ = FileDialog.getOpenFileName(self.ui.browse_btn,
                                                   'open file', 'model/',
                                                   'model files (*.pth *.pt)')
        # 改变Text里面的文字
        self.ui.model_path_text.setPlainText(model_file)

    def ok(self):
        self.ui.close()
        model_path = self.ui.model_path_text.toPlainText()
        model_path_ms.ms.emit(model_path)

    def cancel(self):
        self.ui.close()
        QMessageBox.warning(self.ui.cancel_btn, "警告", "加载模型失败!",
                            QMessageBox.Yes)
Пример #4
0
class Student_Choose():
    def __init__(self):
        self.ui = QUiLoader().load('student_choose_class.ui')
        self.ui.exit.clicked.connect(self.close_window)
        self.ui.add.clicked.connect(self.add)
    def close_window(self):
        self.ui.close()
    def add(self):
        self.courseID = self.ui.courseID.text()
        print("adding "+self.courseID)
class NewUser(object):
    """
    新建受试者信息并存入数据库
    """
    def __init__(self):
        # 链接数据库
        self.conn = connect(host='localhost',
                            port=3306,
                            user='******',
                            password='******',
                            database='motor_ability_analysis',
                            charset='utf8')
        # 获得cursor对象
        self.cursor = self.conn.cursor()
        print("database motor_ability_analysis connected")
        # 调用ui文件
        self.ui = QUiLoader().load(
            'ui_design/new_user.ui')  # 路径用/,以免被认成转义,与系统用法不冲突

        # 槽函数,点击按钮调用对应函数
        self.ui.save_btn.clicked.connect(self.save)
        self.ui.cancel_btn.clicked.connect(self.cancel)

    # def __del__(self):
    #     self.cursor.close()
    #     self.conn.close()
    #     print("database motor_ability_analysis disconnected")

    def cancel(self):
        self.ui.close()

    def save(self):
        # 获取QLineEDit文本框内容
        info = (self.ui.le_name.text(), self.ui.cb_gender.currentText(),
                self.ui.le_year_of_birth.text(),
                self.ui.cb_handedness.currentText(), self.ui.le_height.text(),
                self.ui.le_weight.text(), self.ui.le_waistline.text(),
                self.ui.le_upperarm.text(), self.ui.le_forearm.text(),
                self.ui.le_thigh.text(), self.ui.le_shank.text())
        print(info)

        if len(info[2]) != 4:
            print(QMessageBox.about(self.ui, 'Warning', '生日仅能为4位年份'))
        else:
            for item in info:
                if not item:
                    print(QMessageBox.about(self.ui, 'Warning', '必要信息缺失'))
                    break

        # 保存至数据库
        sql = """INSERT INTO t_user (name, gender, year_of_birth, handedness, height, weight, waistline, 
        upperarm, forearm, thigh, shank) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
        self.cursor.execute(sql, info)
        self.conn.commit()
        self.ui.close()
Пример #6
0
class Teacher_Login():
    def __init__(self):
        self.ui = QUiLoader().load('teacher.ui')
        self.ui.exit.clicked.connect(self.close_window)
        self.ui.modify.clicked.connect(self.modify_score)
    def close_window(self):
        self.ui.close()

    def modify_score(self):
        self.modify_window = teacher_modify.Teacher_Modify()
        self.modify_window.ui.show()
Пример #7
0
class Student_Login():
    def __init__(self):
        self.ui = QUiLoader().load('student.ui')
        self.ui.exit.clicked.connect(self.close_window)
        self.ui.choose.clicked.connect(self.choose_class)

    def close_window(self):
        self.ui.close()

    def choose_class(self):
        self.choose_window = student_choose_class.Student_Choose()
        self.choose_window.ui.show()
Пример #8
0
class Teacher_Modify():
    def __init__(self):
        self.ui = QUiLoader().load('teacher_modify_score.ui')
        self.ui.ok.clicked.connect(self.close_window)

    def close_window(self):
        self.studentID = self.ui.studentID_line.text()
        self.courseID = self.ui.courseID_line.text()
        self.score = self.ui.score_line.text()
        print(self.studentID)
        print(self.courseID)
        print(self.score)
        self.ui.close()
class DividedWin():  #
    def __init__(self):
        super().__init__()
        self.ui = QUiLoader().load('ui/divided_win.ui')
        self.ui.ok_btn.clicked.connect(self.ok)
        self.ui.cancel_btn.clicked.connect(self.cancel)

    def ok(self):
        self.ui.close()

    def cancel(self):
        self.ui.close()
        QMessageBox.warning(self.ui.cancel_btn, "警告", "分割结果地址未得到!", QMessageBox.Yes)
Пример #10
0
class Signin:
    def __init__(self):
        self.__serial_number = wmi.WMI().Win32_Processor(
        )[0].ProcessorId.strip()
        self.ascii()
        self.vertify()

    def ascii(self):
        self.ascii_serial_number = [str(ord(i)) for i in self.__serial_number]
        for i in range(5, len(self.ascii_serial_number), 5):
            self.ascii_serial_number.insert(i, '-')
        self.ascii_serial_number = ''.join(self.ascii_serial_number)

    def vertify(self):
        with open('reg.dll', 'r') as f:
            self.str = f.read()

        if self.__serial_number == base64.b64decode(self.str).decode():
            self.login = Login()
        else:
            self.signin_ui()

    def signin_ui(self):
        self.ui = QUiLoader().load('UIs/Signin.ui')

        self.ui.label_2.setText(self.ascii_serial_number)
        self.ui.label_2.setTextInteractionFlags(self.ui.label_2.textInteractionFlags() \
                                                | Qt.TextSelectableByMouse)

        self.ui.button_1.clicked.connect(self.savecode)
        self.ui.button_2.clicked.connect(app.quit)
        self.ui.show()

    def savecode(self):
        self.code = self.ui.lineEdit.text()
        try:
            self.decode = base64.b64decode(self.code).decode()
        except Exception:
            self.decode = ''

        if self.__serial_number == self.decode:
            with open('reg.dll', 'w') as f:
                f.write(self.code)

            QMessageBox.about(self.ui, 'Message',
                              '\nSIGN UP SUCCEEDED, WELLCOME!')
            self.ui.close()
            self.login = Login()
        else:
            QMessageBox.about(self.ui, 'Message', '\nInvalid Code!')
Пример #11
0
class MessageBox:
    def __init__(self, message, title):
        self.ui = QUiLoader().load('src/client_ui/messageBox.ui')
        self.ui.message.setText(message)
        self.ui.setWindowTitle(title)
        self.ui.setWindowModality(Qt.ApplicationModal)
        self.ui.confirm.clicked.connect(self.handleConfirm)

    def handleConfirm(self):
        self.ui.close()
        pass

    def launch(self):
        self.ui.show()
        self.ui.exec_()
class StartDivideWin():  # 开始分割的窗口
    def __init__(self, path):
        super().__init__()
        self.model_path = path
        self.ui = QUiLoader().load('ui/start_divide_win.ui')
        self.ui.browse_btn_1.clicked.connect(self.get_data_path)
        self.ui.browse_btn_2.clicked.connect(self.get_result_path)
        self.ui.ok_btn.clicked.connect(self.ok)
        self.ui.cancel_btn.clicked.connect(self.cancel)

    def get_data_path(self):
        FileDialog = QFileDialog(self.ui.browse_btn_1)
        FileDialog.setFileMode(QFileDialog.AnyFile)
        type = self.ui.type_combo.currentText()
        data_file = ''
        if type=='image':
            data_file = QFileDialog.getExistingDirectory(self.ui.browse_btn_1, "选择图片文件夹", "./")
        elif type=='video':
            data_file = FileDialog.getOpenFileName(self.ui.browse_btn_1, '打开视频文件', './','video files (*.avi *.mp4)')
        elif type=='nii':
            data_file = FileDialog.getOpenFileName(self.ui.browse_btn_1, 'nii文件', './', 'video files (*.avi *.mp4)')
        self.ui.data_path_text.setPlainText(data_file)

    def get_result_path(self):
        FileDialog = QFileDialog(self.ui.browse_btn_2)
        FileDialog.setFileMode(QFileDialog.AnyFile)
        result_file = QFileDialog.getExistingDirectory(self.ui.browse_btn_2, "选择保存结果文件夹", "./")
        self.ui.result_path_text.setPlainText(result_file)

    def ok(self):
        seg = "binary"
        type = self.ui.type_combo.currentText()
        self.ui.close()
        data_path = self.ui.data_path_text.toPlainText()
        data_path_ms.ms.emit(data_path)
        result_path = self.ui.result_path_text.toPlainText()##保存的路径 不包含文件名
        aviname= time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
        result_path_ms.ms.emit(result_path+'/'+aviname+'.avi')##传送给主窗口展示的是包含文件名的
        self.ok_win = DividedWin()
        self.ok_win.ui.show()
        seg_image.main("binary", type, data_path, result_path, aviname)



    def cancel(self):
        self.ui.close()
        QMessageBox.warning(self.ui.cancel_btn, "警告", "未能成功开始分割!", QMessageBox.Yes)
Пример #13
0
class Admin_Login():
    def __init__(self):
        self.ui = QUiLoader().load('admin.ui')

        self.ui.modify.clicked.connect(self.modify)
        self.ui.add.clicked.connect(self.add)
        self.ui.remove.clicked.connect(self.remove)
        self.ui.exit.clicked.connect(self.close_window)
        self.ui.query_choose_score.clicked.connect(self.query_choose_score)
        self.ui.avg_score.clicked.connect(self.avg_score)

        self.ui.query_student.clicked.connect(self.query_student)
        self.ui.query_teacher.clicked.connect(self.query_teacher)
        self.ui.query_course.clicked.connect(self.query_course)

    def modify(self):
        self.modify_window = admin_modify.Admin_Modify()
        self.modify_window.ui.show()

    def add(self):
        self.add_window = admin_add.Admin_Add()
        self.add_window.ui.show()

    def remove(self):
        self.delete_window = admin_delete.Admin_Delete()
        self.delete_window.ui.show()

    def close_window(self):
        self.ui.close()

    def query_choose_score(self):
        self.query_choose_score_window = admin_query_choose_score.Admin_Choose_Score(
        )
        self.query_choose_score_window.ui.show()

    def avg_score(self):
        self.score_data_window = admin_score_data.Admin_Score_Data()
        self.score_data_window.ui.show()

    def query_student(self):
        pass

    def query_teacher(self):
        pass

    def query_course(self):
        pass
Пример #14
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # Caminho até o arquivo de interface.
        # path = QDir(__file__).currentPath()
        # ui_file = QDir(path).filePath('MainWindow.ui')
        ui_file = QDir(QDir(__file__).currentPath()).filePath('MainWindow.ui')

        self.ui = QUiLoader().load(ui_file, None)

        # Acessando o menu e conectando os métodos.
        action_sair_1 = self.ui.findChild(QObject, 'action_sair_1')
        action_sair_1.triggered.connect(self.close_app)

        action_sair_2 = self.ui.findChild(QObject, 'action_sair_2')
        action_sair_2.triggered.connect(self.close_app)

        action_sobre = self.ui.findChild(QObject, 'action_sobre')
        action_sobre.triggered.connect(self.about)

        self.ui.show()

    def close_app(self):
        self.ui.close()

    def about(self):
        icon = QIcon()
        icon.addPixmap(QPixmap('../../../images/icons/icon.png'))

        message_box = QMessageBox(parent=self)
        message_box.setWindowTitle('Título da caixa de texto')
        message_box.setWindowIcon(icon)
        message_box.setText(
            'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '
            'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim '
            'ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut '
            'aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit '
            'in voluptate velit esse cillum dolore eu fugiat nulla pariatur. '
            'Excepteur sint occaecat cupidatat non proident, sunt in culpa '
            'qui officia deserunt mollit anim id est laborum.')
        response = message_box.exec()
        message_box.close()
class DividingWin():
    def __init__(self):
        super().__init__()
        self.ui = QUiLoader().load('ui/dividing_win.ui')
        # self.print_run_log  # 不太清楚这么写对不对
        self.ui.mute_run_btn.clicked.connect(self.mute_run)
        self.ui.interrupt_btn.clicked.connect(self.interrupt)

    # def print_run_log(self):
    # 在ui的run_log中打印分割模型运行时候的时间输出或者别的运行输出

    def mute_run(self):  # 后台运行函数
        self.ui.close()
        # 这里需要一段代码,通过判断分割模型运行结束,才打开分割完成的提示窗口
        self.divided_win = DividedWin()
        self.divided_win.ui.show()

    def interrupt(self):
        self.ui.close()
        # 这里需要一段代码来中断分割模型
        QMessageBox.warning(self.ui.interrupt_btn, "警告", "分割被中断!",
                            QMessageBox.Yes)
Пример #16
0
class Login():

    with open('pds.pkl', 'rb') as f:
        __data = pickle.load(f)
    try:
        __username, __password = __data['PDS Manager'][0], __data[
            'PDS Manager'][1]
    except Exception:
        __username, __password = '', ''

    def __init__(self):
        self.ui = QUiLoader().load('UIs/login.ui')

        self.ui.button_1.clicked.connect(self.call_interface)
        self.ui.button_2.clicked.connect(app.quit)
        self.ui.show()

    def call_interface(self):
        username = self.ui.lineEdit_1.text()
        password = self.ui.lineEdit_2.text()
        if username == Login.__username and password == Login.__password:
            self.ui.close()
            self.interface = Interface()
Пример #17
0
class Admin_Modify():
    def __init__(self):
        self.ui = QUiLoader().load('admin_modify.ui')
        self.ui.exit.clicked.connect(self.close_window)
        self.ui.ok.clicked.connect(self.make_change)

    def close_window(self):
        self.ui.close()

    def make_change(self):
        self.column = self.ui.column_input.text()
        self.ID = self.ui.id_input.text()
        self.value = self.ui.value_input.text()

        if self.ui.radio_student.isChecked():
            self.modify_student(self.column, self.ID, self.value)

        elif self.ui.radio_teacher.isChecked():
            self.modify_teacher(self.column, self.ID, self.value)

        elif self.ui.radio_course.isChecked():
            self.modify_course(self.column, self.ID, self.value)

        elif self.ui.radio_choose.isChecked():
            self.modify_choose(self.column, self.ID, self.value)

    def modify_teacher(self, column, ID, value):
        pass

    def modify_student(self, column, ID, value):
        pass

    def modify_course(self, column, ID, value):
        pass

    def modify_choose(self, column, ID, value):
        pass
Пример #18
0
class Login_group:  #登录界面
    def __init__(self):
        self.ui = QUiLoader().load('ui/login.ui')
        #设置密码隐藏

        self.ui.lineEdit.setEchoMode(QLineEdit.Password)
        '''
        信号槽
        '''
        # 确认按键
        self.ui.pushButton_4.clicked.connect(self.check_user)
        # 取消按键
        self.ui.pushButton_3.clicked.connect(self.ui.close)

    def check_user(self):  #检查密码是否正确
        #获取用户名
        name = self.ui.comboBox_6.currentText()
        #获取密码
        password = int(self.ui.lineEdit.text())
        #获取真实密码
        real_password = Class_info.get_data("select `password` "
                                            "from `user` "
                                            "where `name`='%s'" % name)[0][0]
        #比较密码正确与否
        if password == real_password:  #如果密码正确的话
            #关闭当前窗口
            self.ui.close()
            #打开管理员窗口
            self.show_admin_ui()

        else:  #如果密码错误
            self.ui.label.setText('提示:密码错误')

    def show_admin_ui(self):  #显示登录界面
        self.group_window = Group_window()
        self.group_window.ui.exec_()
        pass
Пример #19
0
class Password:
    def __init__(self):
        self.ui = QUiLoader().load('recover_password.ui')
        self.ui.confirmButton.clicked.connect(self.Confirm)

    def Confirm(self):
        self.sql_s = "select stu_id,stu_tel from student"
        self.sql_t = "select t_id,t_tel from teacher"
        cursor.execute(self.sql_s)
        self.result_s = cursor.fetchall()
        cursor.execute(self.sql_t)
        self.result_t = cursor.fetchall()
        self.result = self.result_s + self.result_t
        self.is_t = 0
        self.is_s = 0

        if (int(self.ui.username.text()),
                int(self.ui.tel_number.text())) in self.result:
            if (int(self.ui.username.text()),
                    int(self.ui.tel_number.text())) in self.result_s:
                self.is_s = 1
            else:
                self.is_t = 1
            if self.ui.new_password.text() == self.ui.confirm_password.text():
                if self.is_s:
                    self.sql = "update student set password = '******' where stu_id = " + self.ui.username.text()
                if self.is_t:
                    self.sql = "update teacher set password = '******' where t_id = " + self.ui.username.text()
                cursor.execute(self.sql)
                self.ui.close()
            else:
                QMessageBox.warning(self.ui, '输入错误', '两次密码输入不一致')
        else:
            QMessageBox.warning(self.ui, '查无用户', '请检查您输入的账号和手机号是否正确')
Пример #20
0
class Login():
    def __init__(self):
        self.log = QUiLoader().load('Login1.ui')
        self.log.pushButton.clicked.connect(self.open_Main)
        self.log.pushButton_2.clicked.connect(self.closeW)

    def open_Main(self):
        user = self.log.lineEdit.text()
        passw = self.log.lineEdit_2.text()
        if user == 'user' and passw == '123':
            self.mw = News_Analysis()
            #self.mw.ui.setWindowOpacity(0.9)
            self.mw.ui.resize(1500, 900)
            self.mw.ui.setStyleSheet("#Form{border-image:url(2.png)}")
            self.mw.ui.show()
            self.closeW()
        else:
            Box = QMessageBox()
            Box.setWindowTitle('提示')
            Box.setText('请输入正确账号密码')
            Box.exec_()

    def closeW(self):
        self.log.close()
Пример #21
0
class SNR:
    def __init__(self):
        # 从文件中加载UI定义
        qfile1 = QFile("ui/cmos_snr.ui")
        qfile1.open(QFile.ReadOnly)
        qfile1.close()
        print("test snr")
        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load(qfile1)

        # cmos_snr button
        self.ui.pushButton_cmos_snr_snr.clicked.connect(self.handle_pushButton_cmos_snr_snr_clicked)
        self.ui.pushButton_cmos_snr_linearity.clicked.connect(self.handle_pushButton_cmos_snr_linearity_clicked)

        # cmos_snr lineEdit
        self.ui.lineEdit_cmos_snr_width.setText('1280')
        self.ui.lineEdit_cmos_snr_width.textChanged.connect(self.handle_lineEdit_cmos_snr_width_change)
        self.ui.lineEdit_cmos_snr_height.setText('1080')
        self.ui.lineEdit_cmos_snr_height.textChanged.connect(self.handle_lineEdit_cmos_snr_height_change)
        self.ui.lineEdit_cmos_snr_w_percent.setText('10')
        self.ui.lineEdit_cmos_snr_w_percent.textChanged.connect(self.handle_lineEdit_cmos_snr_w_percent_change)
        self.ui.lineEdit_cmos_snr_h_percent.setText('10')
        self.ui.lineEdit_cmos_snr_h_percent.textChanged.connect(self.handle_lineEdit_cmos_snr_h_percent_change)

        # cmos_snr comboBox
        self.ui.comboBox_cmos_snr_bitshift.currentIndexChanged.connect(self.handle_comboBox_cmos_snr_bitshift_change)
        self.ui.comboBox_cmos_snr_bitshift.addItems(['-4', '-8', '-2', '0', '2', '4', '8'])

        self.ui.comboBox_cmos_snr_dataformat.currentIndexChanged.connect(self.handle_comboBox_cmos_snr_dataformat_change)
        self.ui.comboBox_cmos_snr_dataformat.addItems(['ieee-le', 'ieee-be'])

        self.ui.comboBox_cmos_snr_cfa.currentIndexChanged.connect(self.handle_comboBox_cmos_snr_cfa_change)
        self.ui.comboBox_cmos_snr_cfa.addItems(['rggb', 'bggr', 'gbrg', 'grbg', 'gray', 'color'])

    # cmos_snr button
    def handle_pushButton_cmos_snr_snr_clicked(self, checked):
        print("cmos_snr_snr pushButton clicked", self)
        i = 0
        filePath = QFileDialog.getExistingDirectory(self.ui, "选择存储路径")
        for root, dirs, files in os.walk(filePath):
            for f in files:
                i = i + 1  # 统计文件夹内总共有几个文件
        print("i=", i)
        if i == 0:  # 没有加载文件夹
            return

        filename = [0] * i  # 初始化成员为i个的一个列表
        Rvalue = [0] * i
        RNoise = [0] * i
        R_SNR = [0] * i
        GRvalue = [0] * i
        GRNoise = [0] * i
        GR_SNR = [0] * i
        GBvalue = [0] * i
        GBNoise = [0] * i
        GB_SNR = [0] * i
        Bvalue = [0] * i
        BNoise = [0] * i
        B_SNR = [0] * i
        width = int(self.ui.lineEdit_cmos_snr_width.text())
        height = int(self.ui.lineEdit_cmos_snr_height.text())
        w_percent = int(self.ui.lineEdit_cmos_snr_w_percent.text()) / 100
        h_percent = int(self.ui.lineEdit_cmos_snr_h_percent.text()) / 100
        pattern = self.ui.comboBox_cmos_snr_cfa.currentText()
        dataformat = self.ui.comboBox_cmos_snr_dataformat.currentText()
        shift_bits = int(self.ui.comboBox_cmos_snr_bitshift.currentText())
        WidthBorder = round((1 - w_percent) * width / 4)
        HeightBorder = round((1 - h_percent) * height / 4)
        # print("WidthBorder:", WidthBorder, HeightBorder, (width / 2 - WidthBorder), (height / 2 - HeightBorder))
        i = 0
        for root, dirs, files in os.walk(filePath):
            for f in files:
                filename[i] = os.path.join(root, f)  # 将文件名填写到列表中
                iamge = rawimage.read_plained_file(filename[i], "uint16", width, height, dataformat)
                R, GR, GB, B, G = rawimage.bayer_channel_separation(iamge, pattern)
                R = R[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                GR = GR[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                GB = GB[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                B = B[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                # print("shape:", np.shape(R))
                Rvalue[i] = np.mean(R)
                RNoise[i] = np.std(R)
                R_SNR[i] = Rvalue[i] / RNoise[i]
                GRvalue[i] = np.mean(GR)
                GRNoise[i] = np.std(GR)
                GR_SNR[i] = GRvalue[i] / GRNoise[i]
                GBvalue[i] = np.mean(GB)
                GBNoise[i] = np.std(GB)
                GB_SNR[i] = GBvalue[i] / GBNoise[i]
                Bvalue[i] = np.mean(B)
                BNoise[i] = np.std(B)
                B_SNR[i] = Bvalue[i] / BNoise[i]
                print(filename[i])
                i = i + 1
        print("len = ", len(filename))
        if i > 1:
            x = np.arange(0, i)
            plt.plot(x, R_SNR, "r", label="R")
            plt.plot(x, GR_SNR, "g", label="GR")
            plt.plot(x, GB_SNR, "c", label="GB")
            plt.plot(x, B_SNR, "b", label="B")
        else:
            plt.scatter(1, R_SNR[0], color="r", label="R", linewidth=3)
            plt.scatter(2, GR_SNR[0], color="g", label="GR", linewidth=3)
            plt.scatter(3, GB_SNR[0], color="c", label="GB", linewidth=3)
            plt.scatter(4, B_SNR[0], color="b", label="B", linewidth=3)

        plt.title("SNR")
        plt.legend(loc="lower right")
        plt.show()
        self.ui.close()

    def handle_pushButton_cmos_snr_linearity_clicked(self, checked):
        print("cmos_snr_linearity pushButton clicked", self)
        i = 0
        filePath = QFileDialog.getExistingDirectory(self.ui, "选择存储路径")
        for root, dirs, files in os.walk(filePath):
            for f in files:
                i = i + 1  # 统计文件夹内总共有几个文件
        print("i=", i)
        if i < 2:  # 少于2个文件,无法测试线性化程度
            QMessageBox.warning(
                self.ui,
                '文件太少',
                '文件夹内文件数目必须大于1个')
            return

        filename = [0] * i  # 初始化成员为i个的一个列表
        Rvalue = [0] * i
        GRvalue = [0] * i
        GBvalue = [0] * i
        Bvalue = [0] * i

        width = int(self.ui.lineEdit_cmos_snr_width.text())
        height = int(self.ui.lineEdit_cmos_snr_height.text())
        w_percent = int(self.ui.lineEdit_cmos_snr_w_percent.text()) / 100
        h_percent = int(self.ui.lineEdit_cmos_snr_h_percent.text()) / 100
        pattern = self.ui.comboBox_cmos_snr_cfa.currentText()
        dataformat = self.ui.comboBox_cmos_snr_dataformat.currentText()
        shift_bits = int(self.ui.comboBox_cmos_snr_bitshift.currentText())
        WidthBorder = round((1 - w_percent) * width / 4)
        HeightBorder = round((1 - h_percent) * height / 4)
        # print("WidthBorder:", WidthBorder, HeightBorder, (width / 2 - WidthBorder), (height / 2 - HeightBorder))
        i = 0
        for root, dirs, files in os.walk(filePath):
            for f in files:
                filename[i] = os.path.join(root, f)  # 将文件名填写到列表中
                iamge = rawimage.read_plained_file(filename[i], "uint16", width, height, dataformat)
                R, GR, GB, B, G = rawimage.bayer_channel_separation(iamge, pattern)
                R = R[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                GR = GR[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                GB = GB[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                B = B[HeightBorder:int(height / 2 - HeightBorder), WidthBorder:int(width / 2 - WidthBorder)]
                # print("shape:", np.shape(R))
                Rvalue[i] = np.mean(R)
                GRvalue[i] = np.mean(GR)
                GBvalue[i] = np.mean(GB)
                Bvalue[i] = np.mean(B)

                print(filename[i])
                i = i + 1
        print("len = ", len(filename))
        x = np.arange(0, i)
        plt.plot(x, Rvalue, "r", label="R")
        plt.plot(x, GRvalue, "g", label="GR")
        plt.plot(x, GBvalue, "c", label="GB")
        plt.plot(x, Bvalue, "b", label="B")

        plt.title("Linearity")
        plt.legend(loc="lower right")
        plt.show()
        self.ui.close()

    # cmos_snr lineEdit
    def handle_lineEdit_cmos_snr_width_change(self):
        print("currentText is ", self.ui.lineEdit_cmos_snr_width.text())

    def handle_lineEdit_cmos_snr_height_change(self):
        print("currentText is ", self.ui.lineEdit_cmos_snr_height.text())

    def handle_lineEdit_cmos_snr_w_percent_change(self):
        print("currentText is ", self.ui.lineEdit_cmos_snr_w_percent.text())

    def handle_lineEdit_cmos_snr_h_percent_change(self):
        print("currentText is ", self.ui.lineEdit_cmos_snr_h_percent.text())

    # cmos_snr comboBox
    def handle_comboBox_cmos_snr_bitshift_change(self):
        print("currentText is ", self.ui.comboBox_cmos_snr_bitshift.currentText())

    def handle_comboBox_cmos_snr_dataformat_change(self):
        print("currentText is ", self.ui.comboBox_cmos_snr_dataformat.currentText())

    def handle_comboBox_cmos_snr_cfa_change(self):
        print("currentText is ", self.ui.comboBox_cmos_snr_cfa.currentText())
Пример #22
0
class StartUp(QtCore.QObject):
    friendList = []
    chat_ = {}

    def __init__(self):
        super().__init__()
        self.username = ''
        qfile_ui = QFile("E:\\Py workshop\\grdKeShe\\UI\\login.ui")
        qfile_ui.open(QFile.ReadOnly)
        qfile_ui.close()
        self.ui = QUiLoader().load(qfile_ui)
        self.ui.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.ui.user.setScaledContents(True)
        self.ui.pass_pic.setScaledContents(True)
        self.ui.user.setPixmap(QPixmap('.\\static\\user.png'))
        self.ui.pass_pic.setPixmap(QPixmap('.\\static\\password.png'))
        self.ui.login.setStyleSheet('QPushButton {background-color: #1296DB; border: none; color: #FFFFFF}')
        self.ui.regist.setStyleSheet('QPushButton {color: #8A8A8A}')
        self.ui.useraccount.setStyleSheet('QLineEdit {background-color: #1296DB; border-width: 1 }')
        self.ui.show()
        self.ui.login.clicked.connect(self.userLogin)
        self.ui.regist.clicked.connect(self.showReg)
        self.ui.closebu.clicked.connect(self.stop)

        qfile_main = QFile("E:\\Py workshop\\grdKeShe\\UI\\mainwindow.ui")
        qfile_main.open(QFile.ReadOnly)
        qfile_main.close()
        self.ui_main = QUiLoader().load(qfile_main)
        self.ui_main.addFriend.clicked.connect(self.addFriend)
        self.ui_main.profile_photo.setPixmap(QPixmap('.\\static\\default.png'))
        self.ui_main.profile_photo.setScaledContents(True)
        self.ui_main.listWidget.itemClicked.connect(self.chat)
        self.ui_main.send.clicked.connect(self.sendmessage)
        self.ui_main.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.ui_main.closeB.clicked.connect(self.logout)

        ui_file = QFile("E:\\Py workshop\\grdKeShe\\UI\\searchNot.ui")
        ui_file.open(QFile.ReadOnly)
        ui_file.close()
        self.ui_notice = QUiLoader().load(ui_file)
        self.ui_notice.search.clicked.connect(self.search)

        reg_file = QFile("E:\\Py workshop\\grdKeShe\\UI\\Register.ui")
        reg_file.open(QFile.ReadOnly)
        reg_file.close()
        self.ui_reg = QUiLoader().load(reg_file)
        self.ui_reg.submit.clicked.connect(self.userReg)
        self.ui_reg.passconf.editingFinished.connect(self.checkPass)
        self.ui_reg.passconf_tip.setScaledContents(True)

    def userLogin(self):
        username = self.ui.useraccount.text()
        self.username = username
        password = self.ui.password.text()
        msg = slots.UserLogin(username, password)
        self.ui.notice.setText(msg)
        sleep(2)
        self.ui.notice.setText("")
        if msg == 'ok':

            ifexist = os.path.exists(str(username))
            if not ifexist:
                os.mkdir(str(username))
            msg = slots.ReceiveMessage(self.username)
            for i in msg:

                mea = json.loads(i)
                print(mea)
                slots.StoreChat(username, mea['sender'], i)
            self.friendList = slots.GetStatus(self.username)
            print(self.friendList)
            for user in self.friendList:
                self.ui_main.listWidget.addItem(user[0])
            self.ui_main.show()
            self.ui.close()

    def addFriend(self):
        self.ui_notice.show()
        self.ui_notice.exec_()

    def search(self):
        target = self.ui_notice.searchBox.text()
        msg = slots.AddFriend(self.username, target)
        self.ui_notice.resultNot.setText(msg)
        sleep(2)
        self.ui_notice.resultNot.setText("")

    def showReg(self):
        self.ui_reg.show()

    def userReg(self):
        msg = slots.UserReg(self.ui_reg.username.text(), self.ui_reg.password.text(), self.ui_reg.phone.text())
        if msg['code'] == 0:
            self.ui_reg.notice.setText(msg['msg'] + ',your id is:' + str(msg['id']))

    def checkPass(self):
        if self.ui_reg.password.text() != self.ui_reg.passconf.text():
            self.ui_reg.submit.setEnabled(False)
            self.ui_reg.passconf_tip.setPixmap(QPixmap('E:\\Py workshop\\grdKeShe\\static\\warning.png'))
        else:
            self.ui_reg.submit.setEnabled(True)
            self.ui_reg.passconf_tip.setPixmap(QPixmap('E:\\Py workshop\\grdKeShe\\static\\ok.png'))

    def chat(self):
        item = self.ui_main.listWidget.currentItem()
        self.ui_main.othername.setText(item.text())
        self.ui_main.chatview.clear()
        for i in self.friendList:
            if self.ui_main.othername.text() == i[0]:
                receive = i[1]
        msg = slots.loadChat(self.username, receive)
        for i in msg:
            j = json.loads(i)
            self.ui_main.chatview.addItem(item.text()+":"+j['message']+'['+j['time']+']')

    def sendmessage(self):
        receive = ''
        addr = ''
        message = self.ui_main.sendbox.toPlainText()
        for i in self.friendList:
            if self.ui_main.othername.text() == i[0]:
                receive = i[1]
                addr = i[2]
        code, me = slots.SendMessage(self.username, receive, addr, message)
        if code == 0:
            self.ui_main.chatview.addItem(
                '我:' + message + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']')
            slots.StoreChat(self.username, receive, me)
            self.ui_main.sendbox.clear()
        else:
            self.ui_main.chatview.addItem('发送失败' + me)

    def logout(self):
        slots.Logout(self.username)
        exit()

    def stop(self):
        exit()
Пример #23
0
class dengluUI(QWidget):
    def __init__(self, parent=None):
        #加载方法一
        # # 从文件中加载UI定义
        # # 从 UI 定义中动态 创建一个相应的窗口对象
        # # 注意:里面的控件对象也成为窗口对象的属性了
        # # 比如 self.ui.button , self.ui.textEdit
        #self.ui = QUiLoader().load("登陆.ui")

        # 加载方法二
        ui_denglu.open(QFile.ReadOnly)
        self.ui = QUiLoader().load(ui_denglu)

        # 加载方法三
        # super().__init__(parent)  # 调用父类构造函数,创建窗体
        # self.ui = Ui_Form()  # 创建UI对象
        # self.ui.setupUi(self)  # 构造UI界面

        # 美化界面,删除原生边框,设置窗口透明度
        # self.ui.setFixedSize(self.ui.width(), self.ui.height())  # 禁止拉伸窗口大小
        # self.ui.setWindowFlags(Qt.WindowMinimizeButtonHint)  # 禁止最大化按钮
        # self.ui.setWindowOpacity(0.95)  # 设置窗口透明度
        # self.ui.setAttribute(Qt.WA_TranslucentBackground)  # 设置窗口背景透明
        # self.ui.setWindowFlag(Qt.FramelessWindowHint)  # 隐藏边框
        # # self.setStyleSheet("background-image: url(media/background.png)")  # 设置窗口背景图片
        # self.ui.tabWidget.setEnabled(QLineEdit.Password) #移动窗口

        #提取数据库连接
        try:
            file = open('my.ini', 'r')
            L = []
            while True:
                d = file.readline()
                if not d:
                    file.close()  # 关闭文件
                    break
                cc = d.split('=')[1].strip()
                L.append(cc)
        except IOError:
            QMessageBox.about(self.ui, '提示信息', '打开文件失败')
        self.ui.fuwuqiID.setText(L[0])
        self.ui.fuwuduankou.setText(L[1])
        self.ui.fuwuqizhanghao.setText(L[2])
        self.ui.fuwuqimima.setText(L[3])
        self.ui.shujukuming.setText(L[4])

        #功能键
        self.ui.denglu_2.clicked.connect(self.denglu_clicked)
        self.ui.shezhi_2.clicked.connect(self.shezhi_clicked)
        self.ui.queren.clicked.connect(self.queren_clicked)



    def connect_db(self):
        try:
            # 建立数据库连接
            # db = pymysql.connect("localhost","root","080420","mysql",charset="utf8")
            db = pymysql.connect(
                host=self.ui.fuwuqiID.text(),  # 'localhost',  # "192.168.202.1""127.0.0.1"
                port=int(self.ui.fuwuduankou.text()),  # 3306
                user=self.ui.fuwuqizhanghao.text(),  # 'root'
                password=self.ui.fuwuqimima.text(),  # '080420'
                db=self.ui.shujukuming.text(),  # 'mysql'
                charset='utf8')  # 字体设置
            return db

        except pymysql.err.OperationalError:
            QMessageBox.about(self.ui, '提示信息', '连接数据库失败')
            exit()

    def denglu_clicked(self):
        zhanghao = self.ui.zhanghao.text()
        mima = self.ui.mima.text()
        db = self.connect_db()
        # 获取游标
        cur = db.cursor(pymysql.cursors.DictCursor)  # 使用字典类型输出
        sql_renyuan = "select * FROM 人员信息 WHERE 工号 = %s"
        rows = cur.execute(sql_renyuan, zhanghao)  # 条数
        results = cur.fetchall()  # 查询到的字典组数
        jieguo = results[rows - 1]  # 提取最后一个字典
        mm = jieguo['密码']  # 获取字典里的‘密码’对应值
        if mm == mima:
            QMessageBox.about(self.ui,'提示信息','登录成功')
            cur.close() # 关闭游标
            db.close() # 关闭连接

            self.main_window = zhujiemianUI()
            self.ui.close()
            self.main_window.ui.show()
            login_succeed = True
        else:
            QMessageBox.about(self.ui,'提示信息','用户名或密码错误')
            return

        # for (name, address) in results:
        #     print("%s家的地址是%s" % (name, address))

    def shezhi_clicked(self):
        self.ui.tabWidget.setCurrentIndex(1)

    def queren_clicked(self):
        self.connect_db()
        try:
            file = open('my.ini', 'w')
            file.write('host = '+self.ui.fuwuqiID.text())
            file.write('\n')
            file.write('port = '+ self.ui.fuwuduankou.text())
            file.write('\n')
            file.write('user = '******'\n')
            file.write('password = '******'\n')
            file.write('db = '+self.ui.shujukuming.text())
            file.write('\n')
            file.write('charset = utf8')
            file.write('\n')
            file.close()
        except IOError:
            print("保存失败")
        self.ui.tabWidget.setCurrentIndex(0)
Пример #24
0
class Stats:
    def __init__(self):
        # 从文件中加载UI定义
        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.window.button , self.window.textEdit
        self.window = QUiLoader().load('httptest.ui')
        # 设定第1列的宽度为 110像素
        self.window.tableWidget.setColumnWidth(0, 110)
        # 设定第2列的宽度为 170像素
        self.window.tableWidget.setColumnWidth(1, 170)
        # 让 表格控件宽度随着父窗口的缩放自动缩放
        self.window.tableWidget.horizontalHeader().setStretchLastSection(True)
        # 将发送按钮点击事件绑定到函数handsendrequest之上
        self.window.requestbutton.clicked.connect(self.handsendrequest)
        # 将清除按钮点击事件绑定到函数textBrowser之上
        self.window.clearbutton.clicked.connect(self.textbrowser)
        # 将添加消息头按钮点击事件绑定到函数showdialog之上
        self.window.addbutton.clicked.connect(self.showdialog)
        self.window.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        # 调用自定义函数一定要加上lambda!是个坑
        self.window.delete_2.clicked.connect(lambda: self.deleteheader())
        # 创建一个dialog对象,用于添加消息头使用,暂时不需要显示
        self.dialog = QUiLoader().load('dialog.ui')
        self.dialog.addheaderbutton.clicked.connect(lambda: self.addheader())

    # 点击按钮之后发送httprequest请求
    def handsendrequest(self):
        headers = {}
        # 获取消息头所有的数据,拼接成dict类型
        for temp_count in range(self.window.tableWidget.rowCount()):
            headers[self.window.tableWidget.item(temp_count, 0).text()] = self.window.tableWidget.item(temp_count, 1).text()
        if self.window.comboBox.currentText() == 'GET':
            data = json.loads(self.window.requestbody.toPlainText())
            # 使用多线程,防止主线程卡死的情况出现
            thread = Thread(target=self.threadgetsend, args=(self.window.urledit.text(), data, headers))
            thread.start()
        else:
            data = self.window.requestbody.toPlainText()
            thread = Thread(target=self.threadpostsend, args=(self.window.urledit.text(), data, headers))
            thread.start()

    # get方式参数名是params
    def threadgetsend(self, url, data, headers):
        res = requests.get(url, params=data, headers=headers)
        # 输出相关打印
        self.window.textBrowser.append('-----------------------发送GET请求----------------------')
        self.window.textBrowser.append('HTTP请求的返回状态:' + str(res.status_code))
        self.window.textBrowser.append('HTTP响应内容的Headers:' + str(res.headers))
        self.window.textBrowser.append('HTTP响应内容的字符串形式:' + str(res.text))
        self.window.textBrowser.append('HTTP响应正文的编码:' + str(res.encoding))

    # Post方式参数名为data
    def threadpostsend(self, url, data, headers):
        res = requests.post(url, data=data, headers=headers)
        self.window.textBrowser.append('-----------------------发送POST请求----------------------')
        self.window.textBrowser.append('HTTP请求的返回状态:' + str(res.status_code))
        self.window.textBrowser.append('HTTP响应内容的Headers:' + str(res.headers))
        self.window.textBrowser.append('HTTP响应内容的字符串形式:' + str(res.text))
        self.window.textBrowser.append('HTTP响应正文的编码:' + str(res.encoding))

    def textbrowser(self):
        # 清除textBrowser内的所有内容
        self.window.textBrowser.clear()

    def showdialog(self):
        # 显示dialog,并初始化两个输入框
        self.dialog.show()
        self.dialog.lineEdit.clear()
        self.dialog.lineEdit_2.clear()

    def addheader(self):
        # 创建新的一行之后  将之前dialog界面输入的两个值插入其中
        self.window.tableWidget.insertRow(0)
        self.window.tableWidget.setItem(0, 0, QTableWidgetItem(self.dialog.lineEdit.text()))
        self.window.tableWidget.setItem(0, 1, QTableWidgetItem(self.dialog.lineEdit_2.text()))
        self.dialog.close()

    def deleteheader(self):
        # 选中之后,执行删除对应行的操作
        if self.window.tableWidget.currentRow() != -1:
            self.window.tableWidget.removeRow(self.window.tableWidget.currentRow())
Пример #25
0
class ADBHelper(object):
    # 构造函数
    def __init__(self):
        # 加载UI文件
        self.ui = QUiLoader().load('adbwindow.ui')
        # 设置窗口背景
        palette = QPalette()
        pix = QPixmap('bg.jpg')
        #pix = pix.scaled(self.ui.width(), self.ui.height())
        palette.setBrush(self.ui.backgroundRole(), QBrush(pix))
        self.ui.setAutoFillBackground(True)
        self.ui.setPalette(palette)

        self.ui.setWindowIcon(QIcon('adb.png'))
        # self.ui.setWindowFlags(qcore.Qt.WindowStaysOnTopHint)

        # 绑定保存参数菜单项点击事件
        self.ui.save_action.triggered.connect(self.save_params)
        # 绑定加载参数菜单项点击事件
        self.ui.load_action.triggered.connect(self.load_params)
        # 绑定退出菜单项点击事件
        self.ui.exit_action.triggered.connect(self.exit)
        # 绑定断开连接菜单项点击事件
        self.ui.disconnect_action.triggered.connect(self.disconnect)
        # 绑定清空输出信息菜单项点击事件
        self.ui.clear_action.triggered.connect(self.clear)
        # 绑定坐标工具菜单项点击事件
        self.ui.tool_action.triggered.connect(self.tool)
        # 绑定关于菜单项点击事件
        self.ui.about_action.triggered.connect(self.about)

        # 绑定启动ADB按钮点击事件
        self.ui.openadb_pushButton.clicked.connect(self.open_adb)
        # 绑定连接按钮点击事件
        self.ui.connect_pushButton.clicked.connect(self.connect)
        # 绑定显示设备列表按钮点击事件
        self.ui.show_devices_pushButton.clicked.connect(self.show_devices)
        # 绑定开始点击按钮点击事件
        self.ui.tap_pushButton.clicked.connect(self.tap)
        # 绑定开始滑屏按钮点击事件
        self.ui.swipe_pushButton.clicked.connect(self.swipe)
        # 绑定停止按钮点击事件
        self.ui.stop_pushButton.clicked.connect(self.stop)
        # 绑定坐标工具按钮点击事件
        self.ui.tool_pushButton.clicked.connect(self.tool)

        # 限制数值范围
        self.ui.swipe_x1_min_spinBox.valueChanged.connect(self.x1_min)
        self.ui.swipe_x1_max_spinBox.valueChanged.connect(self.x1_max)
        self.ui.swipe_y1_min_spinBox.valueChanged.connect(self.y1_min)
        self.ui.swipe_y1_max_spinBox.valueChanged.connect(self.y1_max)
        self.ui.swipe_x2_min_spinBox.valueChanged.connect(self.x2_min)
        self.ui.swipe_x2_max_spinBox.valueChanged.connect(self.x2_max)
        self.ui.swipe_y2_min_spinBox.valueChanged.connect(self.y2_min)
        self.ui.swipe_y2_max_spinBox.valueChanged.connect(self.y2_max)

        # ADB工具
        self.adbtool = None
        # 连接标志
        self.connected = False
        # 坐标工具窗口
        self.tool_dialog = None
        # 截图文件
        self.screen_cap_file = None

    # 当前时间
    def nowtime(self):
        return str(
            _time.strftime('%Y-%m-%d %H:%M:%S', _time.localtime(_time.time())))

    # 输出信息
    def output_message(self, message):
        mess = "<font color='orange'>[</font><font color='blue'>"+self.nowtime() + \
            "</font><font color='orange'>]</font><font color='green'>"+message+"</font>"
        self.ui.output_textEdit.append(mess)
        # 移动光标到最底
        self.ui.output_textEdit.moveCursor(QTextCursor.End)

    # 输出结果和错误信息
    def output_result_error(self, result, error):
        # 输出信息
        self.output_message(result)
        # 判断错误信息是否为空
        if len(error.strip()) != 0:
            self.output_message(error)

    # 保存参数
    def save_params(self):
        # 弹出文件选择器
        filepath, filetype = QFileDialog.getSaveFileName(
            self.ui, "保存参数", os.getcwd(), "Json File (*.json)")

        # 判断
        if filepath != "":
            # IP地址
            ip = self.ui.ip_lineEdit.text()
            # 端口号
            port = self.ui.port_spinBox.value()
            # 模拟点击
            tap_x = self.ui.tap_x_spinBox.value()
            tap_y = self.ui.tap_y_spinBox.value()
            tap_times = self.ui.tap_times_spinBox.value()
            tap_interval = round(self.ui.tap_interval_doubleSpinBox.value(), 1)
            tap_random_interval = self.ui.tap_random_interval_checkBox.isChecked(
            )
            # 模拟滑屏
            swipe_x1_min = self.ui.swipe_x1_min_spinBox.value()
            swipe_x1_max = self.ui.swipe_x1_max_spinBox.value()
            swipe_y1_min = self.ui.swipe_y1_min_spinBox.value()
            swipe_y1_max = self.ui.swipe_y1_max_spinBox.value()
            swipe_x2_min = self.ui.swipe_x2_min_spinBox.value()
            swipe_x2_max = self.ui.swipe_x2_max_spinBox.value()
            swipe_y2_min = self.ui.swipe_y2_min_spinBox.value()
            swipe_y2_max = self.ui.swipe_y2_max_spinBox.value()
            swipe_times = self.ui.swipe_times_spinBox.value()
            # 浮点数取整
            swipe_interval = round(
                self.ui.swipe_interval_doubleSpinBox.value(), 1)
            swipe_random_interval = self.ui.swipe_random_interval_checkBox.isChecked(
            )
            swipe_60 = self.ui.swipe_60_checkBox.isChecked()
            # 组成字典
            params = {
                'ip': ip,
                'port': port,
                'tap_x': tap_x,
                'tap_y': tap_y,
                'tap_times': tap_times,
                'tap_interval': tap_interval,
                'tap_random_interval': tap_random_interval,
                'swipe_x1_min': swipe_x1_min,
                'swipe_x1_max': swipe_x1_max,
                'swipe_y1_min': swipe_y1_min,
                'swipe_y1_max': swipe_y1_max,
                'swipe_x2_min': swipe_x2_min,
                'swipe_x2_max': swipe_x2_max,
                'swipe_y2_min': swipe_y2_min,
                'swipe_y2_max': swipe_y2_max,
                'swipe_times': swipe_times,
                'swipe_interval': swipe_interval,
                'swipe_random_interval': swipe_random_interval,
                'swipe_60': swipe_60
            }
            # 写入文件
            if not filepath.endswith('.json'):
                filepath = filepath + '.json'
            with open(filepath, 'w', encoding='utf-8') as f:
                json.dump(params, f)
            # 输出信息
            self.output_message('保存参数完成!文件路径:' + os.path.abspath(filepath))

    # 加载参数
    def load_params(self):
        # 弹出文件选择器
        filepath, filetype = QFileDialog.getOpenFileName(
            self.ui, "请选择文件", os.getcwd(), "Json File (*.json)")
        # 判断
        if filepath != "":
            # 读取文件
            with open(filepath, 'r', encoding='utf-8') as f:
                params = json.load(f)
                # IP和端口
                self.ui.ip_lineEdit.setText(params['ip'])
                self.ui.port_spinBox.setValue(params['port'])
                # 模拟点击
                self.ui.tap_x_spinBox.setValue(params['tap_x'])
                self.ui.tap_y_spinBox.setValue(params['tap_y'])
                self.ui.tap_times_spinBox.setValue(params['tap_times'])
                self.ui.tap_interval_doubleSpinBox.setValue(
                    params['tap_interval'])
                self.ui.tap_random_interval_checkBox.setChecked(
                    params['tap_random_interval'])
                # 模拟滑屏
                self.ui.swipe_x1_max_spinBox.setValue(params['swipe_x1_max'])
                self.ui.swipe_x1_min_spinBox.setValue(params['swipe_x1_min'])
                self.ui.swipe_y1_max_spinBox.setValue(params['swipe_y1_max'])
                self.ui.swipe_y1_min_spinBox.setValue(params['swipe_y1_min'])
                self.ui.swipe_x2_max_spinBox.setValue(params['swipe_x2_max'])
                self.ui.swipe_x2_min_spinBox.setValue(params['swipe_x2_min'])
                self.ui.swipe_y2_max_spinBox.setValue(params['swipe_y2_max'])
                self.ui.swipe_y2_min_spinBox.setValue(params['swipe_y2_min'])
                self.ui.swipe_times_spinBox.setValue(params['swipe_times'])
                self.ui.swipe_interval_doubleSpinBox.setValue(
                    params['swipe_interval'])
                self.ui.swipe_random_interval_checkBox.setChecked(
                    params['swipe_random_interval'])
                self.ui.swipe_60_checkBox.setChecked(params['swipe_60'])
            # 输出信息
            self.output_message('加载参数完成!文件路径:' + os.path.abspath(filepath))

    # 退出
    def exit(self):
        # 保存日志
        # 断开连接
        self.disconnect()
        # 退出
        self.ui.close()

    # 断开连接
    def disconnect(self):
        # 停止
        self.stop()
        # 断开连接
        result, error = ADBTool().disconnect()
        # 输出信息
        self.output_result_error(result, error)
        self.connected = False
        self.output_message('已经断开连接')
        # 按钮可点
        self.ui.tap_pushButton.setEnabled(True)
        self.ui.swipe_pushButton.setEnabled(True)

    # 清空输出信息
    def clear(self):
        self.ui.output_textEdit.setText('')

    # 关于
    def about(self):
        # 显示弹窗
        QMessageBox.about(
            self.ui, '关于',
            'ADB助手\n© Copyright 2020\n作者:ordinary-student\n版本:v1.0.0')

    # 打开ADB
    def open_adb(self):
        # 获取IP地址
        ip = self.ui.ip_lineEdit.text()
        # IP校验
        if len(ip.strip()) == 0:
            self.ui.ip_lineEdit.setText('')
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', '请填写IP地址!')
            return
        # 获取端口号
        port = self.ui.port_spinBox.value()
        # 创建ADB工具
        adbtool = ADBTool(ip, port)
        # 启动ADB
        result, error = adbtool.open()
        # 输出信息
        self.output_result_error(result, error)
        # 判断是否已经启动
        if ('restarting' in result) and ('error' not in error):
            self.adbtool = adbtool
            self.output_message('ADB已经启动')

    # 连接设备
    def connect(self):
        # 判断
        if self.adbtool == None:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', 'ADB尚未启动!')
            return
        # 连接
        try:
            result, error = self.adbtool.connect()
            # 输出信息
            self.output_result_error(result, error)
            # 判断是否已经启动
            if ('connected' in result) and ('error' not in error):
                self.connected = True
                self.output_message('已经连接设备')
                self.adbtool.tap(700, 1860)
        except:
            self.output_message('设备连接失败')
            # 显示弹窗
            QMessageBox.information(
                self.ui, '提示',
                '设备连接失败!\n请检查设备和电脑是否处于同一局域网,\n检查设备的USB调试模式是否已经打开。\n若还是不行,请重启软件再尝试。'
            )
            return

    # 显示设备列表
    def show_devices(self):
        # 显示设备列表
        result, error = ADBTool().show_devices()
        # 输出信息
        self.output_result_error(result, error)

    # 开始点击
    def tap(self):
        # 判断ADB是否启动
        if self.adbtool == None:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', 'ADB尚未启动!')
            return
        # 判断是否连接
        if self.connected:
            tap_thread = Thread(target=self.tap2)
            tap_thread.start()
        else:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', '尚未连接设备!')
            return

    # 开始点击
    def tap2(self):
        # 按钮不可点
        self.ui.tap_pushButton.setEnabled(False)
        # 获取参数
        tap_x = self.ui.tap_x_spinBox.value()
        tap_y = self.ui.tap_y_spinBox.value()
        tap_times = self.ui.tap_times_spinBox.value()
        tap_interval = round(self.ui.tap_interval_doubleSpinBox.value(), 1)
        tap_random_interval = self.ui.tap_random_interval_checkBox.isChecked()
        if tap_random_interval:
            message = '点击坐标({},{})处,{}次,时间间隔随机'.format(tap_x, tap_y, tap_times)
        else:
            message = '点击坐标({},{})处,{}次,时间间隔{}秒'.format(
                tap_x, tap_y, tap_times, tap_interval)
        self.output_message(message)
        # 模拟点击
        if self.adbtool.continuous_tap(tap_x, tap_y, tap_times, tap_interval,
                                       tap_random_interval):
            self.output_message('模拟点击已完成')
        else:
            self.output_message('模拟点击已停止')
        # 按钮可点
        self.ui.tap_pushButton.setEnabled(True)

    # 开始滑屏
    def swipe(self):
        # 判断ADB是否启动
        if self.adbtool == None:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', 'ADB尚未启动!')
            return
        # 判断是否连接
        if self.connected:
            swipe_thread = Thread(target=self.swipe2)
            swipe_thread.start()
        else:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', '尚未连接设备!')
            return

    # 开始滑屏
    def swipe2(self):
        # 按钮不可点
        self.ui.swipe_pushButton.setEnabled(False)
        # 获取参数
        swipe_x1_min = self.ui.swipe_x1_min_spinBox.value()
        swipe_x1_max = self.ui.swipe_x1_max_spinBox.value()
        swipe_y1_min = self.ui.swipe_y1_min_spinBox.value()
        swipe_y1_max = self.ui.swipe_y1_max_spinBox.value()
        swipe_x2_min = self.ui.swipe_x2_min_spinBox.value()
        swipe_x2_max = self.ui.swipe_x2_max_spinBox.value()
        swipe_y2_min = self.ui.swipe_y2_min_spinBox.value()
        swipe_y2_max = self.ui.swipe_y2_max_spinBox.value()
        swipe_times = self.ui.swipe_times_spinBox.value()
        swipe_interval = round(self.ui.swipe_interval_doubleSpinBox.value(), 1)
        swipe_random_interval = self.ui.swipe_random_interval_checkBox.isChecked(
        )
        swipe_60 = self.ui.swipe_60_checkBox.isChecked()
        # 定时60秒
        if swipe_60:
            message = '从坐标({}~{},{}~{})滑到({}~{},{}~{})处,连续滑屏60秒,时间间隔{}秒'.format(
                swipe_x1_min, swipe_x1_max, swipe_y1_min, swipe_y1_max,
                swipe_x2_min, swipe_x2_max, swipe_y2_min, swipe_y2_max,
                swipe_interval)
            self.output_message(message)
            # 模拟连续滑屏60秒
            if self.adbtool.timing_swipe(
                (swipe_x1_min, swipe_x1_max), (swipe_y1_min, swipe_y1_max),
                (swipe_x2_min, swipe_x2_max), (swipe_y2_min, swipe_y2_max),
                    swipe_interval, swipe_random_interval):
                self.output_message('模拟滑屏已完成')
            else:
                self.output_message('模拟滑屏已停止')
        else:
            if swipe_random_interval:
                message = '从坐标({}~{},{}~{})滑到({}~{},{}~{})处,{}次,时间间隔随机'.format(
                    swipe_x1_min, swipe_x1_max, swipe_y1_min, swipe_y1_max,
                    swipe_x2_min, swipe_x2_max, swipe_y2_min, swipe_y2_max,
                    swipe_times)
            else:
                message = '从坐标({}~{},{}~{})滑到({}~{},{}~{})处,{}次,时间间隔{}秒'.format(
                    swipe_x1_min, swipe_x1_max, swipe_y1_min, swipe_y1_max,
                    swipe_x2_min, swipe_x2_max, swipe_y2_min, swipe_y2_max,
                    swipe_times, swipe_interval)
            self.output_message(message)
            # 模拟滑屏
            if self.adbtool.random_swipe(
                (swipe_x1_min, swipe_x1_max), (swipe_y1_min, swipe_y1_max),
                (swipe_x2_min, swipe_x2_max), (swipe_y2_min, swipe_y2_max),
                    swipe_times, swipe_interval, swipe_random_interval):
                self.output_message('模拟滑屏已完成')
            else:
                self.output_message('模拟滑屏已停止')
        # 按钮可点
        self.ui.swipe_pushButton.setEnabled(True)

    # 停止
    def stop(self):
        if self.adbtool != None:
            self.adbtool.stop()
            # 按钮可点
            self.ui.tap_pushButton.setEnabled(True)
            self.ui.swipe_pushButton.setEnabled(True)

    # 截图
    def screen_cap(self):
        if self.adbtool != None:
            # 截图
            photo_path = self.adbtool.screen_cap()
            # 获取图片到本地
            result, error = self.adbtool.pull_file(photo_path)
            self.output_result_error(result, error)
            # 判断
            if ('png' in result) and ('error' not in error):
                path = photo_path[(photo_path.rindex('/') + 1):]
                self.output_message('截图成功!图片路径:' + os.path.abspath(path))
                return os.path.abspath(path)
            else:
                self.output_message('截图失败!')
                return None
        else:
            return None

    # 坐标工具
    def tool(self):
        # 判断ADB是否启动
        if self.adbtool == None:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', 'ADB尚未启动!')
            return
        # 判断是否连接
        if self.connected:
            self.axis_tool()
        else:
            # 显示弹窗
            QMessageBox.information(self.ui, '提示', '尚未连接设备!')
            return

    # 坐标工具
    def axis_tool(self):
        w = 300
        h = 600
        # 判断
        if self.tool_dialog == None:
            # 创建坐标工具窗
            self.tool_dialog = QDialog(self.ui)
            self.tool_dialog.setWindowTitle('坐标工具')
            self.tool_dialog.resize(w, h)
        # 截图
        photo_path = self.screen_cap()
        if photo_path != None:
            if self.screen_cap_file != None:
                os.remove(self.screen_cap_file)
            self.screen_cap_file = photo_path
            pix = QPixmap(photo_path)
            w = pix.width()
            h = pix.height()
            # 设置面板大小
            self.tool_dialog.setFixedSize(w / 4, h / 4)
            # 调色板
            palette = QPalette()
            # 缩小图片
            pix = pix.scaled(w / 4, h / 4)
            palette.setBrush(self.tool_dialog.backgroundRole(), QBrush(pix))
            self.tool_dialog.setAutoFillBackground(True)
            self.tool_dialog.setPalette(palette)
            self.tool_dialog.setMouseTracking(True)
            # 绑定鼠标移动事件
            self.tool_dialog.mouseMoveEvent = self.mouse_move
        # 显示窗口
        self.tool_dialog.show()
        # 十字光标
        self.tool_dialog.setCursor(Qt.CrossCursor)

    # 鼠标移动
    def mouse_move(self, event):
        x = event.pos().x()
        y = event.pos().y()
        #print(x, y)
        self.tool_dialog.setWindowTitle('X:{},Y:{}'.format(x * 4, y * 4))

    # 限制数值范围
    def x1_min(self):
        if self.ui.swipe_x1_min_spinBox.value(
        ) >= self.ui.swipe_x1_max_spinBox.value():
            self.ui.swipe_x1_min_spinBox.setValue(
                self.ui.swipe_x1_max_spinBox.value())

    #
    def x1_max(self):
        if self.ui.swipe_x1_max_spinBox.value(
        ) <= self.ui.swipe_x1_min_spinBox.value():
            self.ui.swipe_x1_max_spinBox.setValue(
                self.ui.swipe_x1_min_spinBox.value())

    #
    def y1_min(self):
        if self.ui.swipe_y1_min_spinBox.value(
        ) >= self.ui.swipe_y1_max_spinBox.value():
            self.ui.swipe_y1_min_spinBox.setValue(
                self.ui.swipe_y1_max_spinBox.value())

    #
    def y1_max(self):
        if self.ui.swipe_y1_max_spinBox.value(
        ) <= self.ui.swipe_y1_min_spinBox.value():
            self.ui.swipe_y1_max_spinBox.setValue(
                self.ui.swipe_y1_min_spinBox.value())

    #
    def x2_min(self):
        if self.ui.swipe_x2_min_spinBox.value(
        ) >= self.ui.swipe_x2_max_spinBox.value():
            self.ui.swipe_x2_min_spinBox.setValue(
                self.ui.swipe_x2_max_spinBox.value())

    #
    def x2_max(self):
        if self.ui.swipe_x2_max_spinBox.value(
        ) <= self.ui.swipe_x2_min_spinBox.value():
            self.ui.swipe_x2_max_spinBox.setValue(
                self.ui.swipe_x2_min_spinBox.value())

    #
    def y2_min(self):
        if self.ui.swipe_y2_min_spinBox.value(
        ) >= self.ui.swipe_y2_max_spinBox.value():
            self.ui.swipe_y2_min_spinBox.setValue(
                self.ui.swipe_y2_max_spinBox.value())

    #
    def y2_max(self):
        if self.ui.swipe_y2_max_spinBox.value(
        ) <= self.ui.swipe_y2_min_spinBox.value():
            self.ui.swipe_y2_max_spinBox.setValue(
                self.ui.swipe_y2_min_spinBox.value())
Пример #26
0
class SerPortTools:
    def __init__(self):
        super(SerPortTools, self).__init__()
        self.is_open = False
        self.ser = serial.Serial()
        self.ui = QUiLoader().load('../Gui/SerPortSet.ui')

        #定义属性
        self.ser_port_name = ''
        self.port_bps = ''

        # 定义选择下拉框
        self.port_name_items = []
        self.bps_items = [
            '600', '1200', '2400', '4800', '9600', '19200', '38400'
        ]
        for i in range(1, 20):
            self.port_name_items.append('COM{}'.format(str(i)))
        self.ui.comboBox.addItems(self.port_name_items)
        self.ui.comboBox_2.addItems(self.bps_items)

        # 定义按钮
        self.ui.pushButton.clicked.connect(self.open_ser)
        self.ui.pushButton_2.clicked.connect(self.close_windows)

    def __del__(self):
        if self.ser.is_open:
            self.close_port()
            # self.is_open = self.ser.is_open

    def get_port_name_and_bps(self):
        self.ser_port_name = self.ui.comboBox.currentText()
        self.port_bps = self.ui.comboBox_2.currentText()

    def open_ser(self):
        self.get_port_name_and_bps()
        self.ser.baudrate = int(self.port_bps)
        self.ser.port = self.ser_port_name

        try:
            self.ser.open()
            self.is_open = self.ser.is_open
            QMessageBox.information(self.ui, '提示', '串口打开成功!')
        except Exception as e:
            QMessageBox.information(self.ui, '提示', '串口打开失败,请检查!原因{}'.format(e))
            return

    @staticmethod
    def list_ports():
        plist = serial.tools.list_ports.comports()
        return plist

    def send_mess(self, info):
        #hex_info = binascii.b2a_hex(info)
        self.ser.write(info)

    def recieve_mess(self):
        res = self.ser.read()
        return res

    def close_windows(self):
        self.ui.close()

    def close_port(self):
        self.ser.close()
        self.is_open = self.ser.is_open
class StartDivideWin():  # 开始分割的窗口
    def __init__(self, path):
        super().__init__()
        self.model_path = path
        self.ui = QUiLoader().load('ui/start_divide_win.ui')
        self.ui.browse_btn_1.clicked.connect(self.get_data_path)
        self.ui.browse_btn_2.clicked.connect(self.get_result_path)
        self.ui.ok_btn.clicked.connect(self.ok)
        self.ui.cancel_btn.clicked.connect(self.cancel)

    def get_data_path(self):
        FileDialog = QFileDialog(self.ui.browse_btn_1)
        FileDialog.setFileMode(QFileDialog.AnyFile)
        type = self.ui.type_combo.currentText()
        data_file = ''
        if type == 'image':
            data_file = QFileDialog.getExistingDirectory(
                self.ui.browse_btn_1, "选择图片文件夹", "./")
        elif type == 'video':
            data_file = FileDialog.getOpenFileName(
                self.ui.browse_btn_1, '打开视频文件', './',
                'video files (*.avi *.mp4)')
        elif type == 'nii':
            data_file = FileDialog.getOpenFileName(
                self.ui.browse_btn_1, 'nii文件', './',
                'video files (*.avi *.mp4)')
        self.ui.data_path_text.setPlainText(data_file)

    def get_result_path(self):
        FileDialog = QFileDialog(self.ui.browse_btn_2)
        FileDialog.setFileMode(QFileDialog.AnyFile)
        result_file = QFileDialog.getExistingDirectory(self.ui.browse_btn_2,
                                                       "选择保存结果文件夹", "./")
        self.ui.result_path_text.setPlainText(result_file)

    def ok(self):
        self.ui.close()
        data_path = self.ui.data_path_text.toPlainText()
        data_path_ms.ms.emit(data_path)
        result_path = self.ui.result_path_text.toPlainText()  ##保存的路径 不包含文件名
        self.aviname = time.strftime('%Y%m%d%H%M%S',
                                     time.localtime(time.time()))
        result_path_ms.ms.emit(result_path + '/' + self.aviname +
                               '.avi')  ##传送给主窗口展示的是包含文件名的
        print(result_path + '/' + self.aviname + '.avi')
        # self.ok_win = DividingWin()
        # self.ok_win.ui.show()
        self.ok_win = DividedWin()
        self.ok_win.ui.show()
        self.start_divide()

    def start_divide(self):
        class_color = [[0, 0, 0], [0, 255, 0], [0, 255, 255], [125, 255, 12]]
        t1 = time.time()
        # ********
        seg = "binary"  # 多类别分割,夹子为一类,铰链为一类,柄为一类

        if seg == "parts":
            model = parts_seg(in_channels=3, out_channels=4)
            # model_path = r"model_2_TDSNet.pt"  # 多类别分割模型地址
        elif seg == "binary":  # 二元分割,背景为一类手术器械为一类
            model = binary_seg(in_channels=3, out_channels=2)
            # model_path = r"model_0_TDSNet.pt"  # 二元分割模型地址
        else:
            model = r""
            model_path = r""

        model_path = self.model_path

        state = torch.load(str(model_path), map_location='cpu')
        state = {
            key.replace('module.', ''): value
            for key, value in state['model'].items()
        }
        model.load_state_dict(state)
        model.to(device)
        model.eval()
        # **********
        types = self.ui.type_combo.currentText()
        path = self.ui.data_path_text.toPlainText()  # 要分割的图像或者视频或者nii所在的文件夹地址
        path_save = self.ui.result_path_text.toPlainText()  # 要保存图像的地址
        names = file_name(path)  # path目录下所有文件名字
        factor = 2**5
        # ********

        if types == "image":
            for i, name in enumerate(names):
                t1 = time.time()
                path_single = os.path.join(path, name)
                image = cv2.imdecode(np.fromfile(path_single, dtype=np.uint8),
                                     -1)

                h, w, channel = image.shape

                h = math.ceil(
                    h / factor
                ) * factor // 2  # 向上取整,由于模型需要下采样5次图像会变成原来的2的5次方分之一,需要输入图像是2的5次方的倍数
                w = math.ceil(w / factor) * factor // 2
                # print(h, w)
                mask = np.zeros(shape=(h, w))

                image = cv2.resize(image, (w, h))
                image_ori = image
                # image=illum(image)
                image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
                aug = Compose([
                    # PadIfNeeded(min_height=h, min_width=w, border_mode=cv2.BORDER_CONSTANT, value=0, p=1.0),  # padding到2的5次方的倍数
                    Normalize(p=1)  # 归一化
                ])
                augmented = aug(image=image, mask=mask)
                image = augmented['image']
                image = img_to_tensor(image).unsqueeze(0).to(
                    device
                )  # torch.from_numpy(img).unsqueeze(0).unsqueeze(0).float().to(DEVICE)  # 图像转为tensor格式
                output = model(image)  # 预测
                seg_mask = (output[0].data.cpu().numpy().argmax(
                    axis=0)).astype(np.uint8)
                t2 = time.time()
                print("time:", (t2 - t1))

                full_mask = np.zeros((h, w, 3))
                for mask_label, sub_color in enumerate(class_color):
                    full_mask[seg_mask == mask_label, 0] = sub_color[2]
                    full_mask[seg_mask == mask_label, 1] = sub_color[1]
                    full_mask[seg_mask == mask_label, 2] = sub_color[0]
                # print(full_mask.max())
                # import matplotlib.pyplot as plt
                # plt.imshow(full_mask)
                # plt.show()

                seg = mask_overlay(image_ori, (full_mask > 0)).astype(np.uint8)
                # seg = mask_overlay((full_mask > 0)).astype(np.uint8)
                # cv2.imshow("seg",seg)
                # cv2.waitKey(0)
                cv2.imwrite(path_save + "/" + str(i).zfill(4) + ".png", seg)

            save_video(path_save, path_save, h, w,
                       self.aviname)  # 可以播放保存的视频展示分割结果

        elif types == "video":
            # 对视频进行分割
            splitFrames(path, path_save)
            #  调用图像分割的方法分割从视频中保存的图像

        elif types == "nii":
            # 对nii3维医学图像进行分割
            import nibabel as nib
            img = np.array(nib.load(path).get_data())
            pass

    def cancel(self):
        self.ui.close()
        QMessageBox.warning(self.ui.cancel_btn, "警告", "未能成功开始分割!",
                            QMessageBox.Yes)