246 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
						|
//
 | 
						|
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
						|
//
 | 
						|
//  By downloading, copying, installing or using the software you agree to this license.
 | 
						|
//  If you do not agree to this license, do not download, install,
 | 
						|
//  copy or use the software.
 | 
						|
//
 | 
						|
//
 | 
						|
//                        Intel License Agreement
 | 
						|
//                For Open Source Computer Vision Library
 | 
						|
//
 | 
						|
// Copyright (C) 2000, Intel Corporation, all rights reserved.
 | 
						|
// Third party copyrights are property of their respective owners.
 | 
						|
//
 | 
						|
// Redistribution and use in source and binary forms, with or without modification,
 | 
						|
// are permitted provided that the following conditions are met:
 | 
						|
//
 | 
						|
//   * Redistribution's of source code must retain the above copyright notice,
 | 
						|
//     this list of conditions and the following disclaimer.
 | 
						|
//
 | 
						|
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
						|
//     this list of conditions and the following disclaimer in the documentation
 | 
						|
//     and/or other materials provided with the distribution.
 | 
						|
//
 | 
						|
//   * The name of Intel Corporation may not be used to endorse or promote products
 | 
						|
//     derived from this software without specific prior written permission.
 | 
						|
//
 | 
						|
// This software is provided by the copyright holders and contributors "as is" and
 | 
						|
// any express or implied warranties, including, but not limited to, the implied
 | 
						|
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
						|
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
						|
// indirect, incidental, special, exemplary, or consequential damages
 | 
						|
// (including, but not limited to, procurement of substitute goods or services;
 | 
						|
// loss of use, data, or profits; or business interruption) however caused
 | 
						|
// and on any theory of liability, whether in contract, strict liability,
 | 
						|
// or tort (including negligence or otherwise) arising in any way out of
 | 
						|
// the use of this software, even if advised of the possibility of such damage.
 | 
						|
//
 | 
						|
//M*/
 | 
						|
 | 
						|
/*
 | 
						|
 * createsamples.cpp
 | 
						|
 *
 | 
						|
 * Create test/training samples
 | 
						|
 */
 | 
						|
 | 
						|
#include <cstdio>
 | 
						|
#include <cstring>
 | 
						|
#include <cstdlib>
 | 
						|
#include <cmath>
 | 
						|
#include <ctime>
 | 
						|
 | 
						|
using namespace std;
 | 
						|
 | 
						|
#include "cvhaartraining.h"
 | 
						|
 | 
						|
