Quellcode durchsuchen

[feature] Add data recursively

Clemens-Alexander Brust vor 9 Jahren
Ursprung
Commit
1cd8a49425
3 geänderte Dateien mit 49 neuen und 0 gelöschten Zeilen
  1. 41 0
      src/MainWindow.cpp
  2. 2 0
      src/MainWindow.h
  3. 6 0
      src/MainWindow.ui

+ 41 - 0
src/MainWindow.cpp

@@ -6,6 +6,7 @@
  */
 
 #include <QMessageBox>
+#include <QDirIterator>
 #include <sstream>
 #include <QInputDialog>
 #include <QFileDialog>
@@ -69,6 +70,7 @@ void MainWindow::OnProjectStateUpdate() {
     }
     ui->importDataButton->setEnabled(true);
     ui->actionImport_New_Data->setEnabled(true);
+    ui->actionImport_New_Data_Recursively->setEnabled(true);
     ui->actionImport_Labeled_Data->setEnabled(true);
     ui->actionReview_Known_Data->setEnabled(true);
     ui->actionReview_Labeled_Data->setEnabled(true);
@@ -93,6 +95,7 @@ void MainWindow::OnProjectStateUpdate() {
     ui->updateModelButton->setEnabled(false);
     ui->importDataButton->setEnabled(false);
     ui->actionImport_New_Data->setEnabled(false);
+    ui->actionImport_New_Data_Recursively->setEnabled(false);
     ui->actionImport_Labeled_Data->setEnabled(false);
     ui->actionReview_Known_Data->setEnabled(false);
     ui->actionReview_Labeled_Data->setEnabled(false);
@@ -271,6 +274,43 @@ void MainWindow::on_importDataButton_clicked()
   ui->progressBar->setValue(100);
 }
 
+void MainWindow::on_actionImport_New_Data_Recursively_triggered()
+{
+  auto folderName = QFileDialog::getExistingDirectory(this, tr("Select New Data Folder"));
+  if(folderName.length() <= 0)
+    return;
+
+  QDirIterator iterator(folderName, QStringList() << "*.jpg" << "*.png", QDir::Files, QDirIterator::Subdirectories);
+  QStringList fileNames;
+  while(iterator.hasNext())
+    fileNames << iterator.next();
+
+  std::mt19937 generator;
+  ui->progressBar->setValue(0);
+  int maxprogress = fileNames.size();
+  int i = 0;
+  while(fileNames.size() > 0) {
+    std::uniform_int_distribution<int> dist(0, fileNames.size() - 1);
+    int file_index = dist(generator);
+    QString fileName = fileNames[file_index];
+    fileNames.removeAt(file_index);
+
+    bool result =  project.AddSample(fileName.toStdString());
+    if(!result) {
+      QMessageBox::critical(this, tr("Error"), tr("Could not import unlabeled sample! See log for details."), QMessageBox::Ok);
+      OnProjectStateUpdate();
+      break;
+    }
+
+    int progress = (100 * (i++ + 1)) / maxprogress;
+    ui->progressBar->setValue(progress);
+  }
+  OnProjectStateUpdate();
+
+  ui->progressBar->setValue(100);
+
+}
+
 void MainWindow::on_actionImport_New_Data_triggered()
 {
   on_importDataButton_clicked();
@@ -490,3 +530,4 @@ void MainWindow::on_actionSave_Snapshot_triggered()
 {
   project.SaveSnapshot();
 }
+

+ 2 - 0
src/MainWindow.h

@@ -76,6 +76,8 @@ private slots:
 
   void on_actionSave_Snapshot_triggered();
 
+  void on_actionImport_New_Data_Recursively_triggered();
+
 private:
   void on_importLabeledDataButton_clicked(); // not a slot anymore
   void AddSegmentImagesToList(Conv::Segment* segment);

+ 6 - 0
src/MainWindow.ui

@@ -110,6 +110,7 @@
      <string>Data</string>
     </property>
     <addaction name="actionImport_New_Data"/>
+    <addaction name="actionImport_New_Data_Recursively"/>
     <addaction name="actionImport_Labeled_Data"/>
     <addaction name="separator"/>
     <addaction name="actionReview_Known_Data"/>
@@ -304,6 +305,11 @@
     <string>Save Snapshot</string>
    </property>
   </action>
+  <action name="actionImport_New_Data_Recursively">
+   <property name="text">
+    <string>Import New Data Recursively...</string>
+   </property>
+  </action>
   <zorder>dockWidget_2</zorder>
   <zorder>dockWidget_4</zorder>
  </widget>