void hgSgdGff3(char *inGff, char *outDir) /* hgSgdGff3 - Parse out SGD gff3 file into components. */ { FILE *codingFile = openInDir(outDir, "codingGenes.gff"); FILE *otherFile = openInDir(outDir, "otherFeatures.bed"); FILE *descriptionFile = openInDir(outDir, "descriptions.txt"); FILE *noteFile = openInDir(outDir, "notes.txt"); struct tenFields *tfList = parseTenFields(inGff); noteIds(tfList, inGff, descriptionFile, noteFile); saveFeatures(tfList, inGff, codingFile, descriptionFile, otherFile); carefulClose(&codingFile); carefulClose(&otherFile); carefulClose(¬eFile); }
bool debugSaveFeatures(SPConfig configuration, LoadedFeatures allFeatures) { char curImgName[PATH_BUFFER_LEN] = {0}; SP_CONFIG_MSG configMessage = SP_CONFIG_SUCCESS; SPPoint * curImageFeatures = NULL; int curImgNumOfFeats = 0; sp::ImageProc imageProc = sp::ImageProc(configuration); int numOfImages = getFeaturesImagesNumber(allFeatures); /* Try to get the features of all images */ for (int i=0 ; i<numOfImages ; i++) { /* Get the path of the index image */ configMessage = spConfigGetImagePath(curImgName, configuration, i); if (configMessage != SP_CONFIG_SUCCESS) { return false; } /* Get the features of the image and the number of features */ try { curImageFeatures = imageProc.getImageFeatures(curImgName, i, &curImgNumOfFeats); } catch (...) { return false; } if (curImageFeatures == NULL) { return false; } setFeatureArray(allFeatures, i, curImageFeatures); setFeaturesNumber(allFeatures, i, curImgNumOfFeats); } return saveFeatures(configuration, allFeatures); }
bool SMF::save() { char filename[256]; sprintf( filename, "%s.smf", outPrefix.c_str() ); ofstream smf(filename, ios::binary | ios::out); if( verbose )printf( "\nINFO: Saving %s.\n", filename ); char magic[] = "spring map file\0"; smf.write( magic, 16 ); int version = 1; smf.write( (char *)&version, 4); if( verbose )printf( "\tVersion: %i.\n", version ); int id = rand(); smf.write( (char *)&id, 4); if( verbose )printf( "\tMapID: %i.\n", id ); int width = this->width * 64; smf.write( (char *)&width, 4); if( verbose )printf( "\tWidth: %i.\n", width ); int length = this->length * 64; smf.write( (char *)&length, 4); if( verbose )printf( "\tLength: %i.\n", length ); int squareWidth = 8; smf.write( (char *)&squareWidth, 4); if( verbose )printf( "\tSquareWidth: %i.\n", squareWidth ); int squareTexels = 8; smf.write( (char *)&squareTexels, 4); if( verbose )printf( "\tSquareTexels: %i.\n", squareTexels ); int tileTexels = 32; smf.write( (char *)&tileTexels, 4); if( verbose )printf( "\tTileTexels: %i.\n", tileTexels ); float floor = this->floor * 512; smf.write( (char *)&floor, 4); if( verbose )printf( "\tMinHeight: %0.2f.\n", floor ); float ceiling = this->ceiling * 512; smf.write( (char *)&ceiling, 4); if( verbose )printf( "\tMaxHeight: %0.2f.\n", ceiling ); smf.write( (char *)&heightPtr, 4); if( verbose )printf( "\tHeightPtr: %i.\n", heightPtr ); smf.write( (char *)&typePtr, 4); if( verbose )printf( "\tTypePtr: %i.\n", typePtr ); smf.write( (char *)&tilesPtr, 4); if( verbose )printf( "\tTilesPtr: %i.\n", tilesPtr ); smf.write( (char *)&minimapPtr, 4); if( verbose )printf( "\tMinimapPtr: %i.\n", minimapPtr ); smf.write( (char *)&metalPtr, 4); if( verbose )printf( "\tMetalPtr: %i.\n", metalPtr ); smf.write( (char *)&featuresPtr, 4); if( verbose )printf( "\tFeaturesPtr: %i.\n", featuresPtr ); int nExtraHeaders = extraHeaders.size(); smf.write( (char *)&nExtraHeaders, 4); if( verbose )printf( "\tExtraHeaders: %i.\n", nExtraHeaders ); if(verbose) printf( " Extra Headers:\n"); for( unsigned int i = 0; i < extraHeaders.size(); ++i ) { smf.write((char *)extraHeaders[i], extraHeaders[i]->size); if( verbose ) { if(extraHeaders[i]->type == 1) printf("\tGrassPtr: %i.\n", ((SMFEHGrass *)extraHeaders[i])->grassPtr ); else printf( "\t Unknown Header\n"); } } smf.close(); saveHeight(); saveType(); saveMinimap(); saveMetal(); for( unsigned int i = 0; i < extraHeaders.size(); ++i ) { if(extraHeaders[i]->type == 1)saveGrass(); } saveTilemap(); saveFeatures(); return false; }
QAction* Graphical_UI::createSaveMenu() {//octomap Menu QMenu* sm = menuBar()->addMenu(tr("&Save")); newMenuItem(sm, "&Save", SLOT(quickSaveAll()), "Save all stored point clouds with common coordinate frame to a pcd file", QKeySequence::Save, QIcon::fromTheme("document-save")); newMenuItem(sm, "Save &Feature Map...", SLOT(saveFeatures()), "Save all feature positions and descriptions in a common coordinate frame to a yaml or xml file", "Ctrl+F", QIcon::fromTheme("document-save")); QAction* oa = newMenuItem(sm, "Save Octomap...", SLOT(saveOctomap()), "Save computed OctoMap", "", QIcon::fromTheme("document-save-as")); newMenuItem(sm, "&Save as Point Cloud ...", SLOT(saveAll()), "Save all stored point clouds with common coordinate frame", QKeySequence::SaveAs, QIcon::fromTheme("document-save-as")); newMenuItem(sm, "&Save Point Cloud Node-Wise...", SLOT(saveIndividual()), "Save stored point clouds in individual files", "Ctrl+N", QIcon::fromTheme("document-save-all")); newMenuItem(sm, "Save &G2O Graph...", SLOT(saveG2OGraphDialog()), "Save G2O graph (e.g. for use with the g2o viewer or external optimization)", "", QIcon::fromTheme("document-save")); newMenuItem(sm, "Save Clouds to &Bag...", SLOT(saveBagDialog()), "Save clouds and transforms to bagfile", "Ctrl+Shift+B"); newMenuItem(sm, "Save Trajectory &Estimate...", SLOT(saveTrajectoryDialog()), "Save trajectory estimate (and ground truth trajectory if available) for external evaluation.", "Ctrl+E"); sm->addSeparator(); newMenuItem(sm, "&Send Model", SLOT(sendAll()), "Send out all stored point clouds with corrected transform", "Ctrl+M", QIcon::fromTheme("document-send")); sm->addSeparator(); newMenuItem(sm, "Save &3D as PDF File...", SLOT(saveVectorGraphic()), "Write 3D Scene to a PDF File. Warning: Meant for Pose Graphs not for the clouds or octomaps!", "", QIcon::fromTheme("application-pdf")); newMenuItem(sm, "Save Input &Images to Files...", SLOT(saveAllImages()), "Write All images shown in the gui to appropriate files", "", QIcon::fromTheme("image-x-generic")); newMenuItem(sm, "Capture Screencast...", this, SLOT(toggleScreencast(bool)), "Dump Screen as Video", !ParameterServer::instance()->get<std::string>("screencast_path_prefix").empty()); return oa; }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); if (a.arguments().size() < 3) { qCritical() << "this application requires more arguments!"; return -1; } const QString trainDirName = a.arguments().at(1); const QString testDirName = a.arguments().at(2); const QString outputName = a.arguments().at(3); const QString extractorName = a.arguments().at(4); const QStringList extractorArgs = a.arguments().mid(5); ExtractorInterface *extractor = ExtractorFactory::getExtractor(extractorName, extractorArgs); if (extractor == NULL) { qCritical() << "failed to initialise extractor" << extractorName; return -2; } QDir trainDir(trainDirName); QStringList subdirs = QStringList() << "wood" << "straw" << "salt" << "linen"; QList<quint8> labels = QList<quint8>() << 32 << 96 << 160 << 224; QVector<LabelledData> trainData; #ifdef HAS_ELAPSED_TIMER QElapsedTimer extractionTimer; #else QTime extractionTimer; #endif int threadCount = 1; #ifdef _OPENMP #pragma omp parallel { #pragma omp single { threadCount = omp_get_num_threads(); } } #endif qDebug() << "using" << threadCount << "threads."; extractionTimer.start(); unsigned int imagesCount = 0; for (int j = 0; j < subdirs.size(); j++) { trainDir.cd(subdirs.at(j)); const QFileInfoList fileList = trainDir.entryInfoList(QStringList() << "*.png"); #ifdef HAS_ELAPSED_TIMER QElapsedTimer extractorTimer; #else QTime extractorTimer; #endif extractorTimer.start(); for (int i = 0; i < fileList.size(); i++) { imagesCount++; const QString filename = fileList.at(i).filePath(); const QImage image(filename); if (image.format() != QImage::Format_Indexed8) { qCritical("Image is not greyscale!"); return -1; } extractor->preprocess(image); if (extractor->extracts()) { unsigned int count = trainData.size(); trainData.resize(trainData.size() + image.width() * image.height()); LabelledData *trainDataPtr = trainData.data(); #pragma omp parallel for for (int x = 0; x < image.width(); x++) { for (int y = 0; y < image.height(); y++) { const QVector<nnreal> res = extractor->extract(image, x, y); Q_ASSERT(res.size() == extractor->size()); LabelledData li(res, labels.at(j)); const unsigned int idx = count + x * image.height() + y; trainDataPtr[idx] = li; } } } const QVector<QVector<nnreal> > ppFeatures = extractor->postprocess(image); const int ppCount = ppFeatures.size(); if (ppCount > 0) { const int count = trainData.size(); trainData.resize(trainData.size() + ppFeatures.size()); LabelledData *trainDataPtr = trainData.data(); #pragma omp parallel for for (int k = 0; k < ppCount; k++) { Q_ASSERT(ppFeatures.at(k).size() == extractor->size()); LabelledData ld(ppFeatures.at(k), labels.at(j)); trainDataPtr[count + k] = ld; } } qDebug() << fileList.at(i).filePath() << extractorTimer.restart(); } trainDir.cdUp(); } const int msecs = extractionTimer.elapsed(); qDebug() << "trainSize:" << trainData.size() << "extraction of " << imagesCount << "images took" << msecs << "msecs, average" << float(msecs) / imagesCount << "msecs per image"; const QString trainOutFilename(outputName + "_" + extractorName + "_train.out"); QFile trainOutput(trainOutFilename); if (!trainOutput.open(QIODevice::WriteOnly)) { qCritical() << "failed to open output file" << trainOutFilename; return -3; } { #ifdef HAS_ELAPSED_TIMER QElapsedTimer saveTimer; #else QTime saveTimer; #endif saveTimer.start(); QDataStream outstream(&trainOutput); saveFeatures(outstream, extractorName, extractorArgs, extractor->size(), trainData); int msecs = saveTimer.elapsed(); qDebug() << "saving took" << msecs << "msecs"; } trainOutput.close(); trainData.clear(); { QDir testDir(testDirName); const QFileInfoList dataFileList = testDir.entryInfoList(QStringList() << "test*.png"); const QFileInfoList labelFileList = testDir.entryInfoList(QStringList() << "label*.png"); Q_ASSERT(dataFileList.size() == labelFileList.size()); #ifdef HAS_ELAPSED_TIMER QElapsedTimer extractorTimer; #else QTime extractorTimer; #endif extractorTimer.start(); QTextStream out(stdout); for (int i = 0; i < dataFileList.size(); i++) { const QImage dataImage(dataFileList.at(i).filePath()); const QImage labelImage(labelFileList.at(i).filePath()); QVector<LabelledData> testData; extractor->preprocessTest(dataImage, labelImage); int cnt = 0; if (extractor->extracts()) { unsigned int count = testData.size(); testData.resize(dataImage.width() * dataImage.height()); LabelledData *testDataPtr = testData.data(); #pragma omp parallel for for (int x = 0; x < dataImage.width(); x++) { #pragma omp critical { cnt++; out << cnt * 100 / dataImage.width() << "%" << '\r'; out.flush(); } for (int y = 0; y < dataImage.height(); y++) { const QVector<nnreal> res = extractor->extract(dataImage, x, y); const quint8 c = labelImage.pixelIndex(x, y); LabelledData li(res, c); li.squeeze(); const unsigned int idx = count + x * dataImage.height() + y; testDataPtr[idx] = li; } } out << endl; } const QVector<LabelledData> ppFeatures = extractor->postprocessTest(dataImage, labelImage); testData << ppFeatures; qDebug() << dataFileList.at(i).filePath() << extractorTimer.restart(); const QString testOutFilename(outputName + "_" + extractorName + "_test" + QString::number(i) + ".out"); QFile testOutput(testOutFilename); if (!testOutput.open(QIODevice::WriteOnly)) { qCritical() << "failed to open output file" << testOutFilename; return -3; } { #ifdef HAS_ELAPSED_TIMER QElapsedTimer saveTimer; #else QTime saveTimer; #endif saveTimer.start(); QDataStream outstream(&testOutput); saveFeatures(outstream, extractorName, extractorArgs, extractor->size(), testData); int msecs = saveTimer.elapsed(); qDebug() << "saving took" << msecs << "msecs"; } testOutput.close(); } } delete extractor; return 0; }