//----------------------------------------------------------------------------- bool Root::parseServer(QDomNode& xmlnServer) { Q_ASSERT(!xmlnServer.isNull()); ServerPtr server = addServer(); SubjectLocker locker(server.get()); for (QDomElement xmln = xmln.firstChildElement(); !xmln.isNull(); xmln = xmln.nextSiblingElement()) { QString value = xmln.text(); if (xmln.tagName() == QString::fromLatin1("name")) server->setName_(value); else if (xmln.tagName() == QString::fromLatin1("host")) server->setHostname(value); else if (xmln.tagName() == QString::fromLatin1("port")) server->setPort(value); else if (xmln.tagName() == QString::fromLatin1("database")) { if (!parseDatabase(server, xmln)) return false; } } // backward compatibility with FR < 0.3.0 if (server->getName_().isEmpty()) server->setName_(server->getConnectionString()); server->setChildrenLoaded(true); return true; }
TEST(Matching, ValidDatabase) { std::vector<Datasheet> vec_database; const std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), sDatabase ); EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_TRUE( !vec_database.empty() ); }
TEST(Matching, ParseDatabaseNotExist) { std::vector<Datasheet> vec_database; Datasheet datasheet; const std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), sDatabase ); const std::string sModel = "NotExistModel"; EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_FALSE( getInfo( sModel, vec_database, datasheet ) ); }
TEST(Matching, ParseDatabaseCanon_EOS_1100D) { std::vector<Datasheet> vec_database; Datasheet datasheet; const std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), sDatabase ); const std::string sModel = "Canon EOS 1100D"; EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_TRUE( getInfo( sModel, vec_database, datasheet ) ); EXPECT_EQ( 22.2, datasheet.sensorSize_ ); }
TEST(Matching, ParseDatabaseNotExist) { std::vector<Datasheet> vec_database; Datasheet datasheet; std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), "cameraGenerated.txt" ); std::string sModel = "NotExistModel"; std::string sBrand = "NotExistBrand"; EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_FALSE( getInfo( sBrand, sModel, vec_database, datasheet ) ); }
TEST(Matching, ParseDatabaseA710_IS) { std::vector<Datasheet> vec_database; Datasheet datasheet; const std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), sDatabase ); const std::string sModel = "Canon PowerShot A710 IS"; EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_TRUE( getInfo( sModel, vec_database, datasheet ) ); EXPECT_EQ( "Canon PowerShot A710 IS", datasheet.model_ ); EXPECT_EQ( 5.75, datasheet.sensorSize_ ); }
TEST(Matching, ParseDatabaseCanon_EOS_1100D) { std::vector<Datasheet> vec_database; Datasheet datasheet; std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), "cameraGenerated.txt" ); std::string sModel = "Canon EOS 1100D"; std::string sBrand = "Canon"; EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_TRUE( getInfo( sBrand, sModel, vec_database, datasheet ) ); EXPECT_EQ( 22.2, datasheet._sensorSize ); }
TEST(Matching, ParseDatabaseSD900) { std::vector<Datasheet> vec_database; Datasheet datasheet; std::string sfileDatabase = stlplus::create_filespec( std::string(THIS_SOURCE_DIR), "cameraGenerated.txt" ); std::string sModel = "Canon PowerShot SD900"; std::string sBrand = "Canon"; EXPECT_TRUE( parseDatabase( sfileDatabase, vec_database ) ); EXPECT_TRUE( getInfo( sBrand, sModel, vec_database, datasheet ) ); EXPECT_EQ( "Canon", datasheet._brand ); EXPECT_EQ( "Canon PowerShot SD900", datasheet._model ); EXPECT_EQ( 7.11, datasheet._sensorSize ); }
void KeePassXmlStreamReader::parseFile(){ while(xmlReader.readNextStartElement()){ if(xmlReader.name() == "database"){ qDebug("Found database tag. Assuming KeePassX file format. Continuing with KeePassX specific parsing..."); parseDatabase(); }else if(xmlReader.name() == "PwmanXmlList"){ qDebug("Found PwmanXmlList tag. Assuming pwman3 file format. Continuing with pwman3 specific parsing..."); parsePwmanList(); } else{ qErrnoWarning("No Database found!"); } } qDebug("Leaving parseFile..."); }
int main(int argc, char **argv) { CmdLine cmd; std::string sImageDir; std::string sfileDatabase = ""; std::string sOutputDir = ""; double focalPixPermm = -1.0; cmd.add( make_option('i', sImageDir, "imageDirectory") ); cmd.add( make_option('d', sfileDatabase, "sensorWidthDatabase") ); cmd.add( make_option('o', sOutputDir, "outputDirectory") ); cmd.add( make_option('f', focalPixPermm, "focal") ); try { if (argc == 1) throw std::string("Invalid command line parameter."); cmd.process(argc, argv); } catch(const std::string& s) { std::cerr << "Usage: " << argv[0] << '\n' << "[-i|--imageDirectory]\n" << "[-d|--sensorWidthDatabase]\n" << "[-o|--outputDirectory]\n" << "[-f|--focal] (pixels)\n" << std::endl; std::cerr << s << std::endl; return EXIT_FAILURE; } std::cout << " You called : " <<std::endl << argv[0] << std::endl << "--imageDirectory " << sImageDir << std::endl << "--sensorWidthDatabase " << sfileDatabase << std::endl << "--outputDirectory " << sOutputDir << std::endl << "--focal " << focalPixPermm << std::endl; if ( !stlplus::folder_exists( sImageDir ) ) { std::cerr << "\nThe input directory doesn't exist" << std::endl; return EXIT_FAILURE; } if (sOutputDir.empty()) { std::cerr << "\nInvalid output directory" << std::endl; return EXIT_FAILURE; } if ( !stlplus::folder_exists( sOutputDir ) ) { if ( !stlplus::folder_create( sOutputDir )) { std::cerr << "\nCannot create output directory" << std::endl; return EXIT_FAILURE; } } std::vector<std::string> vec_image = stlplus::folder_files( sImageDir ); // Write the new file std::ofstream listTXT( stlplus::create_filespec( sOutputDir, "lists.txt" ).c_str() ); if ( listTXT ) { std::sort(vec_image.begin(), vec_image.end()); for ( std::vector<std::string>::const_iterator iter_image = vec_image.begin(); iter_image != vec_image.end(); iter_image++ ) { // Read meta data to fill width height and focalPixPermm std::string sImageFilename = stlplus::create_filespec( sImageDir, *iter_image ); size_t width = -1; size_t height = -1; std::auto_ptr<Exif_IO> exifReader (new Exif_IO_EasyExif() ); exifReader->open( sImageFilename ); // Consider the case where focal is provided std::ostringstream os; //If image do not contains meta data if ( !exifReader->doesHaveExifInfo() || focalPixPermm != -1) { Image<unsigned char> image; if (openMVG::ReadImage( sImageFilename.c_str(), &image)) { width = image.Width(); height = image.Height(); } else { Image<RGBColor> imageRGB; if (openMVG::ReadImage( sImageFilename.c_str(), &imageRGB)) { width = imageRGB.Width(); height = imageRGB.Height(); } else { Image<RGBAColor> imageRGBA; if (openMVG::ReadImage( sImageFilename.c_str(), &imageRGBA)) { width = imageRGBA.Width(); height = imageRGBA.Height(); } else continue; // image is not considered, cannot be read } } if ( focalPixPermm == -1) os << *iter_image << ";" << width << ";" << height << std::endl; else os << *iter_image << ";" << width << ";" << height << ";" << focalPixPermm << ";" << 0 << ";" << width/2.0 << ";" << 0 << ";" << focalPixPermm << ";" << height/2.0 << ";" << 0 << ";" << 0 << ";" << 1 << std::endl; } else // If image contains meta data { double focal = focalPixPermm; width = exifReader->getWidth(); height = exifReader->getHeight(); std::string sCamName = exifReader->getBrand(); std::string sCamModel = exifReader->getModel(); std::vector<Datasheet> vec_database; Datasheet datasheet; if ( parseDatabase( sfileDatabase, vec_database ) ) { if ( getInfo( sCamName, sCamModel, vec_database, datasheet ) ) { // The camera model was found in the database so we can compute it's approximated focal length double ccdw = datasheet._sensorSize; focal = std::max ( width, height ) * exifReader->getFocal() / ccdw; os << *iter_image << ";" << width << ";" << height << ";" << focal << ";" << sCamName << ";" << sCamModel << std::endl; } else { std::cout << "Camera \"" << sCamName << "\" model \"" << sCamModel << "\" doesn't exist in the database" << std::endl; os << *iter_image << ";" << width << ";" << height << ";" << sCamName << ";" << sCamModel << std::endl; } } else { std::cout << "Sensor width database \"" << sfileDatabase << "\" doesn't exist." << std::endl; std::cout << "Please consider add your camera model in the database." << std::endl; os << *iter_image << ";" << width << ";" << height << ";" << sCamName << ";" << sCamModel << std::endl; } } std::cout << os.str(); listTXT << os.str(); } } listTXT.close(); return EXIT_SUCCESS; }