From 59de4d9ad8b954dfbf7d9166793e25068842e93d Mon Sep 17 00:00:00 2001 From: AsyaPronina <155jj@mail.ru> Date: Mon, 12 Aug 2019 19:28:09 +0300 Subject: [PATCH] Added Preproc use case test for graph pattern matching --- .../gapi_int_pattern_matching_test.cpp | 65 +++++++++++++++++-- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/modules/gapi/test/internal/gapi_int_pattern_matching_test.cpp b/modules/gapi/test/internal/gapi_int_pattern_matching_test.cpp index 841caed9df..5574001815 100644 --- a/modules/gapi/test/internal/gapi_int_pattern_matching_test.cpp +++ b/modules/gapi/test/internal/gapi_int_pattern_matching_test.cpp @@ -271,7 +271,7 @@ TEST(PatternMatching, TestMultiplePatternOuts) EXPECT_EQ(matching_test::V({dx_nh, dy_nh}), match.protoOuts()); } -TEST(PatternMatching, TestPreprocSplit3) +TEST(PatternMatching, TestPrepResizeSplit3) { // Pattern ade::Graph pg; @@ -340,19 +340,19 @@ G_TYPED_KERNEL(GToNCHW, , "test.toNCHW") { } }; -static GMat toNCHW(const GMat& src) +static GMatP toNCHW(const GMat& src) { return GToNCHW::on(src); } -TEST(PatternMatching, TestPreprocToNCHW) +TEST(PatternMatching, TestPrepResizeToNCHW) { // Pattern ade::Graph pg; { GMat in; GMat tmp = cv::gapi::resize(in, cv::Size{224, 224}); - GMat plr = toNCHW(tmp); + GMatP plr = toNCHW(tmp); matching_test::initGModel(pg, cv::GIn(in), cv::GOut(plr)); } @@ -361,7 +361,7 @@ TEST(PatternMatching, TestPreprocToNCHW) GMat y, uv; GMat bgr = cv::gapi::NV12toBGR(y, uv); GMat tmp = cv::gapi::resize(bgr, cv::Size{224, 224}); - GMat plr = toNCHW(tmp); + GMatP plr = toNCHW(tmp); matching_test::initGModel(tg, cv::GIn(y, uv), cv::GOut(plr)); // Pattern Matching @@ -398,6 +398,61 @@ TEST(PatternMatching, TestPreprocToNCHW) EXPECT_EQ(matching_test::V{ plr_nh }, match.protoOuts()); } +TEST(PatternMatching, TestPrepNV12toBGRToNCHW) +{ + // Pattern + ade::Graph pg; + { + GMat y, uv; + GMat bgr = cv::gapi::NV12toBGR(y, uv); + GMatP plr = toNCHW(bgr); + matching_test::initGModel(pg, cv::GIn(y, uv), cv::GOut(plr)); + } + + // Test + ade::Graph tg; + GMat y, uv; + GMat bgr = cv::gapi::NV12toBGR(y, uv); + GMatP plr = toNCHW(bgr); + GMat rsz = cv::gapi::resizeP(plr, cv::Size{224, 224}); + matching_test::initGModel(tg, cv::GIn(y, uv), cv::GOut(rsz)); + + // Pattern Matching + cv::gimpl::GModel::Graph pgm(pg); + cv::gimpl::GModel::Graph tgm(tg); + cv::gimpl::SubgraphMatch match = cv::gimpl::findMatches(pg, tg); + + // Inspecting results: + EXPECT_TRUE(match.ok()); + + auto nodes = match.nodes(); + EXPECT_EQ(6u, nodes.size()); + + const auto y_nh = cv::gimpl::GModel::dataNodeOf(tgm, y); + const auto uv_nh = cv::gimpl::GModel::dataNodeOf(tgm, uv); + const auto bgr_nh = cv::gimpl::GModel::dataNodeOf(tgm, bgr); + const auto plr_nh = cv::gimpl::GModel::dataNodeOf(tgm, plr); + + const auto op1_nh = cv::gimpl::GModel::producerOf(tgm, bgr_nh); // 1st NV12toBGR + const auto op2_nh = cv::gimpl::GModel::producerOf(tgm, plr_nh); // 2nd toNCHW + + EXPECT_EQ(matching_test::S({y_nh, uv_nh, bgr_nh, plr_nh, op1_nh, op2_nh}), + nodes); + + EXPECT_EQ(cv::gapi::imgproc::GNV12toBGR::id(), matching_test::opName(tgm, op1_nh)); + EXPECT_EQ(GToNCHW::id(), matching_test::opName(tgm, op2_nh)); + + EXPECT_EQ(1u, bgr_nh->outEdges().size()); + EXPECT_TRUE(matching_test::isConsumedBy(tgm, y_nh, op1_nh)); + EXPECT_TRUE(matching_test::isConsumedBy(tgm, uv_nh, op1_nh)); + EXPECT_TRUE(matching_test::isConsumedBy(tgm, bgr_nh, op2_nh)); + + EXPECT_EQ(matching_test::S{ op1_nh }, match.startOps()); + EXPECT_EQ(matching_test::S{ op2_nh }, match.finishOps()); + EXPECT_EQ(matching_test::V({ y_nh, uv_nh }), match.protoIns()); + EXPECT_EQ(matching_test::V{ plr_nh }, match.protoOuts()); +} + //FIXME: To switch from filter2d kernel (which shall be matched by params too) to another one TEST(PatternMatching, MatchChainInTheMiddle) {