diff --git a/modules/dnn/include/opencv2/dnn/dnn.hpp b/modules/dnn/include/opencv2/dnn/dnn.hpp index 3fbb8290f1..fd986acc7e 100644 --- a/modules/dnn/include/opencv2/dnn/dnn.hpp +++ b/modules/dnn/include/opencv2/dnn/dnn.hpp @@ -387,7 +387,7 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN /** @brief Dump net to String * @returns String with structure, hyperparameters, backend, target and fusion - * To see correct backend, target and fusion run after forward(). + * Call method after setInput(). To see correct backend, target and fusion run after forward(). */ CV_WRAP String dump(); /** @brief Dump net structure, hyperparameters, backend, target and fusion to dot file diff --git a/modules/dnn/src/dnn.cpp b/modules/dnn/src/dnn.cpp index d32c26f9db..b3c3e014bd 100644 --- a/modules/dnn/src/dnn.cpp +++ b/modules/dnn/src/dnn.cpp @@ -2903,6 +2903,13 @@ String parseLayerParams(const String& name, const LayerParams& lp) { String Net::dump() { CV_Assert(!empty()); + + if (impl->netInputLayer->inputsData.empty()) + CV_Error(Error::StsError, "Requested set input"); + + if (!impl->netWasAllocated) + impl->setUpNet(); + std::ostringstream out; std::map& map = impl->layers; int prefBackend = impl->preferableBackend; diff --git a/modules/dnn/test/test_misc.cpp b/modules/dnn/test/test_misc.cpp index ecc7e27115..ccc14f0a47 100644 --- a/modules/dnn/test/test_misc.cpp +++ b/modules/dnn/test/test_misc.cpp @@ -78,6 +78,26 @@ TEST(readNet, Regression) EXPECT_FALSE(net.empty()); } +typedef testing::TestWithParam > dump; +TEST_P(dump, Regression) +{ + const int backend = get<0>(GetParam()); + const int target = get<1>(GetParam()); + Net net = readNet(findDataFile("dnn/squeezenet_v1.1.prototxt"), + findDataFile("dnn/squeezenet_v1.1.caffemodel", false)); + + int size[] = {1, 3, 227, 227}; + Mat input = cv::Mat::ones(4, size, CV_32F); + net.setInput(input); + net.setPreferableBackend(backend); + net.setPreferableTarget(target); + EXPECT_FALSE(net.dump().empty()); + net.forward(); + EXPECT_FALSE(net.dump().empty()); +} + +INSTANTIATE_TEST_CASE_P(/**/, dump, dnnBackendsAndTargets()); + class FirstCustomLayer CV_FINAL : public Layer { public: