def __init__(self):
     super(AddStudent, self).__init__()
     self.setupUi(self)
     self.slotInit()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.combobox_init()
Пример #2
0
 def __init__(self):
     super(DelClassTable, self).__init__()
     self.setupUi(self)
     self.initslot()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.init_facedate_table()
 def __init__(self):
     super(del_window, self).__init__()
     self.setupUi(self)
     self.SlotInit()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.line_delFaceName.clear()
Пример #4
0
 def __init__(self):
     super(AddCheckTable, self).__init__()
     self.setupUi(self)
     self.initslot()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.line_addCheckTable.clear()
Пример #5
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.DB_Path = '../DB/FileNameDB.db'
        self.sqlStr_SelectAll = "select * from fileName;"

        self.opsql = Operate_Sql()
        self.opfile = File_Operate()

        self.timer_camera_test = QtCore.QTimer()  # qt计数器
        self.timer_camera_face = QtCore.QTimer()  # qt计数器

        self.openAddWin = AddStudent()  # 添加窗口实例
        self.openDelWin = del_window()  # 删除窗口实例
        self.helpWin = HelpWindow()  # 帮助窗口实例
        self.openAddClass = AddClassTable()  # 添加班级表实例
        self.openDelClass = DelClassTable()  # 删除班级表实例
        self.openAddCheck = AddCheckTable()  # 添加考勤表示例
        self.openDelCheck = DelCheckTable()  # 添加删除考勤表示例

        self.slot_init()
        self.combobox_init()  # 初始化下拉列表
        self.check_table_init()

        self.photoNum = 0  # 照片计数
        self.CAM_NUM = 0
        self.pNum = 0  # 照片计数器
        self.photo_transmission = 0  # 图片传输变量
        self.frame_out = 0

        # 启动Facenet模块
        self.face = face_recognition.face()
Пример #6
0
 def __init__(self):
     super(del_window, self).__init__()
     self.setupUi(self)
     self.SlotInit()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.combobox_init()
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.DB_Path = '../DB/FileNameDB.db'
        self.sqlStr_SelectAll = "select * from fileName;"

        self.opsql = Operate_Sql()
        self.opfile = File_Operate()

        self.timer_camera_test = QtCore.QTimer()  # qt计数器
        self.timer_camera_face = QtCore.QTimer()  # qt计数器

        self.openAddWin = AddStudent()  # 添加窗口实例
        self.openDelWin = del_window()  # 删除窗口实例
        self.helpWin = HelpWindow()  # 帮助窗口实例
        self.openAddClass = AddClassTable()  # 添加班级表实例
        self.openDelClass = DelClassTable()  # 删除班级表实例

        self.slot_init()
        self.photoNum = 0  # 照片计数
        self.CAM_NUM = 0
        # self.promptWin=prompt()
        self.Combobox_Init()  # 初始化下拉列表
        # self.lab_faceNumShow.setText(str(self.opsql.Num_Now_All()) + '张')  # 显示数据库中存在的人脸个数
        # self.lab_selecFile.setText("选择标签:")
        self.pNum = 0  # 照片计数器
        self.photo_transmission = 0  # 图片传输变量
        self.frame_out = 0
Пример #8
0
class AddStudent(QDialog, Ui_Form_Student):
    def __init__(self):
        super(AddStudent, self).__init__()
        self.setupUi(self)
        self.slotInit()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.combobox_init()

    def slotInit(self):
        self.btn_cancel.clicked.connect(self.btn_hide)
        self.btn_confirm.clicked.connect(self.btn_add_new_student)
        self.btn_refresh.clicked.connect(self.refresh)
        # 隐藏窗口

    def btn_hide(self):
        self.hide()

    def refresh(self):
        self.SelectClass.clear()
        self.combobox_init()

    # 初始化班级列表
    def combobox_init(self):
        table_name, table_nmu = self.opsql.select_all_table()
        readlines = table_nmu
        lineindex = 0
        while lineindex < readlines:
            self.SelectClass.addItem(table_name[lineindex])
            lineindex += 1

    def btn_add_new_student(self):
        student_info = []
        proclass = self.SelectClass.currentText()
        lable = self.line_addLabel.text()
        name = self.line_addName.text()
        sex = self.line_addSex.text()
        id = self.line_addId.text()

        student_info.append(lable)
        student_info.append(name)
        student_info.append(sex)
        student_info.append(id)
        student_info.append(proclass)

        # 检查学号是否唯一存在
        flag = self.opsql.insert_new_student(student_info)
        if flag:
            msg = QtWidgets.QMessageBox.information(self, u"完成", u"添加个人信息完成!",
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)
            self.line_addLabel.clear()
            self.line_addName.clear()
            self.line_addSex.clear()
            self.line_addId.clear()
        else:
            msg = QtWidgets.QMessageBox.warning(self, u"警告", u"存在相学号,请更改",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)
 def __init__(self):
     super(DelClassTable, self).__init__()
     self.setupUi(self)
     self.initslot()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.line_profession.clear()
     self.line_class.clear()
