|
|
@@ -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();
|
|
|
}
|
|
|
+
|