minor fixes

git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@366 620bd6b2-0a58-f614-fd9a-1bd335dccda9
This commit is contained in:
matlabbe 2014-08-03 21:35:28 +00:00
parent e37d64a3f3
commit 9829b29dd0
3 changed files with 39 additions and 29 deletions

View File

@ -50,7 +50,7 @@ public Q_SLOTS:
void startProcessing();
void stopProcessing();
void pauseProcessing();
void update(const cv::Mat & image = cv::Mat());
void update(const cv::Mat & image);
private Q_SLOTS:
void loadSettings();

View File

@ -675,12 +675,12 @@ bool FindObject::detect(const cv::Mat & image, QMultiMap<int,QPair<QRect,QTransf
extractor_->compute(grayscaleImg, sceneKeypoints_, sceneDescriptors_);
if((int)sceneKeypoints_.size() != sceneDescriptors_.rows)
{
UERROR("kpt=%d != descriptors=%d\n", (int)sceneKeypoints_.size(), sceneDescriptors_.rows);
UERROR("kpt=%d != descriptors=%d", (int)sceneKeypoints_.size(), sceneDescriptors_.rows);
}
}
else
{
UWARN("no features detected !?!\n");
UWARN("no features detected !?!");
}
timeStamps_.insert(kTimeDescriptorExtraction, time.restart());

View File

@ -436,7 +436,7 @@ void MainWindow::removeObject(ObjWidget * object)
}
if(!camera_->isRunning() && !sceneImage_.empty())
{
this->update();
this->update(sceneImage_);
}
}
}
@ -449,7 +449,7 @@ void MainWindow::removeAllObjects()
findObject_->removeAllObjects();
if(!camera_->isRunning() && !sceneImage_.empty())
{
this->update();
this->update(sceneImage_);
}
}
@ -529,7 +529,10 @@ void MainWindow::addObjectFromScene()
else
{
connect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &)), Qt::UniqueConnection);
this->update();
if(!sceneImage_.empty())
{
this->update(sceneImage_);
}
}
delete dialog;
}
@ -592,6 +595,9 @@ void MainWindow::setupCameraFromVideoFile()
QString fileName = QFileDialog::getOpenFileName(this, tr("Setup camera from video file..."), Settings::workingDirectory(), tr("Video Files (%1)").arg(Settings::getGeneral_videoFormats()));
if(!fileName.isEmpty())
{
Settings::setCamera_6useTcpCamera(false);
ui_->toolBox->updateParameter(Settings::kCamera_6useTcpCamera());
Settings::setCamera_5mediaPath(fileName);
ui_->toolBox->updateParameter(Settings::kCamera_5mediaPath());
if(camera_->isRunning())
@ -620,6 +626,9 @@ void MainWindow::setupCameraFromImagesDirectory()
QString directory = QFileDialog::getExistingDirectory(this, tr("Setup camera from directory of images..."), Settings::workingDirectory());
if(!directory.isEmpty())
{
Settings::setCamera_6useTcpCamera(false);
ui_->toolBox->updateParameter(Settings::kCamera_6useTcpCamera());
Settings::setCamera_5mediaPath(directory);
ui_->toolBox->updateParameter(Settings::kCamera_5mediaPath());
if(camera_->isRunning())
@ -737,7 +746,7 @@ void MainWindow::updateObjects()
if(!camera_->isRunning() && !sceneImage_.empty())
{
this->update();
this->update(sceneImage_);
}
this->statusBar()->clearMessage();
}
@ -891,19 +900,21 @@ void MainWindow::update(const cv::Mat & image)
{
if(image.empty())
{
UWARN("Camera cannot get more images (maybe the end of stream is reached)...");
UWARN("The image received is empty...");
if(!Settings::getCamera_6useTcpCamera())
{
UINFO("Stopping the camera...");
this->stopProcessing();
}
return;
}
sceneImage_ = image.clone();
// reset objects color
for(QMap<int, ObjWidget*>::iterator iter=objWidgets_.begin(); iter!=objWidgets_.end(); ++iter)
{
iter.value()->resetKptsColor();
}
if(!image.empty())
{
sceneImage_ = image.clone();
}
QMultiMap<int,QPair<QRect,QTransform> > objectsDetected;
if(findObject_->detect(sceneImage_, objectsDetected))
@ -1137,28 +1148,26 @@ void MainWindow::notifyParametersChanged(const QStringList & paramChanged)
//Selective update (to not update all objects for a simple camera's parameter modification)
bool detectorDescriptorParamsChanged = false;
bool nearestNeighborParamsChanged = false;
bool parameterChanged = false;
for(QStringList::const_iterator iter = paramChanged.begin(); iter!=paramChanged.end(); ++iter)
{
UINFO("Parameter changed: %s -> \"%s\"", iter->toStdString().c_str(), Settings::getParameter(*iter).toString().toStdString().c_str());
//UINFO("lastObjectsUpdateParameters_.value(*iter)=%s, Settings::getParameter(*iter)=%s",
// lastObjectsUpdateParameters_.value(*iter).toString().toStdString().c_str(),
// Settings::getParameter(*iter).toString().toStdString().c_str());
if(lastObjectsUpdateParameters_.value(*iter) != Settings::getParameter(*iter))
{
if(!detectorDescriptorParamsChanged && iter->contains("Feature2D"))
lastObjectsUpdateParameters_[*iter] = Settings::getParameter(*iter);
parameterChanged = true;
UINFO("Parameter changed: %s -> \"%s\"", iter->toStdString().c_str(), Settings::getParameter(*iter).toString().toStdString().c_str());
if(iter->contains("Feature2D"))
{
detectorDescriptorParamsChanged = true;
}
else if(!nearestNeighborParamsChanged &&
( (iter->contains("NearestNeighbor") && Settings::getGeneral_invertedSearch()) ||
else if( (iter->contains("NearestNeighbor") && Settings::getGeneral_invertedSearch()) ||
iter->compare(Settings::kGeneral_invertedSearch()) == 0 ||
(iter->compare(Settings::kGeneral_vocabularyIncremental()) == 0 && Settings::getGeneral_invertedSearch()) ||
(iter->compare(Settings::kGeneral_threads()) == 0 && !Settings::getGeneral_invertedSearch()) ))
(iter->compare(Settings::kGeneral_threads()) == 0 && !Settings::getGeneral_invertedSearch()) )
{
nearestNeighborParamsChanged = true;
}
lastObjectsUpdateParameters_[*iter] = Settings::getParameter(*iter);
}
if(iter->compare(Settings::kGeneral_port()) == 0 &&
Settings::getGeneral_port() != ui_->label_port->text().toInt() &&
@ -1167,6 +1176,7 @@ void MainWindow::notifyParametersChanged(const QStringList & paramChanged)
setupTCPServer();
}
}
}
if(detectorDescriptorParamsChanged)
{
@ -1189,9 +1199,9 @@ void MainWindow::notifyParametersChanged(const QStringList & paramChanged)
{
this->statusBar()->showMessage(tr("A parameter has changed... \"Update objects\" may be required."));
}
if(!camera_->isRunning() && !sceneImage_.empty())
if(parameterChanged && !camera_->isRunning() && !sceneImage_.empty())
{
this->update();
this->update(sceneImage_);
ui_->label_timeRefreshRate->setVisible(false);
}