def __init__(self):
                # initializebevideo stream
                self.video_stream = cv2.VideoCapture(
                    VIDEO_PREDICTOR.camera_source)
                self.face_detector = cv2.CascadeClassifier(
                    VIDEO_PREDICTOR.face_detection_classifier)
                self.shape_predictor = None
                self.shape_predictor = dlib.shape_predictor(
                    DATASET.shape_predictor_path)

                model = None
                with tf.Graph().as_default():
                    network = build_model(
                        use_landmarks=True,
                        use_hog_and_landmarks=True,
                        use_hog_sliding_window_and_landmarks=True)
                    model = DNN(network)
                    if os.path.isfile(
                            TRAINING.save_model_path_landmarks_hog_sw):
                        model.load(TRAINING.save_model_path_landmarks_hog_sw)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAINING.save_model_path_landmarks_hog_sw))

                self.model = model
                self.last_predicted_time = 0
                self.last_predicted_confidence = 0
                self.last_predicted_emotion = ""
def load_model():
    model = None
    with tf.Graph().as_default():
        print("loading pretrained model...")
        network = build_model(use_landmarks=True,
                              use_hog_and_landmarks=True,
                              use_hog_sliding_window_and_landmarks=True)
        model = DNN(network)
        if os.path.isfile(TRAINING.save_model_path_landmarks_hog_sw):
            model.load(TRAINING.save_model_path_landmarks_hog_sw)
        else:
            print("Error: file '{}' not found".format(
                TRAINING.save_model_path_landmarks_hog_sw))
    return model
    def LoadTable(self):
        # SVM
        def evaluate(model, X, Y):
            predicted_Y = model.predict(X)
            accuracy = accuracy_score(Y, predicted_Y)
            return accuracy

        def evaluate_cnn(model, X, X2, Y, use_landmarks=False):
            if use_landmarks:
                accuracy = model.evaluate([X, X2], Y)
            else:
                accuracy = model.evaluate(X, Y)
            return accuracy[0]

        lstfeature = ["landmarks", "landmarks_and_hog", "landmarks_and_hog_sw"]
        for feature in lstfeature:
            model = None
            with tf.Graph().as_default():
                print("loading pretrained model...")
                if (feature == "landmarks_and_hog"):
                    data, validation, test = load_data_svm(validation=True,
                                                           test=True,
                                                           feature=feature)
                    if os.path.isfile(
                            TRAININGSVM.save_model_path_landmarks_hog):
                        with open(TRAININGSVM.save_model_path_landmarks_hog,
                                  'rb') as f:
                            model = cPickle.load(f)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAININGSVM.save_model_path_landmarks_hog))
                    print("--")
                    print("Validation samples landmarks_and_hog: {}".format(
                        len(validation['Y'])))
                    print("Test samples landmarks_and_hog: {}".format(
                        len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate(model, validation['X'],
                                                   validation['Y'])
                    print("  - validation accuracy = {0:.1f}".format(
                        validation_accuracy * 100))
                    test_accuracy = evaluate(model, test['X'], test['Y'])
                    print("  - test accuracy = {0:.1f}".format(test_accuracy *
                                                               100))
                    print(
                        "  - evalution time = {0:.1f} sec".format(time.time() -
                                                                  start_time))
                    PARAMETERINPUT.Validation_faceLandmarksHoG_svm = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_faceLandmarksHoG_svm = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_faceLandmarksHoG_svm = "{0:.1f}".format(
                        time.time() - start_time)
                elif (feature == "landmarks_and_hog_sw"):
                    data, validation, test = load_data_svm(validation=True,
                                                           test=True,
                                                           feature=feature)
                    if os.path.isfile(
                            TRAININGSVM.save_model_path_landmarks_hog_sw):
                        with open(TRAININGSVM.save_model_path_landmarks_hog_sw,
                                  'rb') as f:
                            model = cPickle.load(f)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAININGSVM.save_model_path_landmarks_hog_sw))
                    print("--")
                    print("Validation samples landmarks_and_hog_sw: {}".format(
                        len(validation['Y'])))
                    print("Test samples landmarks_and_hog_sw: {}".format(
                        len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate(model, validation['X'],
                                                   validation['Y'])
                    print("  - validation accuracy = {0:.1f}".format(
                        validation_accuracy * 100))
                    test_accuracy = evaluate(model, test['X'], test['Y'])
                    print("  - test accuracy = {0:.1f}".format(test_accuracy *
                                                               100))
                    print(
                        "  - evalution time = {0:.1f} sec".format(time.time() -
                                                                  start_time))
                    PARAMETERINPUT.Validation_faceLandmarksHoGSlidingWindow_svm = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_faceLandmarksHoGSlidingWindow_svm = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_faceLandmarksHoGSlidingWindow_svm = "{0:.1f}".format(
                        time.time() - start_time)
                else:
                    data, validation, test = load_data_svm(validation=True,
                                                           test=True,
                                                           feature=feature)
                    if os.path.isfile(TRAININGSVM.save_model_path_landmarks):
                        with open(TRAININGSVM.save_model_path_landmarks,
                                  'rb') as f:
                            model = cPickle.load(f)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAININGSVM.save_model_path_landmarks))
                    print("--")
                    print("Validation samples landmarks: {}".format(
                        len(validation['Y'])))
                    print("Test samples landmarks: {}".format(len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate(model, validation['X'],
                                                   validation['Y'])
                    print("  - validation accuracy = {0:.1f}".format(
                        validation_accuracy * 100))
                    test_accuracy = evaluate(model, test['X'], test['Y'])
                    print("  - test accuracy = {0:.1f}".format(test_accuracy *
                                                               100))
                    print(
                        "  - evalution time = {0:.1f} sec".format(time.time() -
                                                                  start_time))
                    PARAMETERINPUT.Validation_faceLandmarks_svm = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_faceLandmarks_svm = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_faceLandmarks_svm = "{0:.1f}".format(
                        time.time() - start_time)

        #CNN
        lstfeature = [
            "landmarks", "landmarks_and_hog", "raw", "landmarks_and_hog_sw"
        ]
        for feature in lstfeature:
            model = None
            with tf.Graph().as_default():
                print("loading pretrained model...")
                if (feature == "landmarks_and_hog"):
                    data, validation, test = load_data_cnn(
                        validation=True,
                        test=True,
                        use_landmarks=False,
                        use_hog_and_landmarks=True,
                        use_hog_sliding_window_and_landmarks=False)
                    network = build_model(
                        use_landmarks=True,
                        use_hog_and_landmarks=True,
                        use_hog_sliding_window_and_landmarks=False)
                    model = DNN(network)
                    if os.path.isfile(TRAINING.save_model_path_landmarks_hog):
                        model.load(TRAINING.save_model_path_landmarks_hog)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAINING.save_model_path_landmarks_hog))

                    print("--")
                    print("Validation samples: {}".format(len(
                        validation['Y'])))
                    print("Test samples: {}".format(len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate_cnn(model,
                                                       validation['X'],
                                                       validation['X2'],
                                                       validation['Y'],
                                                       use_landmarks=True)
                    print(
                        "  - validation accuracy landmarks_and_hog = {0:.1f}".
                        format(validation_accuracy * 100))
                    test_accuracy = evaluate_cnn(model,
                                                 test['X'],
                                                 test['X2'],
                                                 test['Y'],
                                                 use_landmarks=True)
                    print(
                        "  - test accuracy landmarks_and_hog = {0:.1f}".format(
                            test_accuracy * 100))
                    print("  - evalution time landmarks_and_hog = {0:.1f} sec".
                          format(time.time() - start_time))
                    PARAMETERINPUT.Validation_faceLandmarksHoG_cnn = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_faceLandmarksHoG_cnn = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_faceLandmarksHoG_cnn = "{0:.1f}".format(
                        time.time() - start_time)
                elif (feature == "landmarks_and_hog_sw"):
                    data, validation, test = load_data_cnn(
                        validation=True,
                        test=True,
                        use_landmarks=True,
                        use_hog_and_landmarks=True,
                        use_hog_sliding_window_and_landmarks=True)
                    network = build_model(
                        use_landmarks=True,
                        use_hog_and_landmarks=True,
                        use_hog_sliding_window_and_landmarks=True)
                    model = DNN(network)
                    if os.path.isfile(
                            TRAINING.save_model_path_landmarks_hog_sw):
                        model.load(TRAINING.save_model_path_landmarks_hog_sw)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAINING.save_model_path_landmarks_hog_sw))

                    print("--")
                    print("Validation samples: {}".format(len(
                        validation['Y'])))
                    print("Test samples: {}".format(len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate_cnn(model,
                                                       validation['X'],
                                                       validation['X2'],
                                                       validation['Y'],
                                                       use_landmarks=True)
                    print(
                        "  - validation accuracy landmarks_and_hog_sw = {0:.1f}"
                        .format(validation_accuracy * 100))
                    test_accuracy = evaluate_cnn(model,
                                                 test['X'],
                                                 test['X2'],
                                                 test['Y'],
                                                 use_landmarks=True)
                    print("  - test accuracy landmarks_and_hog_sw = {0:.1f}".
                          format(test_accuracy * 100))
                    print(
                        "  - evalution time landmarks_and_hog_sw = {0:.1f} sec"
                        .format(time.time() - start_time))
                    PARAMETERINPUT.Validation_faceLandmarksHoGSlidingWindow_cnn = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_faceLandmarksHoGSlidingWindow_cnn = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_faceLandmarksHoGSlidingWindow_cnn = "{0:.1f}".format(
                        time.time() - start_time)
                elif (feature == "landmarks"):
                    data, validation, test = load_data_cnn(
                        validation=True,
                        test=True,
                        use_landmarks=True,
                        use_hog_and_landmarks=False,
                        use_hog_sliding_window_and_landmarks=False)
                    network = build_model(
                        use_landmarks=True,
                        use_hog_and_landmarks=False,
                        use_hog_sliding_window_and_landmarks=False)
                    model = DNN(network)
                    if os.path.isfile(TRAINING.save_model_path_landmarks):
                        model.load(TRAINING.save_model_path_landmarks)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAINING.save_model_path_landmarks))

                    print("--")
                    print("Validation samples: {}".format(len(
                        validation['Y'])))
                    print("Test samples: {}".format(len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate_cnn(model,
                                                       validation['X'],
                                                       validation['X2'],
                                                       validation['Y'],
                                                       use_landmarks=True)
                    print("  - validation accuracy landmarks = {0:.1f}".format(
                        validation_accuracy * 100))
                    test_accuracy = evaluate_cnn(model,
                                                 test['X'],
                                                 test['X2'],
                                                 test['Y'],
                                                 use_landmarks=True)
                    print("  - test accuracy landmarks = {0:.1f}".format(
                        test_accuracy * 100))
                    print("  - evalution time landmarks = {0:.1f} sec".format(
                        time.time() - start_time))
                    PARAMETERINPUT.Validation_faceLandmarks_cnn = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_faceLandmarks_cnn = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_faceLandmarks_cnn = "{0:.1f}".format(
                        time.time() - start_time)

                else:
                    data, validation, test = load_data(validation=True,
                                                       test=True)
                    network = build_model()
                    model = DNN(network)
                    # Testing phase : load saved model and evaluate on test dataset
                    print("start evaluation...")
                    print("loading pretrained model...")
                    if os.path.isfile(TRAINING.save_model_path_raw):
                        model.load(TRAINING.save_model_path_raw)
                    else:
                        print("Error: file '{}' not found".format(
                            TRAINING.save_model_path_raw))
                        exit()

                    if not NETWORK.use_landmarks:
                        validation['X2'] = None
                        test['X2'] = None

                    print("--")
                    print("Validation samples: {}".format(len(
                        validation['Y'])))
                    print("Test samples: {}".format(len(test['Y'])))
                    print("--")
                    print("evaluating...")
                    start_time = time.time()
                    validation_accuracy = evaluate_cnn(model, validation['X'],
                                                       validation['X2'],
                                                       validation['Y'])
                    print("  - validation accuracy raw = {0:.1f}".format(
                        validation_accuracy * 100))
                    test_accuracy = evaluate_cnn(model, test['X'], test['X2'],
                                                 test['Y'])
                    print("  - test accuracy raw = {0:.1f}".format(
                        test_accuracy * 100))
                    print("  - evalution time raw = {0:.1f} sec".format(
                        time.time() - start_time))
                    PARAMETERINPUT.Validation_raw_cnn = "{0:.1f}".format(
                        validation_accuracy * 100)
                    PARAMETERINPUT.Test_raw_cnn = "{0:.1f}".format(
                        test_accuracy * 100)
                    PARAMETERINPUT.Time_raw_cnn = "{0:.1f}".format(
                        time.time() - start_time)

        self.treeview.insert(
            '',
            'end',
            text="CNN",
            values=(
                PARAMETERINPUT.Validation_raw_cnn,
                PARAMETERINPUT.Validation_faceLandmarks_cnn,
                PARAMETERINPUT.Validation_faceLandmarksHoG_cnn,
                PARAMETERINPUT.Validation_faceLandmarksHoGSlidingWindow_cnn))
        self.treeview.insert(
            '',
            'end',
            text="SVM",
            values=(
                '----', PARAMETERINPUT.Validation_faceLandmarks_svm,
                PARAMETERINPUT.Validation_faceLandmarksHoG_svm,
                PARAMETERINPUT.Validation_faceLandmarksHoGSlidingWindow_svm))

lstfeature = ["landmarks", "landmarks_and_hog", "raw", "landmarks_and_hog_sw"]
for feature in lstfeature:
    model = None
    with tf.Graph().as_default():
        print("loading pretrained model...")
        if (feature == "landmarks_and_hog"):
            data, validation, test = load_data_cnn(
                validation=True,
                test=True,
                use_landmarks=False,
                use_hog_and_landmarks=True,
                use_hog_sliding_window_and_landmarks=False)
            network = build_model(use_landmarks=True,
                                  use_hog_and_landmarks=True,
                                  use_hog_sliding_window_and_landmarks=False)
            model = DNN(network)
            if os.path.isfile(TRAINING.save_model_path_landmarks_hog):
                model.load(TRAINING.save_model_path_landmarks_hog)
            else:
                print("Error: file '{}' not found".format(
                    TRAINING.save_model_path_landmarks_hog))

            print("--")
            print("Validation samples: {}".format(len(validation['Y'])))
            print("Test samples: {}".format(len(test['Y'])))
            print("--")
            print("evaluating...")
            start_time = time.time()
            validation_accuracy = evaluate(model,