Mat Net::forward(const String& outputName)
{
CV_TRACE_FUNCTION();
+ CV_Assert(!empty());
String layerName = outputName;
if (layerName.empty())
- layerName = getLayerNames().back();
+ {
+ std::vector<String> layerNames = getLayerNames();
+ CV_Assert(!layerNames.empty());
+ layerName = layerNames.back();
+ }
std::vector<LayerPin> pins(1, impl->getPinByAlias(layerName));
impl->setUpNet(pins);
AsyncArray Net::forwardAsync(const String& outputName)
{
CV_TRACE_FUNCTION();
+ CV_Assert(!empty());
+
#ifdef CV_CXX11
String layerName = outputName;
if (layerName.empty())
- layerName = getLayerNames().back();
+ {
+ std::vector<String> layerNames = getLayerNames();
+ CV_Assert(!layerNames.empty());
+ layerName = layerNames.back();
+ }
std::vector<LayerPin> pins(1, impl->getPinByAlias(layerName));
impl->setUpNet(pins);
void Net::forward(OutputArrayOfArrays outputBlobs, const String& outputName)
{
CV_TRACE_FUNCTION();
+ CV_Assert(!empty());
String layerName = outputName;
if (layerName.empty())
- layerName = getLayerNames().back();
+ {
+ std::vector<String> layerNames = getLayerNames();
+ CV_Assert(!layerNames.empty());
+ layerName = layerNames.back();
+ }
std::vector<LayerPin> pins(1, impl->getPinByAlias(layerName));
impl->setUpNet(pins);
std::vector<String> Net::getLayerNames() const
{
+ CV_TRACE_FUNCTION();
+
std::vector<String> res;
res.reserve(impl->layers.size());
EXPECT_TRUE(res.empty()) << res.size;
}
+TEST(Net, empty_forward_18392)
+{
+ cv::dnn::Net net;
+ Mat image(Size(512, 512), CV_8UC3, Scalar::all(0));
+ Mat inputBlob = cv::dnn::blobFromImage(image, 1.0, Size(512, 512), Scalar(0,0,0), true, false);
+ net.setInput(inputBlob);
+ EXPECT_ANY_THROW(Mat output = net.forward());
+}
+
#ifdef HAVE_INF_ENGINE
static
void test_readNet_IE_do_not_call_setInput(Backend backendId)