AutoZoomResult autozoom_result;
for (auto &output : _taskManager->output()) {
+ if (output->_is_empty)
+ continue;
+
if (output->_type != ResultType::OBJECT_DETECTION && output->_type != ResultType::FACE_DETECTION &&
output->_type != ResultType::FACE_RECOGNITION)
throw InvalidParameter("Invalid result type");
+ if (output->_type == ResultType::FACE_RECOGNITION) {
+ auto &frResult = dynamic_cast<FrResultType &>(*output);
+ SINGLEO_LOGD("label : %s", frResult._label.c_str());
+ continue;
+ }
+
if (output->_type == ResultType::OBJECT_DETECTION || output->_type == ResultType::FACE_DETECTION) {
vector<Rect> &rects = dynamic_cast<FdResultType &>(*output)._rects;
autozoom_result.frame_number = output->_frame_number;
autozoom_result.num_of_objects = rects.size();
+ autozoom_result.is_valid = true;
for (size_t idx = 0; idx < rects.size(); ++idx) {
SINGLEO_LOGD("%dx%d ~ %dx%d", rects[idx].left, rects[idx].top, rects[idx].right, rects[idx].bottom);
SINGLEO_LOGW("No detected objects.");
return;
}
-
- } else if (output->_type == ResultType::FACE_RECOGNITION) {
- auto &frResult = dynamic_cast<FrResultType &>(*output);
- SINGLEO_LOGD("label : %s", frResult._label.c_str());
}
}
+ // Do not push detected result to async manager to prevent from trying zooming-in
+ // if there is no detected objects.
+ if (!autozoom_result.is_valid)
+ return;
+
if (_async_mode)
_async_manager->pushOutput(autozoom_result);
else
if (!_cb)
throw singleo::exception::InvalidOperation("Bridge node callback is not set");
+ _results.clear();
_status = NodeStatus::INVALID;
// If at least one dependency is valid, bridge node is valid.
for (auto &dep : this->getDependencies()) {
break;
}
}
+
if (_status == NodeStatus::INVALID)
return;
- _results.clear();
-
for (const auto &d : _dependencies)
std::copy(d->results().begin(), d->results().end(), std::back_inserter(_results));
void invoke() final
{
+ _results.clear();
_status = NodeStatus::INVALID;
// If at least one dependency is valid, endpoint node is valid.
for (auto &dep : this->getDependencies()) {
if (_status == NodeStatus::INVALID)
return;
- _results.clear();
-
for (auto &d : _dependencies)
std::copy(d->results().begin(), d->results().end(), std::back_inserter(_results));