int ODFaceRecognizer::train()
    {
      vector<cv::Mat> images;
      vector<int> labels;
      try
      {
        read_csv(training_input_location_, images, labels);
      } catch(cv::Exception &e)
      {
        cerr << "Error opening file \"" << training_input_location_ << "\". Reason: " << e.msg << endl;
        exit(1);
      }
      cvrecognizer_->train(images, labels);
      FileUtils::createTrainingDir(getSpecificTrainingDataLocation());

      cvrecognizer_->save(getSpecificTrainingDataLocation() + "/trained." + TRAINED_DATA_EXT_);
      trained_ = true;

      //the training set has atleast one image
      im_width_ = images[0].cols;
      im_height_ = images[0].rows;
    }
    void ODFaceRecognizer::initDetector()
    {
      if(!trained_)
      {
        init();

        //get models in the directory
        std::vector<std::string> files;
        FileUtils::getFilesInDirectoryRec(getSpecificTrainingDataLocation(), TRAINED_DATA_EXT_, files);

        if (files.size() == 0)
        {
          std::cout << "FATAL: Trained data not found" << endl;
          exit(1);
        }

        //choose the first
        cvrecognizer_->load(files[0]);
      }
    }
	std::string DetectorCommon::getSpecificTrainingData()
	{
	  return getSpecificTrainingDataLocation() + "/" + trained_data_id_;
	}