Esempio n. 1
0
 def recognize(self):
     classifier = HaarcascadeDetective().get_face_classifier()
     while self.playing:
         try:
             if len(self.frames) == 0:
                 time.sleep(0.05)
                 continue
             if self.flag_recognize:
                 frame = self.frames.pop()
                 faces = classifier.get_faces_position(frame)
                 self.recognized_faces.clear()
                 for (x, y, w, h) in faces:
                     face = frame[y:y + h, x:x + w]
                     if self.model is not None:
                         gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
                         params = self.model.predict(gray)
                         user = self.find_user_by_id(params[0])
                         if user is not None:
                             self.recognized_faces[user[1]] = ((x, y, w, h), user[2], user[3], int(params[1]))
                         else:
                             self.recognized_faces['-1'] = ((x, y, w, h), 'No this user', '255,0,0', 0)
                     else:
                         self.recognized_faces['-2'] = ((x, y, w, h), 'No model', '255,0,0', 0)
         except Exception as e:
             print(e)
Esempio n. 2
0
 def recognize(self):
     classifier = HaarcascadeDetective().get_face_classifier()
     while self.playing:
         if len(self.frames) == 0:
             continue
         frame = self.frames.pop()
         if self.flag_recognize:
             faces = classifier.get_faces_position(frame)
             self.recognized_faces.clear()
             for (x, y, w, h) in faces:
                 face = frame[y:y + h, x:x + w]
                 if self.model is not None:
                     gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
                     params = self.model.predict(gray)
                     if params[1] <= Tool.config.getint(
                             'recognize', 'threshold', fallback=50):
                         self.recognized_faces[self.face_names[
                             params[0]]] = (x, y, w, h)
                     else:
                         self.recognized_faces['Unknown'] = (x, y, w, h)
                 else:
                     self.recognized_faces['Unknown'] = (x, y, w, h)
Esempio n. 3
0
    def __init__(self, image):
        super(AddUserFace, self).__init__()
        self.setFixedSize(300, 275)
        self.setWindowIcon(QIcon('icons/add.png'))
        self.setWindowTitle('添加')
        lbl_face = QLabel('人脸', self)
        lbl_face.setGeometry(10, 22, 50, 26)
        lbl_face.setAlignment(Qt.AlignCenter)

        lbl_name = QLabel('名称', self)
        lbl_name.setGeometry(10, 80, 50, 26)
        lbl_name.setAlignment(Qt.AlignCenter)
        self.cb_user = QComboBox(self)
        users = DbHelper.query_users()
        for user in users:
            self.cb_user.addItem(user[2], userData=user)
        self.cb_user.setGeometry(70, 80, 200, 26)

        self.btn_save = QPushButton(self)
        self.btn_save.setText('保存')
        self.btn_save.setGeometry(10, 234, 280, 30)
        self.btn_save.clicked.connect(self.save)

        self.cache_faces = {}
        self.face = None

        faces = HaarcascadeDetective().get_face_classifier().get_faces(image)
        index = 0
        for face in faces:
            viewer_face = QPushButton(self)
            viewer_face.setGeometry(70 * (index + 1), 10, 60, 60)
            viewer_face.setIconSize(QSize(56, 56))
            img = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)
            image = QImage(img, img.shape[1], img.shape[0], img.shape[1] * 3, QImage.Format_RGB888)
            pix_map = QPixmap.fromImage(image)
            viewer_face.setIcon(QIcon(pix_map))
            viewer_face.clicked.connect(self.select_face)
            self.cache_faces[viewer_face] = face
            if index == 0:
                self.face = face
                viewer_face.setStyleSheet('border-color: rgb(255, 0, 0);border-style: outset;border-width: 2px;')
            index += 1
            if index > 2:
                break

        if index == 0:
            lbl_message = QLabel(self)
            lbl_message.setText('未检测到人脸信息')
            lbl_message.setGeometry(70, 22, 200, 26)
            self.btn_save.setDisabled(True)
Esempio n. 4
0
def upload_detect():
    try:
        file_detect = request.files['file_detect']
        path = os.path.split(os.path.realpath(
            __file__))[0] + os.path.sep + "static" + os.path.sep + "upload"
        if not os.path.exists(path):
            os.mkdir(path)
        face_path = path + os.path.sep + file_detect.filename
        file_detect.save(face_path)
        face_list = HaarcascadeDetective().get_face_classifier().get_faces(
            face_path)
        if len(face_list) > 0:
            return json.dumps({"code": 0, "data": face_list})
        else:
            return json.dumps({"code": 1})
    except Exception as e:
        return json.dumps({"code": -1})
Esempio n. 5
0
 def recognize(self):
     while self.flag_recognize:
         try:
             if self.recognizing_frame is None:
                 time.sleep(0.05)
                 continue
             self.recognized_faces.clear()
             faces = HaarcascadeDetective.get_faces_position(
                 self.recognizing_frame)
             for (x, y, w, h) in faces:
                 recognized_face = {'position': (x, y, w, h)}
                 face = self.recognizing_frame[y:y + h, x:x + w]
                 if self.model is not None:
                     gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
                     params = self.model.predict(gray)
                     if params[1] <= Config.threshold:
                         recognized_face['name'] = self.users[params[0]]
                         recognized_face['degree'] = int(params[1])
                 self.recognized_faces.append(recognized_face)
             self.recognizing_frame = None
         except Exception as e:
             print(e)