Пример #10
0
 def __init__(self):
     super(DelCheckTable, self).__init__()
     self.setupUi(self)
     self.initslot()
     self.opsql = Operate_Sql()
     self.opfile = File_Operate()
     self.comboBox_delCheckTable.clear()
     self.init_check_table()
Пример #11
0
class del_window(QDialog, Ui_Form_Del):
    def __init__(self):
        super(del_window, self).__init__()
        self.setupUi(self)
        self.SlotInit()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.combobox_init()

    def SlotInit(self):
        self.btn_Cancel.clicked.connect(self.btn_hide)
        self.btn_Enter.clicked.connect(self.btn_enter)
        self.btn_Refresh.clicked.connect(self.refresh)

    def btn_hide(self):
        self.hide()

    def refresh(self):
        proclass = self.comboBox_selectClass.currentText()
        self.combobox_init(proclass=proclass)
        id = self.opsql.show_student_id(proclass)
        self.comboBox_selectId.clear()
        for i in range(len(id)):
            print(id[i])
            self.comboBox_selectId.addItem(str(id[i]))

    # 获取班级列表
    def combobox_init(self, proclass=None):
        self.comboBox_selectClass.clear()
        table_name, table_nmu = self.opsql.select_all_table()
        readlines = table_nmu
        lineindex = 0
        while lineindex < readlines:
            self.comboBox_selectClass.addItem(table_name[lineindex])
            lineindex += 1
        if proclass != '':
            self.comboBox_selectClass.setCurrentText(proclass)

    def btn_enter(self):
        CLASS = self.comboBox_selectClass.currentText()
        id = self.comboBox_selectId.currentText()

        # 从本地删除src_img文件
        path_src = '../src_img/{CLASS}_{id}.jpg'.format(CLASS=CLASS, id=id)
        path_emb = '../emb_img/{CLASS}_{id}.jpg'.format(CLASS=CLASS, id=id)

        if os.path.exists(path_src):
            os.remove(path_src)
        # 从本地删除emb_img文件
        if os.path.exists(path_emb):
            os.remove(path_emb)

        self.opsql.Delete_File_Name(CLASS, id)  # 从数据库中删除这个文件名
        msg = QtWidgets.QMessageBox.information(self, u"完成", u"删除完成!",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)

        self.combobox_init()
class del_window(QDialog, Ui_Form_Del):
    def __init__(self):
        super(del_window, self).__init__()
        self.setupUi(self)
        self.SlotInit()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.line_delFaceName.clear()

    def SlotInit(self):
        self.btn_delcancel.clicked.connect(self.btn_hide)
        self.btn_delconfirm.clicked.connect(self.btn_DelFile)

    def btn_hide(self):
        self.hide()

    def btn_DelFile(self):
        '''
        读取字符串
        删除数据库对应行
        删除对应文件
        :return:
        '''
        text = self.line_delFaceName.text()
        flag = self.opsql.Select_Same_Name(text)
        if flag is False:  # 如果数据库不存在这个目录
            msg = QtWidgets.QMessageBox.warning(
                self,
                u"警告",
                u"不存在这个用户",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)

        else:
            # 从本地删除src_img文件
            if os.path.exists('../src_img/' + text + '.jpg') == True:
                os.remove('../src_img/' + text + '.jpg')

            # 从本地删除emb_img文件
            if os.path.exists('../emb_img/' + text + '.jpg') == True:
                os.remove('../emb_img/' + text + '.jpg')

            self.opsql.Delete_File_Name(text)  # 从数据库中删除这个文件名
            msg = QtWidgets.QMessageBox.information(
                self,
                u"完成",
                u"删除完成!",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)

            self.line_delFaceName.clear()
            self.btn_hide()  # 隐藏窗口
