def init(self):
     '''
     导入模型
     :return:
     '''
     self.eye_times = 0
     self.mouth_time = 0
     self.finished = 0
     self.tip = ''
     self.sign_fg = False
     self.facenet = Facenet()
     self.facenet.load()
     self.display.setText('-- Welcome to Face Recognition. v0.0 ' + datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
    def convert_embeddings(self, im_path):
        extracted = []

        with tf.Session() as sess:
            graph = tf.get_default_graph()
            Facenet.load_model(self.model_dir)

            self.image_placeholder = graph.get_tensor_by_name('input:0')
            self.phase_train_placeholder = graph.get_tensor_by_name('phase_train:0')
            self.embeddings = graph.get_tensor_by_name('embeddings:0')

            faces = self.face_detector.get_faces_mtcnn(im_path)

            for face in faces:
                rect = face['rect']
                prewhitened = Facenet.prewhiten(rect)
                embeddings = self._get_embeddings(sess, prewhitened)
                extracted.append(embeddings)

        return extracted
Beispiel #3
0
def main(args):
    data = load_data(args.training_images)
    print('Loading FaceNet...')
    facenet = Facenet()

    with tf.Session() as sess:
        init = tf.global_variables_initializer()
        sess.run(init)
        print('Generating embeddings...')
        X_emb = sess.run(facenet.end_points['embeddings'],
                         feed_dict={facenet.end_points['inputs']: data['X']})

    cls = SVC(probability=True)
    print('Training classifier...')
    cls.fit(X_emb, data['y'])

    with open('./models/classifier.pkl', 'wb') as f:
        pickle.dump(cls, f)

    np.save('./sample_data/names.npy', data['names'])

    x_tsne = TSNE().fit_transform(X_emb)
    n_people = np.unique(data['y']).shape[0]
    colours = iter(plt.cm.rainbow(np.linspace(0, 1, n_people)))
    fig = plt.figure()
    ax = plt.subplot(111)
    for i in range(n_people):
        idx = data['y'] == i
        ax.scatter(x_tsne[idx, 0],
                   x_tsne[idx, 1],
                   c=next(colours),
                   label=data['names'][i])
    box = ax.get_position()
    ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
    ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
    plt.show()
class Main_window(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1008, 800)
        Form.setMaximumSize(QtCore.QSize(1200, 800))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(238, 250, 254))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(110, 123, 126))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(147, 164, 169))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(238, 250, 254))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        # palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(238, 250, 254))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(110, 123, 126))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(147, 164, 169))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(238, 250, 254))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        # palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
        brush = QtGui.QBrush(QtGui.QColor(110, 123, 126))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(238, 250, 254))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(110, 123, 126))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(147, 164, 169))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(110, 123, 126))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush)
        brush = QtGui.QBrush(QtGui.QColor(110, 123, 126))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(221, 246, 253))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        # palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
        Form.setPalette(palette)
        Form.setMouseTracking(False)
        self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.splitter = QtWidgets.QSplitter(Form)
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName("splitter")
        self.groupBox_2 = QtWidgets.QGroupBox(self.splitter)
        self.groupBox_2.setObjectName("groupBox_2")
        self.sign = QtWidgets.QPushButton(self.groupBox_2)
        self.sign.setGeometry(QtCore.QRect(40, 110, 93, 28))
        self.sign.setObjectName("sign")
        self.log = QtWidgets.QPushButton(self.groupBox_2)
        self.log.setGeometry(QtCore.QRect(40, 420, 93, 28))
        self.log.setObjectName("log")
        self.add_new_person = QtWidgets.QPushButton(self.groupBox_2)
        self.add_new_person.setGeometry(QtCore.QRect(40, 270, 93, 28))
        self.add_new_person.setObjectName("add_new_person")
        self.exit = QtWidgets.QPushButton(self.groupBox_2)
        self.exit.setGeometry(QtCore.QRect(40, 570, 93, 28))
        self.exit.setObjectName("exit")
        self.layoutWidget = QtWidgets.QWidget(self.splitter)
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.groupBox = QtWidgets.QGroupBox(self.layoutWidget)
        self.groupBox.setMinimumSize(QtCore.QSize(500, 500))
        self.groupBox.setObjectName("groupBox")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.widget = QtWidgets.QLabel(self.groupBox)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(213, 234, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(149, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(42, 85, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(56, 113, 170))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(170, 212, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        # palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(213, 234, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(149, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(42, 85, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(56, 113, 170))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(170, 212, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        # palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
        brush = QtGui.QBrush(QtGui.QColor(42, 85, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(213, 234, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(149, 202, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(42, 85, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(56, 113, 170))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(42, 85, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush)
        brush = QtGui.QBrush(QtGui.QColor(42, 85, 127))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128))
        brush.setStyle(QtCore.Qt.SolidPattern)
        # palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
        self.widget.setPalette(palette)
        self.widget.setCursor(QtGui.QCursor(QtCore.Qt.SizeAllCursor))
        self.widget.setObjectName("widget")
        self.widget.setAlignment(Qt.AlignCenter)
        self.verticalLayout_4.addWidget(self.widget)
        self.verticalLayout_2.addWidget(self.groupBox)
        self.groupBox_3 = QtWidgets.QGroupBox(self.layoutWidget)
        self.groupBox_3.setObjectName("groupBox_3")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox_3)
        self.verticalLayout.setObjectName("verticalLayout")
        self.display = QtWidgets.QTextBrowser(self.groupBox_3)
        self.display.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.display.setObjectName("display")
        self.verticalLayout.addWidget(self.display)
        self.verticalLayout_2.addWidget(self.groupBox_3)
        self.verticalLayout_2.setStretch(0, 3)
        self.verticalLayout_2.setStretch(1, 1)
        self.horizontalLayout.addWidget(self.splitter)

        #加载模型
        self.init()

        # 定义计时器
        self.timer = QTimer(Form)
        self.timer.timeout.connect(self.play)
        self.timer.start(27)

        #连接数据库
        self.peron_db = Database()
        self.record_db = Record()

        # 定义子线程
        self.backend = Backend()
        self.backend.set_facenet(self.facenet)
        self.Form = Form
        self.triggered()
        self.retranslateUi(Form)
        self.colorful()
        self.add_windows()

        QtCore.QMetaObject.connectSlotsByName(Form)


    def colorful(self):
        '''
        修改控件风格
        :return:
        '''
        self.sign.setIcon(QIcon('icons/sign.png'))
        self.add_new_person.setIcon(QIcon('icons/new.png'))
        self.log.setIcon(QIcon('icons/record.png'))
        self.exit.setIcon(QIcon('icons/exit.png'))

        # 设置button 鼠标风格
        self.sign.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.add_new_person.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.log.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.exit.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))

        self.Form.setStyleSheet('''
            QPushButton{border:none;color:black;}
            QPushButton#left_label{
                border:none;
                border-bottom:1px solid white;
                font-size:18px;
                font-weight:700;
                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
            }
            QPushButton#left_button:hover{border-left:4px solid red;font-weight:700;}
        ''')
        self.Form.setWindowIcon(QIcon('icons/love.png'))


    def init(self):
        '''
        导入模型
        :return:
        '''
        self.eye_times = 0
        self.mouth_time = 0
        self.finished = 0
        self.tip = ''
        self.sign_fg = False
        self.facenet = Facenet()
        self.facenet.load()
        self.display.setText('-- Welcome to Face Recognition. v0.0 ' + datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'))

    def add_windows(self):
        '''
        添加 子页面
        :return:
        '''
        # 签到界面
        self.sign_window = Sign_window()
        self.sign_widget = QtWidgets.QWidget()
        self.sign_window.setupUi(self.sign_widget)
        self.sign_window.confirm.clicked.connect(self.is_exits)
        self.sign_window.confirm2.clicked.connect(self.start_sign)
        self.sign_window.confirm2.clicked.connect(self.sign_widget.close)
        self.sign_window.cancel.clicked.connect(self.sign_widget.close)

        # 添加新脸界面
        self.new_window = New_person_window()
        self.new_widget = QtWidgets.QWidget()
        self.new_window.setupUi(self.new_widget)
        self.new_window.cancel.clicked.connect(self.new_widget.close)
        self.add_new_person.clicked.connect(self.new_widget.show)

        # person_name = new_window.name.text()
        # print('person_name: ', person_name)
        self.new_window.confirm.clicked.connect(self.add)
        self.sign.clicked.connect(self.sign_widget.show)

    def is_exits(self):
        # 判断用户输入的id是否在库中
        id = self.sign_window.input.toPlainText()
        if len(self.peron_db.search(id)) == 0:
            # 如果没有在库中,弹出警告
            qw = QWidget()
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("icons/love.png"), QtGui.QIcon.Normal,
                           QtGui.QIcon.Off)
            QMessageBox.setWindowIcon(qw, icon)
            QMessageBox.information(qw, "提示", "找不到你的员工号 !", QMessageBox.Ok)
            return True
        return False
    def start_sign(self):
        '''
        开始签到
        :return:
        '''

        if not self.is_exits():
            self.tip = 'Start to Sign'
            self.comman = [0, 1, 1, 0] # 0 为眨眼, 1为张嘴
            random.shuffle(self.comman)
            self.finished = 0
            self.sign_fg = True

    def isblank(self):
        '''
        判断信息是否全部都填写
        '''
        name = self.new_window.name.text()
        if not name:
            return True
        elif not self.new_window.male.isChecked() and not self.new_window.male.isChecked():
            return True
        telephone = self.new_window.telephone.text()
        if not telephone:
            return True
        address = self.new_window.address.text()
        if not address:
            return True

        return False


    def add(self):
        '''
        获取 new window里的名字 然后新加人脸
        :return:
        '''

        if self.isblank():
            # 弹窗警告
            qw = QWidget()
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("icons/love.png"), QtGui.QIcon.Normal,
                           QtGui.QIcon.Off)
            QMessageBox.setWindowIcon(qw, icon)
            QMessageBox.information(qw, "提示", "请完整填写信息 !", QMessageBox.Ok)
            return
        self.name = self.new_window.name.text()
        if self.new_window.male.isChecked():
            sex = '男'
        elif self.new_window.female.isChecked():
            sex = '女'


        telephone = self.new_window.telephone.text()
        address = self.new_window.address.text()
        headers = ['T', 'R', 'H']
        departments = ['技术部', '研发部', '人力资源部']
        idx = self.new_window.job.currentIndex()

        header = headers[idx]
        department = departments[idx]

        i = 0
        self.id = header + '0000' + str(i)
        while len(self.peron_db.search(self.id)) > 0:
            i += 1
            self.id = header + '0000' + str(i)
        self.peron_db.insert(self.id, self.name, sex, telephone, address, department)

        global person_name
        person_name = str(self.name)
        self.backend.start()
        self.new_widget.close()


    def triggered(self):
        '''
        绑定一些事件
        :return:
        '''
        # self.add_new_person.clicked.connect(self.backend.start)
        self.backend.signal.connect(self.display_info)
        self.log.clicked.connect(self.show_table)
        self.backend.finished.connect(self.show_success)


    def show_success(self):
        '''
        显示录入成功界面
        :return:
        '''
        # 弹出一个窗口请牢记您的员工号
        self.success_window = Success_window()
        self.success_widget = QWidget()
        self.success_window.setupUi(self.success_widget)
        self.success_window.id.setText(self.id)
        self.success_window.label.setText('恭喜 {} 录入成功!'.format(self.name))
        self.success_widget.show()

    def display_info(self, info):
        '''
        :return:
        '''
        self.display.setText(info)

    def show_table(self):
        '''
        展示签到记录
        :return:
        '''

        data = self.record_db.get_table_value()

        self.record_window = Record_window()
        self.record_widgt = QWidget()
        self.record_window.setupUi(self.record_widgt)
        self.record_window.insert_data(data)
        self.record_widgt.show()


    def exit(self):
        '''

        :return:
        '''
        self.peron_db.close()
        self.record_db.close()

    def play(self):

        camera.captureCurrentFrame()
        frames, boxs  = get_face(camera.currentFrame)
        tags = []
        if len(boxs) > 0:
            ### 预测人脸并画框显示

            if self.sign_fg:
                print(self.finished)
                if self.finished == len(self.comman) - 1:
                    print('完成!')
                    self.tip = 'Great'
                    self.sign_fg = False

                elif self.comman[self.finished] == 0:
                    self.tip = 'Move your eyes'
                else:
                    self.tip = 'Open your mouth'
            for f in frames:
                if 0 not in f.shape:
                    pots = getPointsImg(f)

                    if len(pots) > 0 and self.sign_fg:
                        # 如果开始签到
                        if self.comman[self.finished] == 0 and eye(pots):
                            self.finished += 1
                            # print('眨眼:{} 次'.format(self.eye_times))
                        elif self.comman[self.finished] == 1 and mouth(pots):
                            self.finished += 1
                            # print('嘴巴张开:{} 次'.format(self.mouth_time))
                    try:
                        f = process_img(f)
                    except:
                        return
                    tag = self.facenet.predict(f)
                    if not self.sign_fg and self.finished != 0:
                        self.finished = 0
                        current_time = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
                        id = self.sign_window.input.toPlainText()
                        # 判断 id 和 检测人名是否匹配
                        res = self.peron_db.search(id)
                        print(id, '###', res)
                        if tag == res[0][1]:
                            # 匹配成功
                            info = '-- {} {} 签到成功!'.format(id, tag) + current_time
                            self.record_db.insert(id, tag, current_time)
                        else:
                            info = '-- {} {} 签到失败! 员工号和名字不匹配 !'.format(id, tag) + current_time

                        self.display.append(info)
                    tags.append(tag)
            pass
        self.imge = camera.transfer2QImage(boxs, tags, self.tip)
        self.widget.setPixmap(self.imge)
        self.widget.setScaledContents(True)



    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "FaceWindow"))
        self.groupBox_2.setTitle(_translate("Form", "Menu"))
        self.sign.setText(_translate("Form", "签到"))
        self.log.setText(_translate("Form", "签到记录"))
        self.add_new_person.setText(_translate("Form", "新人录入"))
        self.exit.setText(_translate("Form", "退出系统"))
        self.groupBox.setTitle(_translate("Form", "camera"))
        self.groupBox_3.setTitle(_translate("Form", "Information"))