int main( int argc, char* argv[] )
 | 
						|
{
 | 
						|
    int i = 0;
 | 
						|
    char* nullname   = (char*)"(NULL)";
 | 
						|
    char* vecname    = NULL; /* .vec file name */
 | 
						|
    char* infoname   = NULL; /* file name with marked up image descriptions */
 | 
						|
    char* imagename  = NULL; /* single sample image */
 | 
						|
    char* bgfilename = NULL; /* background */
 | 
						|
    int num = 1000;
 | 
						|
    int bgcolor = 0;
 | 
						|
    int bgthreshold = 80;
 | 
						|
    int invert = 0;
 | 
						|
    int maxintensitydev = 40;
 | 
						|
    double maxxangle = 1.1;
 | 
						|
    double maxyangle = 1.1;
 | 
						|
    double maxzangle = 0.5;
 | 
						|
    int showsamples = 0;
 | 
						|
    /* the samples are adjusted to this scale in the sample preview window */
 | 
						|
    double scale = 4.0;
 | 
						|
    int width  = 24;
 | 
						|
    int height = 24;
 | 
						|
 | 
						|
    srand((unsigned int)time(0));
 | 
						|
 | 
						|
    if( argc == 1 )
 | 
						|
    {
 | 
						|
        printf( "Usage: %s\n  [-info <collection_file_name>]\n"
 | 
						|
                "  [-img <image_file_name>]\n"
 | 
						|
                "  [-vec <vec_file_name>]\n"
 | 
						|
                "  [-bg <background_file_name>]\n  [-num <number_of_samples = %d>]\n"
 | 
						|
                "  [-bgcolor <background_color = %d>]\n"
 | 
						|
                "  [-inv] [-randinv] [-bgthresh <background_color_threshold = %d>]\n"
 | 
						|
                "  [-maxidev <max_intensity_deviation = %d>]\n"
 | 
						|
                "  [-maxxangle <max_x_rotation_angle = %f>]\n"
 | 
						|
                "  [-maxyangle <max_y_rotation_angle = %f>]\n"
 | 
						|
                "  [-maxzangle <max_z_rotation_angle = %f>]\n"
 | 
						|
                "  [-show [<scale = %f>]]\n"
 | 
						|
                "  [-w <sample_width = %d>]\n  [-h <sample_height = %d>]\n",
 | 
						|
                argv[0], num, bgcolor, bgthreshold, maxintensitydev,
 | 
						|
                maxxangle, maxyangle, maxzangle, scale, width, height );
 | 
						|
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for( i = 1; i < argc; ++i )
 | 
						|
    {
 | 
						|
        if( !strcmp( argv[i], "-info" ) )
 | 
						|
        {
 | 
						|
            infoname = argv[++i];
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-img" ) )
 | 
						|
        {
 | 
						|
            imagename = argv[++i];
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-vec" ) )
 | 
						|
        {
 | 
						|
            vecname = argv[++i];
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-bg" ) )
 | 
						|
        {
 | 
						|
            bgfilename = argv[++i];
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-num" ) )
 | 
						|
        {
 | 
						|
            num = atoi( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-bgcolor" ) )
 | 
						|
        {
 | 
						|
            bgcolor = atoi( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-bgthresh" ) )
 | 
						|
        {
 | 
						|
            bgthreshold = atoi( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-inv" ) )
 | 
						|
        {
 | 
						|
            invert = 1;
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-randinv" ) )
 | 
						|
        {
 | 
						|
            invert = CV_RANDOM_INVERT;
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-maxidev" ) )
 | 
						|
        {
 | 
						|
            maxintensitydev = atoi( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-maxxangle" ) )
 | 
						|
        {
 | 
						|
            maxxangle = atof( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-maxyangle" ) )
 | 
						|
        {
 | 
						|
            maxyangle = atof( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-maxzangle" ) )
 | 
						|
        {
 | 
						|
            maxzangle = atof( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-show" ) )
 | 
						|
        {
 | 
						|
            showsamples = 1;
 | 
						|
            if( i+1 < argc && strlen( argv[i+1] ) > 0 && argv[i+1][0] != '-' )
 | 
						|
            {
 | 
						|
                double d;
 | 
						|
                d = strtod( argv[i+1], 0 );
 | 
						|
                if( d != -HUGE_VAL && d != HUGE_VAL && d > 0 ) scale = d;
 | 
						|
                ++i;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-w" ) )
 | 
						|
        {
 | 
						|
            width = atoi( argv[++i] );
 | 
						|
        }
 | 
						|
        else if( !strcmp( argv[i], "-h" ) )
 | 
						|
        {
 | 
						|
            height = atoi( argv[++i] );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    printf( "Info file name: %s\n", ((infoname == NULL) ?   nullname : infoname ) );
 | 
						|
    printf( "Img file name: %s\n",  ((imagename == NULL) ?  nullname : imagename ) );
 | 
						|
    printf( "Vec file name: %s\n",  ((vecname == NULL) ?    nullname : vecname ) );
 | 
						|
    printf( "BG  file name: %s\n",  ((bgfilename == NULL) ? nullname : bgfilename ) );
 | 
						|
    printf( "Num: %d\n", num );
 | 
						|
    printf( "BG color: %d\n", bgcolor );
 | 
						|
    printf( "BG threshold: %d\n", bgthreshold );
 | 
						|
    printf( "Invert: %s\n", (invert == CV_RANDOM_INVERT) ? "RANDOM"
 | 
						|
                                : ( (invert) ? "TRUE" : "FALSE" ) );
 | 
						|
    printf( "Max intensity deviation: %d\n", maxintensitydev );
 | 
						|
    printf( "Max x angle: %g\n", maxxangle );
 | 
						|
    printf( "Max y angle: %g\n", maxyangle );
 | 
						|
    printf( "Max z angle: %g\n", maxzangle );
 | 
						|
    printf( "Show samples: %s\n", (showsamples) ? "TRUE" : "FALSE" );
 | 
						|
    if( showsamples )
 | 
						|
    {
 | 
						|
        printf( "Scale: %g\n", scale );
 | 
						|
    }
 | 
						|
    printf( "Width: %d\n", width );
 | 
						|
    printf( "Height: %d\n", height );
 | 
						|
 | 
						|
    /* determine action */
 | 
						|
    if( imagename && vecname )
 | 
						|
    {
 | 
						|
        printf( "Create training samples from single image applying distortions...\n" );
 | 
						|
 | 
						|
        cvCreateTrainingSamples( vecname, imagename, bgcolor, bgthreshold, bgfilename,
 | 
						|
                                 num, invert, maxintensitydev,
 | 
						|
                                 maxxangle, maxyangle, maxzangle,
 | 
						|
                                 showsamples, width, height );
 | 
						|
 | 
						|
        printf( "Done\n" );
 | 
						|
    }
 | 
						|
    else if( imagename && bgfilename && infoname )
 | 
						|
    {
 | 
						|
        printf( "Create test samples from single image applying distortions...\n" );
 | 
						|
 | 
						|
        cvCreateTestSamples( infoname, imagename, bgcolor, bgthreshold, bgfilename, num,
 | 
						|
            invert, maxintensitydev,
 | 
						|
            maxxangle, maxyangle, maxzangle, showsamples, width, height );
 | 
						|
 | 
						|
        printf( "Done\n" );
 | 
						|
    }
 | 
						|
    else if( infoname && vecname )
 | 
						|
    {
 | 
						|
        int total;
 | 
						|
 | 
						|
        printf( "Create training samples from images collection...\n" );
 | 
						|
 | 
						|
        total = cvCreateTrainingSamplesFromInfo( infoname, vecname, num, showsamples,
 | 
						|
                                                 width, height );
 | 
						|
 | 
						|
        printf( "Done. Created %d samples\n", total );
 | 
						|
    }
 | 
						|
    else if( vecname )
 | 
						|
    {
 | 
						|
        printf( "View samples from vec file (press ESC to exit)...\n" );
 | 
						|
 | 
						|
        cvShowVecSamples( vecname, width, height, scale );
 | 
						|
 | 
						|
        printf( "Done\n" );
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        printf( "Nothing to do\n" );
 | 
						|
    }
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 |