Пример #13
0
class AddCheckTable(QDialog, Ui_Form_checkTable):
    def __init__(self):
        super(AddCheckTable, self).__init__()
        self.setupUi(self)
        self.initslot()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.line_addCheckTable.clear()

    # 初始化信号槽
    def initslot(self):
        self.btn_cancel.clicked.connect(self.btn_hide)
        self.btn_confirm.clicked.connect(self.confirm)

    def btn_hide(self):
        self.hide()

    def confirm(self):
        check_table_name = self.line_addCheckTable.text()
        flag = self.opsql.add_check_table(check_table_name)
        if flag:
            print("完成")
            msg = QtWidgets.QMessageBox.information(self, u"完成", u"创建成功!",
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)
            time.sleep(0.3)
            self.hide()

        else:
            print('失败')
            msg = QtWidgets.QMessageBox.warning(self, u"警告", u"存在相同表名,请更改",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)
Пример #14
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.sf = Sqlite_Func()

        self.opsql = Operate_Sql()

        self.timer_camera_test = QtCore.QTimer()  # qt计数器
        self.timer_camera_face = QtCore.QTimer()  # qt计数器


        self.openSqlite = Sqlite_UI()  # 数据库对象
        self.slot_init()

        self.combobox_face_init()  # 初始化下拉列表:人脸数据表
        self.combobox_checkWork_init()  # 初始化下拉列表:考勤数据表

        self.photoNum = 0  # 照片计数
        self.CAM_NUM = 0
        self.pNum = 0  # 照片计数器
        self.photo_transmission = 0  # 图片传输变量
        self.frame_out = 0

        # 启动Facenet模块
        self.face = face_recognition.face()
        self.init_db()