Esempio n. 6
0
    def __init__(self, image):
        super(AddFaceDialog, self).__init__()
        self.setFixedSize(300, 275)
        self.setWindowIcon(QIcon('icons/add.png'))
        self.setWindowTitle('添加')
        lbl_face = QLabel('人脸', self)
        lbl_face.setGeometry(10, 22, 50, 26)
        lbl_face.setAlignment(Qt.AlignCenter)

        lbl_name = QLabel('名称', self)
        lbl_name.setGeometry(10, 80, 50, 26)
        lbl_name.setAlignment(Qt.AlignCenter)
        self.le_name = QLineEdit(self)
        self.le_name.setGeometry(70, 80, 200, 26)
        lbl_desc = QLabel('欢迎语', self)
        lbl_desc.setGeometry(10, 116, 50, 26)
        lbl_desc.setAlignment(Qt.AlignCenter)
        self.le_desc = QLineEdit(self)
        self.le_desc.setGeometry(70, 116, 200, 26)
        lbl_ip = QLabel('展位IP', self)
        lbl_ip.setGeometry(10, 152, 50, 26)
        lbl_ip.setAlignment(Qt.AlignCenter)
        self.le_ip = QLineEdit(self)
        self.le_ip.setGeometry(70, 152, 200, 26)
        lbl_cmd = QLabel('指令', self)
        lbl_cmd.setGeometry(10, 188, 50, 26)
        lbl_cmd.setAlignment(Qt.AlignCenter)
        self.le_cmd = QLineEdit(self)
        self.le_cmd.setGeometry(70, 188, 200, 26)

        self.btn_save = QPushButton(self)
        self.btn_save.setText('保存')
        self.btn_save.setGeometry(10, 234, 280, 30)
        self.btn_save.clicked.connect(self.save)

        self.cache_faces = {}
        self.face = None

        faces = HaarcascadeDetective().get_face_classifier().get_faces(image)
        index = 0
        for face in faces:
            viewer_face = QPushButton(self)
            viewer_face.setGeometry(70 * (index + 1), 10, 60, 60)
            viewer_face.setIconSize(QSize(56, 56))
            img = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)
            image = QImage(img, img.shape[1], img.shape[0], img.shape[1] * 3,
                           QImage.Format_RGB888)
            pix_map = QPixmap.fromImage(image)
            viewer_face.setIcon(QIcon(pix_map))
            viewer_face.clicked.connect(self.select_face)
            self.cache_faces[viewer_face] = face
            if index == 0:
                self.face = face
                viewer_face.setStyleSheet(
                    'border-color: rgb(255, 0, 0);border-style: outset;border-width: 2px;'
                )
            index += 1
            if index > 2:
                break

        if index == 0:
            lbl_message = QLabel(self)
            lbl_message.setText('未检测到人脸信息')
            lbl_message.setGeometry(70, 22, 100, 26)
            self.btn_save.setDisabled(True)
Esempio n. 7
0
    def __init__(self, image):
        super(AddUserFace, self).__init__()
        self.setFixedSize(300, 275)
        self.setWindowIcon(QIcon('icons/add.png'))
        self.setWindowTitle('添加')

        self.rb_select = QRadioButton("选择", self)
        self.rb_select.setGeometry(70, 20, 50, 26)
        self.rb_select.toggled.connect(self.toggle)

        self.rb_new = QRadioButton('新建', self)
        self.rb_new.setGeometry(120, 20, 50, 26)
        self.rb_new.toggled.connect(self.toggle)

        lbl_name = QLabel('名称', self)
        lbl_name.setGeometry(10, 70, 50, 26)
        lbl_name.setAlignment(Qt.AlignCenter)

        users = DbHelper.query_users()

        self.cb_user = QComboBox(self)
        self.cb_user.setGeometry(70, 70, 200, 26)
        self.le_user = QLineEdit(self)
        self.le_user.setGeometry(70, 70, 200, 26)

        if users is not None and len(users) > 0:
            self.rb_select.setChecked(True)
            for user in users:
                self.cb_user.addItem(user[1], userData=user)
        else:
            self.rb_select.setDisabled(True)
            self.rb_new.setChecked(True)

        lbl_face = QLabel('人脸', self)
        lbl_face.setGeometry(10, 140, 50, 26)
        lbl_face.setAlignment(Qt.AlignCenter)

        self.btn_save = QPushButton(self)
        self.btn_save.setText('保存')
        self.btn_save.setGeometry(10, 234, 280, 30)
        self.btn_save.clicked.connect(self.save)

        self.cache_faces = {}
        self.face = None

        faces = HaarcascadeDetective.get_faces(image)
        index = 0
        for face in faces:
            viewer_face = QPushButton(self)
            viewer_face.setGeometry(70 * (index + 1), 120, 60, 60)
            viewer_face.setIconSize(QSize(56, 56))
            img = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)
            image = QImage(img, img.shape[1], img.shape[0], img.shape[1] * 3,
                           QImage.Format_RGB888)
            pix_map = QPixmap.fromImage(image)
            viewer_face.setIcon(QIcon(pix_map))
            viewer_face.clicked.connect(self.select_face)
            self.cache_faces[viewer_face] = face
            if index == 0:
                self.face = face
                viewer_face.setStyleSheet(
                    'border-color: rgb(255, 0, 0);border-style: outset;border-width: 2px;'
                )
            index += 1
            if index > 3:
                break

        if index == 0:
            Tool.show_msg_box("未检测到人脸信息")