faceDetector::faceDetector() { FaceEnable = false; EyeEnable = false; NoseEnable = false; MouthEnable = false; FaceDetected = false; widthScale = 1.0; heightScale = 1.0; initClassifier(); }
int main(int argc, char* argv[]) { // parses the command line arguments std::string filename=""; eClassifierType cType=RBF; std::string cParam=""; eKernelType kType=Linear; std::string kScalar=""; std::string vParam=""; int width=400; int height=400; lti::dpoint ur(-1,-1); lti::dpoint ll(1,1); bool ok; for (int i=1; i<argc; i++) { if (*argv[i] == '-') { switch (argv[i][1]) { // dump parametes? case 'd': dumpParameters(); exit(0); break; // print help case '-': if (strcasecmp(&argv[i][2],"help")==0) { printHelp(); exit(0); } else { std::cerr << "Unknown option "<<argv[i]<<std::endl; } break; // classifier case 'c': if (i < argc-1) { ++i; if (strcasecmp(argv[i],"rbf") == 0) { cType=RBF; } else if (strcasecmp(argv[i],"mlp") == 0) { cType=MLP; } else if (strcasecmp(argv[i],"svm") == 0) { cType=SVM; } else if (strcasecmp(argv[i],"knn") == 0) { cType=KNN; } else { std::cerr << "Warning: Classifier " << argv[i] << " is not supported, using RBF instead\n"; } } else { std::cerr << "Missing argument to -c\n"; } break; // classifier parameters case 'p': if (i < argc-1) { cParam=argv[++i]; } else { std::cerr << "Missing argument to -p\n"; } break; // kernel case 'k': if (i < argc-1) { ++i; if (strcasecmp(argv[i],"linear") == 0) { kType=Linear; } else if (strcasecmp(argv[i],"polynomial") == 0) { kType=Polynomial; } else if (strcasecmp(argv[i],"radial") == 0) { kType=Radial; } else if (strcasecmp(argv[i],"sigmoid") == 0) { kType=Sigmoid; } else { std::cerr << "Warning: Kernel " << argv[i] << " is not supported using Linear\n"; } } else { std::cerr << "Missing argument to -k\n"; } break; // kernel parameter case 's': if (i < argc-1) { kScalar=argv[++i]; } else { std::cerr << "Missing argument to -s\n"; } break; // visualizer parameters case 'v': if (i < argc-1) { vParam=argv[++i]; } else { std::cerr << "Missing argument to -v\n"; } break; // image width case 'w': if (i < argc-1) { width=atoi(argv[++i]); } else { std::cerr << "Missing argument to -w\n"; } break; // image height case 'h': if (i < argc-1) { height=atoi(argv[++i]); } else { std::cerr << "Missing argument to -h\n"; } break; // range case 'r': ok = i < argc-1; if (ok) { ll.x=atof(&argv[++i][1]); } ok = ok && i < argc-1; if (ok) { ll.y=atof(argv[++i]); } ok = ok && i < argc-1; if (ok) { ur.x=atof(argv[++i]); } ok = ok && i < argc-1; if (ok) { ++i; int itmp; itmp=strlen(argv[i]); char stmp[itmp-1]; strncpy(stmp,argv[i],itmp-2); ur.y=atof(stmp); } if (!ok) { std::cerr << "Missing argument to -r or argument incomplete\n"; } break; // unknown option default: std::cerr << "Warning: Unknown option -" << argv[i][1] << std::endl; break; } } else { filename=argv[i]; if (i<argc-1) { std::cerr << "filename must be last argument, ignoring the rest.\n"; break; } } } if (filename.length() == 0) { std::cerr << "You need to give a file name.\n"; printHelp(); exit(1); } lti::supervisedInstanceClassifier* classifier=0; if (!initClassifier(classifier, cType, cParam, kType, kScalar)) { std::cerr << "Could not initialize classifier\n"; exit(1); } if (classifier==0) { std::cerr << "Classifier not initialized\n"; exit(1); } lti::dmatrix data; lti::ivector ids; if (!getData(filename,data,ids)) { std::string msg="Could not read data from file " + filename; std::cerr << msg << std::endl; exit(1); } if (!classifier->train(data,ids)) { std::cerr << "Could not train classifier on given data\n"; std::cerr << classifier->getStatusString() << std::endl; exit(1); } lti::classifier2DVisualizer::parameters vizParam; if (!initVisualizerParam(vizParam, vParam, width, height, ll, ur)) { std::cerr << "Could not initialize visualizer\n"; exit(1); } _my_viz.setParameters(vizParam); lti::image img(width,height); if (!_my_viz.apply(*classifier,data,img,ids)) { std::cerr << "Error visualizing the classification result\n"; } _my_viewer.show(img); _my_viewer.waitButtonPressed(); _my_viewer.hide(); lti::passiveWait(10000); delete classifier; classifier=0; lti::gtkServer::shutdown(); }