class add_window(QDialog, Ui_Form_add):
    def __init__(self):
        super(add_window, self).__init__()
        self.setupUi(self)
        self.slotInit()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.line_addFaceName.clear()

    def slotInit(self):
        self.btn_cancel.clicked.connect(self.btn_hide)
        self.btn_confirm.clicked.connect(self.btn_addNewFile)
        # 隐藏窗口

    def btn_hide(self):
        self.hide()

    def btn_addNewFile(self):
        '''
        1、触发确认按钮
        2、向数据库添加新名字
        3、从数据库读取名字列表
        '''
        text = self.line_addFaceName.text()  # 获取输入文本
        flag = self.opsql.Select_Same_Name(str(text))  # 查看数据库中是否存在相同的名字
        print(flag)
        if flag is True:
            msg = QtWidgets.QMessageBox.warning(
                self,
                u"警告",
                u"存在名字以存在,请更改",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            if len(text) == 0:  # 如果目录为空
                msg = QtWidgets.QMessageBox.warning(
                    self,
                    u"警告",
                    u"目录为空",
                    buttons=QtWidgets.QMessageBox.Ok,
                    defaultButton=QtWidgets.QMessageBox.Ok)
            else:
                # 根据用户名构建插入语句
                newName = self.opsql.CreatSqlStr(text)
                self.opsql.Insert_New_Name(newName)  # 向数据库插入新行
                self.line_addFaceName.clear()
                self.btn_hide()  # 隐藏窗口
Пример #16
0
class DelClassTable(QDialog, Ui_DelClassTable):
    def __init__(self):
        super(DelClassTable, self).__init__()
        self.setupUi(self)
        self.initslot()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.init_facedate_table()
        # 初始化信号槽

    # 初始化
    def init_facedate_table(self):
        table_name, table_nmu = self.opsql.select_all_table()
        readlines = table_nmu
        lineindex = 0
        while lineindex < readlines:
            row = table_name[lineindex]  #
            self.comboBox_del_facedata_table.addItem(table_name[lineindex])
            lineindex += 1

    def initslot(self):
        self.btn_cancel.clicked.connect(self.btn_hide)
        self.btn_confirm.clicked.connect(self.confirm)
        self.btn_refresh.clicked.connect(self.refresh)

    def refresh(self):
        self.comboBox_del_facedata_table.clear()
        self.init_facedate_table()

    def btn_hide(self):
        self.hide()

    def confirm(self):
        # 获取院系班级
        facedate = self.comboBox_del_facedata_table.currentText()
        flag = self.opsql.delete_pc_table(facedate)
        if flag:
            print("完成")
            msg = QtWidgets.QMessageBox.information(self, u"完成", u"删除成功!",
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            print('失败')
            msg = QtWidgets.QMessageBox.warning(self, u"警告", u"不存在这个表,请更改",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)
class DelClassTable(QDialog, Ui_DelClassTable):
    def __init__(self):
        super(DelClassTable, self).__init__()
        self.setupUi(self)
        self.initslot()
        self.opsql = Operate_Sql()
        self.opfile = File_Operate()
        self.line_profession.clear()
        self.line_class.clear()
        # 初始化信号槽

    def initslot(self):
        self.btn_cancel.clicked.connect(self.btn_hide)
        self.btn_confirm.clicked.connect(self.confirm)

    def btn_hide(self):
        self.hide()

    def confirm(self):
        # 获取院系班级
        profession = self.line_profession.text()
        class_ = self.line_class.text()
        flag = self.opsql.delete_pc_table(profession, class_)
        self.line_profession.clear()
        self.line_class.clear()
        if flag:
            print("完成")
            msg = QtWidgets.QMessageBox.information(
                self,
                u"完成",
                u"删除成功!",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)
            time.sleep(0.2)
            self.hide()

        else:
            print('失败')
            msg = QtWidgets.QMessageBox.warning(
                self,
                u"警告",
                u"不存在这个表,请更改",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)
Пример #18
0
class MainWindow(QMainWindow, Ui_Face_Recognition_window):
    # 构造函数
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.DB_Path = '../DB/FileNameDB.db'
        self.sqlStr_SelectAll = "select * from fileName;"

        self.opsql = Operate_Sql()
        self.opfile = File_Operate()

        self.timer_camera_test = QtCore.QTimer()  # qt计数器
        self.timer_camera_face = QtCore.QTimer()  # qt计数器

        self.openAddWin = AddStudent()  # 添加窗口实例
        self.openDelWin = del_window()  # 删除窗口实例
        self.helpWin = HelpWindow()  # 帮助窗口实例
        self.openAddClass = AddClassTable()  # 添加班级表实例
        self.openDelClass = DelClassTable()  # 删除班级表实例
        self.openAddCheck = AddCheckTable()  # 添加考勤表示例
        self.openDelCheck = DelCheckTable()  # 添加删除考勤表示例

        self.slot_init()
        self.combobox_init()  # 初始化下拉列表
        self.check_table_init()

        self.photoNum = 0  # 照片计数
        self.CAM_NUM = 0
        self.pNum = 0  # 照片计数器
        self.photo_transmission = 0  # 图片传输变量
        self.frame_out = 0

        # 启动Facenet模块
        self.face = face_recognition.face()

    # 槽初始化
    def slot_init(self):
        self.btn_openCamera.clicked.connect(self.opencamera)
        self.btn_takePhoto.clicked.connect(self.take_photo)
        self.timer_camera_test.timeout.connect(self.show_frame)
        self.btn_addNewFace.clicked.connect(self.open_add_win)
        self.btn_delFace.clicked.connect(self.open_del_win)
        self.btn_refresh.clicked.connect(self.refresh)
        self.btn_train.clicked.connect(self.train)
        self.btn_recogniton.clicked.connect(self.open_recognition_camera)
        self.actionHelp.triggered.connect(self.open_help)
        self.actionAddClass.triggered.connect(self.open_add_class)
        self.actionDelClass.triggered.connect(self.open_del_class)
        self.actionAddCheck.triggered.connect(self.open_add_check_table)
        self.actionDelCheck.triggered.connect(self.open_del_check)

    def open_del_check(self):
        self.openDelCheck.show()

    def open_help(self):
        self.helpWin.show()

    def open_del_class(self):
        self.openDelClass.show()

    def open_add_class(self):
        self.openAddClass.show()

    def open_add_check_table(self):
        self.openAddCheck.show()

    def opencamera(self):
        if self.timer_camera_test.isActive() == False:
            self.cap = cv2.VideoCapture(0)
            flag = self.cap.open(self.CAM_NUM)
            if flag is None:
                msg = QtWidgets.QMessageBox.warning(self, u"Warning", u"摄像头无法打开!",
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)
            self.btn_openCamera.setText("关闭摄像头")
            self.timer_camera_test.start(25)
        else:
            self.btn_openCamera.setText(u"打开摄像头")
            self.timer_camera_test.stop()
            self.lab_frame.setText(u"无图像输入")
            self.cap.release()

    def show_frame(self):
        ret, frame = self.cap.read()
        if frame is None:
            return
        frame = cv2.flip(frame, 1)
        frame = cv2.resize(frame, (640, 480))
        self.photo_transmission = frame
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        lable = cv2.putText(frame, '-->Camera OK', (10, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255, 0),
                            thickness=1, lineType=1)
        showFrame = QtGui.QImage(frame.data, frame.shape[1], frame.shape[0], QtGui.QImage.Format_RGB888)
        self.lab_frame.setPixmap(QtGui.QPixmap.fromImage(showFrame))

    # 打开添加窗口
    def open_add_win(self):
        self.openAddWin.show()

    # 打开删除窗口
    def open_del_win(self):
        self.openDelWin.show()

    # 拍照
    def take_photo(self):
        '''
        1、从数据库中读取所有文件名
        2、从文件名中选择文件目录作为照片存储地址
        3、调用拍照程序对当前画面进行拍照
        4、更新拍照数量
        '''

        # 如果摄像头没有打开
        if self.btn_openCamera.text() != '关闭摄像头':
            msg = QtWidgets.QMessageBox.warning(self, u"Warning", u"请打开摄像头!",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            selectClass = self.comboBox_selectClass.currentText()
            selectid = self.comboBox_selectId.currentText()
            if selectid == '' or selectid is None:
                msg = QtWidgets.QMessageBox.warning(self, u"Warning", u"请选择学号!",
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)
            else:
                name = '{CLASS}_{id}'.format(CLASS=selectClass, id=selectid)
                name = '../src_img/{name}.jpg'.format(name=name)
                print(name)
                cv2.imwrite(name, self.photo_transmission)

    # 考勤表初始化
    def check_table_init(self, checktable=None):
        self.comboBox_CheckTable.clear()
        table_name, table_nmu = self.opsql.select_all_checktable()
        readlines = table_nmu
        lineindex = 0
        while lineindex < readlines:
            self.comboBox_CheckTable.addItem(table_name[lineindex])
            lineindex += 1
        if checktable != '' or checktable is None:
            self.comboBox_CheckTable.setCurrentText(checktable)
        print('check_table_init done')

    # 获取人脸数据表
    def combobox_init(self, proclass=None):
        self.comboBox_selectClass.clear()
        table_name, table_nmu = self.opsql.select_all_table()
        readlines = table_nmu
        lineindex = 0
        while lineindex < readlines:
            self.comboBox_selectClass.addItem(table_name[lineindex])
            lineindex += 1
        if proclass != '' or proclass is None:
            self.comboBox_selectClass.setCurrentText(proclass)
        print('combobox_init done')

    # 刷新显示
    def refresh(self):
        proclass = self.comboBox_selectClass.currentText()
        checktable = self.comboBox_CheckTable.currentText()

        self.combobox_init(proclass=proclass)
        self.check_table_init(checktable=checktable)

        id_set = self.opsql.show_student_id(proclass)
        self.comboBox_selectId.clear()
        print(len(id_set))
        for i in range(len(id_set)):
            print(id_set[i])
            self.comboBox_selectId.addItem(str(id_set[i]))

    def train(self):
        msg = QtWidgets.QMessageBox.information(self, u"提示", u"训练过程中,画面无法更新。",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)
        get_face.detection()

    # 打开识别摄像头
    def open_recognition_camera(self):
        msg = QtWidgets.QMessageBox.information(self, u"启动提示", u"1、启动时间根据设备性能强弱决定\n\n2、程序启动后按下esc退出检测窗口",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)

        if self.btn_openCamera.text() == '关闭摄像头':
            msg = QtWidgets.QMessageBox.warning(self, u"警告", u"请先关闭摄像头!",
                                                buttons=QtWidgets.QMessageBox.Ok,
                                                defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            print('开启摄像头')
            CLASS = self.comboBox_selectClass.currentText()
            ct = self.comboBox_CheckTable.currentText()
            self.face.main(CLASS, ct)
class MainWindow(QMainWindow, Ui_Face_Recognition_window):
    # 构造函数
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.DB_Path = '../DB/FileNameDB.db'
        self.sqlStr_SelectAll = "select * from fileName;"

        self.opsql = Operate_Sql()
        self.opfile = File_Operate()

        self.timer_camera_test = QtCore.QTimer()  # qt计数器
        self.timer_camera_face = QtCore.QTimer()  # qt计数器

        self.openAddWin = AddStudent()  # 添加窗口实例
        self.openDelWin = del_window()  # 删除窗口实例
        self.helpWin = HelpWindow()  # 帮助窗口实例
        self.openAddClass = AddClassTable()  # 添加班级表实例
        self.openDelClass = DelClassTable()  # 删除班级表实例

        self.slot_init()
        self.photoNum = 0  # 照片计数
        self.CAM_NUM = 0
        # self.promptWin=prompt()
        self.Combobox_Init()  # 初始化下拉列表
        # self.lab_faceNumShow.setText(str(self.opsql.Num_Now_All()) + '张')  # 显示数据库中存在的人脸个数
        # self.lab_selecFile.setText("选择标签:")
        self.pNum = 0  # 照片计数器
        self.photo_transmission = 0  # 图片传输变量
        self.frame_out = 0
        # 启动Facenet模块
        # self.face = face_recognition.face()

    # 槽初始化
    def slot_init(self):
        self.btn_openCamera.clicked.connect(self.OpenCamera)
        self.btn_takePhoto.clicked.connect(self.Take_Photo)
        self.timer_camera_test.timeout.connect(self.Show_Frame)

        self.btn_addNewFace.clicked.connect(self.open_Add_Win)
        # self.comboBox_selectFile.currentIndexChanged.connect(self.Show_Select_Cbb)
        self.btn_delFace.clicked.connect(self.open_Del_Win)
        self.btn_refresh.clicked.connect(self.Refresh)
        self.btn_train.clicked.connect(self.train)
        self.btn_recogniton.clicked.connect(self.open_recognition_camera)
        self.actionHelp.triggered.connect(self.open_help)
        self.actionAddClass.triggered.connect(self.open_add_class)
        self.actionDelClass.triggered.connect(self.open_del_class)

    def open_help(self):
        self.helpWin.show()

    def open_del_class(self):
        self.openDelClass.show()

    def open_add_class(self):
        self.openAddClass.show()

    def OpenCamera(self):
        if self.timer_camera_test.isActive() == False:
            self.cap = cv2.VideoCapture(0)
            flag = self.cap.open(self.CAM_NUM)
            if flag is None:
                msg = QtWidgets.QMessageBox.warning(
                    self,
                    u"Warning",
                    u"摄像头无法打开!",
                    buttons=QtWidgets.QMessageBox.Ok,
                    defaultButton=QtWidgets.QMessageBox.Ok)
            self.btn_openCamera.setText("关闭摄像头")
            self.timer_camera_test.start(25)
        else:
            self.btn_openCamera.setText(u"打开摄像头")
            self.timer_camera_test.stop()
            self.lab_frame.setText(u"无图像输入")
            self.cap.release()

    def Show_Frame(self):
        ret, frame = self.cap.read()
        if frame is None:
            return
        frame = cv2.flip(frame, 1)
        frame = cv2.resize(frame, (640, 480))
        self.photo_transmission = frame
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        lable = cv2.putText(frame,
                            '-->Camera OK', (10, 30),
                            cv2.FONT_HERSHEY_COMPLEX_SMALL,
                            1, (0, 255, 0),
                            thickness=1,
                            lineType=1)
        showFrame = QtGui.QImage(frame.data, frame.shape[1], frame.shape[0],
                                 QtGui.QImage.Format_RGB888)
        self.lab_frame.setPixmap(QtGui.QPixmap.fromImage(showFrame))

    # 打开添加窗口
    def open_Add_Win(self):
        self.openAddWin.show()

    # 打开删除窗口
    def open_Del_Win(self):
        self.openDelWin.show()

    # 拍照
    def Take_Photo(self):
        '''
        1、从数据库中读取所有文件名
        2、从文件名中选择文件目录作为照片存储地址
        3、调用拍照程序对当前画面进行拍照
        4、更新拍照数量
        '''

        # 如果摄像头没有打开
        if self.btn_openCamera.text() != '关闭摄像头':
            msg = QtWidgets.QMessageBox.warning(
                self,
                u"Warning",
                u"请打开摄像头!",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            selectFName = self.comboBox_selectFile.currentText()
            flag = self.opsql.Select_Same_Name(selectFName)
            # 如果数据库没有这个标签
            if flag == False:
                msg = QtWidgets.QMessageBox.warning(
                    self,
                    u"Warning",
                    u"不存在这个标签,请尝试刷新!",
                    buttons=QtWidgets.QMessageBox.Ok,
                    defaultButton=QtWidgets.QMessageBox.Ok)
            else:
                fName = '../src_img/' + selectFName + '.jpg'
                # 如果遇到空白标签
                if len(selectFName) == 0 or selectFName == '':
                    msg = QtWidgets.QMessageBox.warning(
                        self,
                        u"Warning",
                        u"没有这个人脸标签!",
                        buttons=QtWidgets.QMessageBox.Ok,
                        defaultButton=QtWidgets.QMessageBox.Ok)
                else:
                    self.pNum += 1
                    self.lab_faceNumDisplay.setText('%d' % self.pNum)
                    cv2.imwrite(fName, self.photo_transmission)

    # 获取文件夹名字列表
    def Combobox_Init(self):
        '''
        1、根据sql语句从数据库中读取所有文件名
        '''
        self.comboBox_selectClass.clear()
        num = self.opsql.Num_Now_All()
        rows = self.opsql.readFronSqllite(self.DB_Path, self.sqlStr_SelectAll)
        readLines = num
        lineIndex = 0
        while lineIndex < readLines:
            row = rows[lineIndex]  # 获取某一行的数据,类型是tuple
            self.comboBox_selectClass.addItem(str(row[0]))
            lineIndex += 1

    # 刷新显示
    def Refresh(self):
        self.Combobox_Init()
        # self.lab_faceNumShow.setText(str(self.opsql.Num_Now_All()) + '张')

    def train(self):
        msg = QtWidgets.QMessageBox.information(
            self,
            u"提示",
            u"训练过程中,画面无法更新。",
            buttons=QtWidgets.QMessageBox.Ok,
            defaultButton=QtWidgets.QMessageBox.Ok)
        get_face.detection()
        # self.btn_train.setText('训练完成')
        # time.sleep(10000)
        self.btn_train.setText('重新训练')

    # 打开识别摄像头
    def open_recognition_camera(self):
        msg = QtWidgets.QMessageBox.information(
            self,
            u"启动提示",
            u"1、启动时间根据设备性能强弱决定\n\n2、程序启动后按下esc退出检测窗口",
            buttons=QtWidgets.QMessageBox.Ok,
            defaultButton=QtWidgets.QMessageBox.Ok)

        if self.btn_openCamera.text() == '关闭摄像头':
            msg = QtWidgets.QMessageBox.warning(
                self,
                u"警告",
                u"请先关闭摄像头!",
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            print('开启摄像头')
            self.face.main(False)
            # self.lab_frame.setText(u"正在加载并启动程序...")

    # 弃用
    def show_face_recognition(self):
        print('frame_out:', len(self.frame_out))
        frame = cv2.resize(self.frame_out, (640, 480))
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        lable = cv2.putText(frame,
                            '-->Camera OK', (10, 30),
                            cv2.FONT_HERSHEY_COMPLEX_SMALL,
                            1, (0, 255, 0),
                            thickness=1,
                            lineType=1)
        showFrame = QtGui.QImage(frame.data, frame.shape[1], frame.shape[0],
                                 QtGui.QImage.Format_RGB888)
        self.lab_frame.setPixmap(QtGui.QPixmap.fromImage(showFrame))