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)
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)
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)
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})
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)
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)
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("未检测到人脸信息")