def perform_loocv_classifiers(args):
    # Instantiate Classifier    
    classifier = Classifier(classifier=None,
                            no_clusters=args.number_cluster,
                            no_samples=None)

    classifier.OsName = platform.system()
    print('Operating System: ', classifier.OsName)
    print('LOOCV Classification')

    classifier.test_name = args.test_name
    classifier.aggregateVideoFeatures = False
    if args.use_train_test_val:
        classifier.datasets = ['training', 'validation', 'test']

    classifier.base_path = args.base_path
    classifier.label_path = args.label_path

    # Send e-mail Process Start
    send_email_start(classifier)

    # train the model
    classifier.trainModelFV_LOOCV_Classifiers(extension=args.features_file_filter)
def perform_loocv_fusion(args):
    classifier = Classifier(classifier=SVC(kernel='linear'),
                            no_clusters=args.number_cluster,
                            no_samples=None)

    classifier.OsName = platform.system()
    print('Operating System: ', classifier.OsName)
    print('LOOCV Fusion')

    classifier.test_name = args.test_name
    classifier.aggregateVideoFeatures = False
    if args.use_train_test_val:
        classifier.datasets = ['training', 'validation', 'test']

    classifier.base_path = args.base_path
    classifier.base_path2 = args.base_path2
    classifier.features_file_filter = args.features_file_filter
    classifier.label_path = args.label_path

    # Send e-mail Process Start
    send_email_start(classifier, True)

    # train the model
    classifier.trainModelFV_LOOCV_Fusion()
def main():
    OsName = platform.system()
    print('Operating System: ', OsName)

    parser = argparse.ArgumentParser(
        description="Compute trajectory features from OpenPose points to Human Action Recognition"
    )

    parser.add_argument("--features_file_filter", type=str,
                        default='*.*',
                        help="Filter for features files")

    parser.add_argument("--base_path", type=str, required=True,
                        help="Base features path.")

    parser.add_argument("--base_path2", type=str,
                        help="Base features path2 for features fusion.")

    parser.add_argument("--output_features", type=str, required=True,
                        help="Output features file name.")

    parser.add_argument("--output_image", type=str, required=True,
                        help="Output image path.")

    parser.add_argument("--label_path", type=str,
                        help="Labels path.")

    parser.add_argument("--number_cluster", type=int,
                        default=20,
                        help="Number of cluster for FV.")

    parser.add_argument("--number_classes", type=int,
                        default=6,
                        help="Number of classes of dataset.")

    parser.add_argument("--mark_size", type=int,
                        default=100,
                        help="Size of the points.")

    parser.add_argument("--alpha", type=float,
                        default=0.6,
                        help="Proportional opacity of the points.")

    parser.add_argument("--use_train_test_val", type=int,
                        default=0,
                        help="True if dataset is divides into train/test/validation.")

    args = parser.parse_args()

    print(args)

    file_name = args.output_features

    if os.path.isfile(file_name):
        df = pd.read_csv(file_name, index_col=0)
        print(df.head())
        plotDataVisualization(df.drop('label', axis=1).values, df.label.values, 'load_full', args)

    else:
        classifier = Classifier(no_clusters=args.number_cluster)
        if args.use_train_test_val:
            classifier.datasets = ['training', 'validation', 'test']

        classifier.base_path = args.base_path
        classifier.base_path2 = args.base_path2
        classifier.label_path = args.label_path

        X, y = classifier.build_FV_Features()
        df = pd.DataFrame(X, y)
        df = df.reset_index()
        df = df.rename(columns={df.columns[0]: "label"})
        print(df.head())
        df.to_csv(file_name)

        plotDataVisualization(df.drop('label', axis=1).values, df.label.values, 'dataframe_full', args)
        plotDataVisualization(X, y, 'ndarray_full', args)