std::vector< std::vector< std::vector<double> > > NeuralNetwork::readDataFromFile(std::string fpath){ std::vector< std::vector<double> > inputMatrix; std::vector< std::vector<double> > outputMatrix; std::ifstream trainingFile(fpath); std::string line; while(getline(trainingFile, line)){ //structure is x_1,...,x_n y_1,y_2,...,y_m (comma and space separated) int spacePosition = (int)line.find(" "); int lastCommaPosition = -1; int nextCommaPosition = (int)line.find(",",lastCommaPosition+1); //get inputs std::vector<double> input; while(nextCommaPosition != std::string::npos && nextCommaPosition < spacePosition){ input.push_back(stod(line.substr(lastCommaPosition+1,nextCommaPosition))); lastCommaPosition = nextCommaPosition; nextCommaPosition = (int)line.find(",",nextCommaPosition+1); } input.push_back(stod(line.substr(lastCommaPosition+1,spacePosition))); //get outputs std::vector<double> output; lastCommaPosition = spacePosition; nextCommaPosition = (int)line.find(",",lastCommaPosition+1); while(nextCommaPosition != std::string::npos && nextCommaPosition < line.length()){ output.push_back(stod(line.substr(lastCommaPosition+1,nextCommaPosition))); lastCommaPosition = nextCommaPosition; nextCommaPosition = (int)line.find(",",lastCommaPosition+1); } output.push_back(stod(line.substr(lastCommaPosition+1))); //add these training data points to the training matrices inputMatrix.push_back(input); outputMatrix.push_back(output); } trainingFile.close(); std::vector< std::vector< std::vector<double> > > dataFromFile; dataFromFile.push_back(inputMatrix); dataFromFile.push_back(outputMatrix); return dataFromFile; }
void LRMachine::loadTrainingSet(std::string filename) { // std::cout << "I'm loading training set with the LRMachine from " << filename << std::endl; std::string line; std::ifstream trainingFile(filename.c_str()); if(trainingFile.is_open()){ while(std::getline(trainingFile,line)) { Sample tmp; tmp.setInput(Utils::vStovD(Utils::split(line,';'))); std::getline(trainingFile,line); std::vector<int> res; res.push_back(atoi(line.c_str())); tmp.setResult(res); C_trainingSet.push_back(tmp); } trainingFile.close(); } else{ std::cout << "Unable to open file" << std::endl; } }
void FacialFeatureRecognizerTest::compareSmileFrownSimilarFacesTest() { Ptr<FaceRecognizer> model = createFisherFaceRecognizer(); FacialFeatureRecognizer recognizer(model, 0, NULL, NULL, NULL); QString trainingFile("/home/zane/Documents/COS301/training.xml"); recognizer.loadTrainingFromXML(trainingFile); Mat face1 = imread("../../testFiles/FaceRec/barack_smile.jpg", CV_LOAD_IMAGE_UNCHANGED); Mat face2 = imread("../../testFiles/FaceRec/barack_frown.jpg", CV_LOAD_IMAGE_UNCHANGED); string faceCascade = "/home/zane/Documents/COS301/MainProject/testFiles/haarcascade_frontalface_alt2.xml"; Filter* faceDetect = new FaceDetectFilter(faceCascade); Filter* preProc = new PreProcessingFilter(140, 150); ImageData* data1 = new ImageData(face1, 0); data1 = faceDetect->filter(data1); data1 = preProc->filter(data1); ImageData* data2 = new ImageData(face2, 0); data2 = faceDetect->filter(data2); data2 = preProc->filter(data2); double expected = 5800; double actual = recognizer.compareFaces(data1->faces[0], data2->faces[0]); QVERIFY(actual <= expected); }