Beispiel #5
0
    parser.add_argument('--detect_multiple_faces',
                        type=bool,
                        help='Detect and align multiple faces per image.',
                        default=True)
    return parser.parse_args(argv)


if __name__ == '__main__':

    args = parse_arguments(sys.argv[1:])
    print('Loading SVM...')
    with open('./models/classifier.pkl', 'rb') as file:
        classifier = pickle.load(file)
    names = np.load('./sample_data/names.npy')
    print('Loading Facenet...')
    net = Facenet()

    cv2.namedWindow('camera')
    cv2.namedWindow('photo')
    cv2.namedWindow('profile_photo')
    cv2.namedWindow('profile_text')

    vc = cv2.VideoCapture(0)
    vc.set(3, args.width)
    vc.set(4, args.height)
    size = (300, 300)
    threshold = 0.1

    if vc.isOpened():
        ret_val, frame = vc.read()
    else:
Beispiel #6
0
import numpy as np
from PIL import Image

from facenet import Facenet

if __name__ == "__main__":
    model = Facenet()

    while True:
        image_1 = input('Input image_1 filename:')
        try:
            image_1 = Image.open(image_1)
        except:
            print('Image_1 Open Error! Try again!')
            continue

        image_2 = input('Input image_2 filename:')
        try:
            image_2 = Image.open(image_2)
        except:
            print('Image_2 Open Error! Try again!')
            continue

        probability = model.detect_image(image_1, image_2)
        print(probability)