void FacialFeatureRecognizer::processCase(int caseId) { DatabaseReader dbReader(databaseConnection); CaseManager* caseManager = new CaseManager(databaseConnection, caseId); QString filename = dbReader.getOriginalImageFilename(caseManager->getCaseId()); filename = "/home/zane/Documents/COS301/MainProject/QFRSSWeb/caseImages/" + filename; Mat imageTaken = imread(filename.toStdString(), CV_LOAD_IMAGE_UNCHANGED); ImageData* imageData = new ImageData(); imageData->image = imageTaken; imageData = faceDetectFilter->filter(imageData); if (imageData->faces.size() == 0) { caseManager->setProgress(-1); caseManager->setStatus("No faces in image"); return; } if (imageData->faces.size() > 1) { caseManager->setProgress(-1); caseManager->setStatus("More than one face in image"); return; } imageData = preProcessingFilter->filter(imageData); caseManager->setProgress(0); caseManager->setStatus("busy"); GetFaceDetailsResponse* response = dbReader.getAllFaceFilenamesAndIds(); vector<QString> faceFilenames = response->faceFilnames; vector<int> faceIds = response->ids; float size = faceFilenames.size(); for (unsigned int i = 0; i < faceFilenames.size(); i++) { Mat temp = imread(faceFilenames[i].toStdString(), CV_LOAD_IMAGE_UNCHANGED); double percentageMatch = compareFaces(imageData->faces[0], temp); if (percentageMatch <= threshold) { percentageMatch = scaleToPercentage(compareFaces(imageData->faces[0], temp)); caseManager->updateCaseStatus(faceIds[i], percentageMatch); } float progress = i / size * 100.0; caseManager->setProgress(progress); } caseManager->setStatus("finished"); }
ParticleInfo::ParticleInfo( const std::string& dbFile) { // Open a FileReader for the supplied db file FileReader dbReader(dbFile); if (dbReader.isValid()) { // Create variables std::string name; int pdg(0), charge(0); double mass(0.0); while (dbReader.nextLine()) { name = dbReader.getField<std::string>(1); if (dbReader.inputFailed()) { continue; } pdg = dbReader.getField<int>(2); if (dbReader.inputFailed()) { continue; } charge = dbReader.getField<int>(3); if (dbReader.inputFailed()) { continue; } mass = dbReader.getField<double>(4); if (dbReader.inputFailed()) { continue; } // Fill collections... name_to_id.insert(std::make_pair(name, pdg)); id_to_name.insert(std::make_pair(pdg, name)); id_to_charge.insert(std::make_pair(pdg, charge)); id_to_mass.insert(std::make_pair(pdg, mass)); } } }