CvMat loadTrainingData() { CvMat pTrainPersonNumMat = null; // the person numbers during training CvFileStorage fileStorage; int i; // create a file-storage interface fileStorage = cvOpenFileStorage( "data/facedata.xml", // filename null, // memstorage CV_STORAGE_READ, // flags null); // encoding // Load the person names. personNames.clear(); // Make sure it starts as empty. nPersons = cvReadIntByName( fileStorage, // fs null, // map "nPersons", // name 0); // default_value // Load each person's name. for (i = 0; i < nPersons; i++) { String sPersonName; String varname = "personName_" + (i + 1); sPersonName = cvReadStringByName( fileStorage, // fs null, // map varname, ""); personNames.add(sPersonName); } // Load the data nEigens = cvReadIntByName( fileStorage, // fs null, // map "nEigens", 0); // default_value nTrainFaces = cvReadIntByName( fileStorage, null, // map "nTrainFaces", 0); // default_value Pointer pointer = cvReadByName( fileStorage, // fs null, // map "trainPersonNumMat"); // name pTrainPersonNumMat = new CvMat(pointer); pointer = cvReadByName( fileStorage, // fs null, // map "eigenValMat"); // name eigenValMat = new CvMat(pointer); pointer = cvReadByName( fileStorage, // fs null, // map "projectedTrainFaceMat"); // name projectedTrainFaceMat = new CvMat(pointer); pointer = cvReadByName( fileStorage, null, // map "avgTrainImg"); pAvgTrainImg = new IplImage(pointer); eigenVectArr = new IplImage[nTrainFaces]; for (i = 0; i < nEigens; i++) { String varname = "eigenVect_" + i; pointer = cvReadByName( fileStorage, null, // map varname); eigenVectArr[i] = new IplImage(pointer); } // release the file-storage interface cvReleaseFileStorage(fileStorage); final StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("People: "); if (nPersons > 0) { stringBuilder.append("<").append(personNames.get(0)).append(">"); } for (i = 1; i < nPersons; i++) { stringBuilder.append(", <").append(personNames.get(i)).append(">"); } return pTrainPersonNumMat; }
/** * Opens the training data from the file 'data/facedata.xml'. * * @param pTrainPersonNumMat * @return the person numbers during training, or null if not successful */ private CvMat loadTrainingData(String dataPath, String personName) { LOGGER.info("loading training data"); CvMat pTrainPersonNumMat = null; // the person numbers during training CvFileStorage fileStorage; int i; String dataFilePath = dataPath + "/" + personName + ".xml"; LOGGER.info("loading training data from " + dataFilePath); // create a file-storage interface fileStorage = cvOpenFileStorage( dataFilePath, // filename null, // memstorage CV_STORAGE_READ, // flags null); // encoding if (fileStorage == null) { LOGGER.severe("Can't open training database file '" + dataFilePath + "'."); return null; } // Load the person names. personNames.clear(); // Make sure it starts as empty. nPersons = cvReadIntByName(fileStorage, null, personName, 0); if (nPersons == 0) { LOGGER.severe("No people found in the training database 'data/facedata.xml'."); return null; } else { LOGGER.info(nPersons + " persons read from the training database"); } // Load each person's name. for (i = 0; i < nPersons; i++) { String sPersonName; String varname = "personName_" + (i + 1); sPersonName = cvReadStringByName( fileStorage, // fs null, // map varname, ""); personNames.add(sPersonName); } LOGGER.info("person names: " + personNames); // Load the data nEigens = cvReadIntByName( fileStorage, // fs null, // map "nEigens", 0); // default_value nTrainFaces = cvReadIntByName( fileStorage, null, // map "nTrainFaces", 0); // default_value Pointer pointer = cvReadByName( fileStorage, // fs null, // map "trainPersonNumMat"); // name pTrainPersonNumMat = new CvMat(pointer); pointer = cvReadByName( fileStorage, // fs null, // map "eigenValMat"); // name eigenValMat = new CvMat(pointer); pointer = cvReadByName( fileStorage, // fs null, // map "projectedTrainFaceMat"); // name projectedTrainFaceMat = new CvMat(pointer); pointer = cvReadByName( fileStorage, null, // map "avgTrainImg"); pAvgTrainImg = new IplImage(pointer); eigenVectArr = new IplImage[nTrainFaces]; for (i = 0; i <= nEigens; i++) { String varname = "eigenVect_" + i; pointer = cvReadByName( fileStorage, null, // map varname); eigenVectArr[i] = new IplImage(pointer); } // release the file-storage interface cvReleaseFileStorage(fileStorage); LOGGER.info( "Training data loaded (" + nTrainFaces + " training images of " + nPersons + " people)"); final StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("People: "); if (nPersons > 0) { stringBuilder.append("<").append(personNames.get(0)).append(">"); } for (i = 1; i < nPersons; i++) { stringBuilder.append(", <").append(personNames.get(i)).append(">"); } LOGGER.info(stringBuilder.toString()); return pTrainPersonNumMat; }