Example #1
0
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();

}