Skip to content

Commit 6cf6504

Browse files
Port G-API demos to API2.0 - background_subtraction_demo/cpp_gapi - rebase and port demo to OV20 (custom_kernels)
1 parent fcca470 commit 6cf6504

File tree

5 files changed

+23
-33
lines changed

5 files changed

+23
-33
lines changed

.github/workflows/cpp_gapi-demos.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ jobs:
3333
cd cache
3434
mkdir opencv-with-fix
3535
cd opencv-with-fix
36-
git clone https://github.com/DariaMityagina/opencv.git
36+
git clone https://github.com/opencv/opencv.git
3737
cd opencv
38-
git checkout icv/dm/add-media-frame-support-to-govbackend
38+
git checkout 4.x
3939
- name: Compile OpenCV
4040
run: |
41-
cd cache
42-
mkdir opencv-with-fix/opencv/build
43-
cd opencv-with-fix/opencv/build
41+
rm -rf cache/opencv/.git/ # Minimize cache
42+
mkdir cache/opencv/build
43+
cd cache/opencv/build
4444
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_INF_ENGINE=y -DOpenVINO_DIR=$GITHUB_WORKSPACE/ov/runtime/cmake/ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_LINKER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_C_LINKER_LAUNCHER=ccache -DBUILD_TESTS=y -DVIDEOIO_ENABLE_PLUGINS=y -DBUILD_PERF_TESTS=n -DBUILD_EXAMPLES=n -DBUILD_opencv_apps=y -DWITH_OPENCL=n -DWITH_OPENCLAMDBLAS=n -DWITH_GSTREAMER=n -DWITH_V4L=ON -DWITH_LIBV4L=ON -DWITH_OPENCLAMDFFT=n -DWITH_VA=n -DWITH_VA_INTEL=n -DWITH_PROTOBUF=n -DBUILD_PROTOBUF=n -DBUILD_JAVA=n -DBUILD_opencv_java_bindings_generator=n -DBUILD_opencv_python2=n -DBUILD_opencv_python3=n -DWITH_IMGCODEC_HDR=y -DWITH_IMGCODEC_SUNRASTER=y -DWITH_IMGCODEC_PXM=y -DWITH_IMGCODEC_PFM=y -DWITH_PNG=y -DWITH_TIFF=n -DWITH_WEBP=n -DWITH_OPENJPEG=n -DWITH_JASPER=n -DWITH_OPENEXR=n -DBUILD_opencv_dnn=n -DBUILD_opencv_features2d=n -DBUILD_opencv_flann=n -DWITH_TBB=n -DBUILD_INFO_SKIP_EXTRA_MODULES=n -DBUILD_JASPER=n -DBUILD_PNG=n -DBUILD_OPENEXR=n -DBUILD_WEBP=n -DBUILD_ZLIB=n -DWITH_CUDA=n -DWITH_EIGEN=n -DWITH_GPHOTO2=n -DOPENCV_GAPI_GSTREAMER=n -DWITH_LAPACK=n -DWITH_MATLAB=n -DWITH_MFX=n -DWITH_QUIRC=n -DWITH_VTK=n -DINSTALL_PDB=n -DINSTALL_TESTS=n -DINSTALL_C_EXAMPLES=n -DINSTALL_PYTHON_EXAMPLES=n -DOPENCV_GENERATE_SETUPVARS=n -DWITH_1394=n -DWITH_FFMPEG=y -DWITH_GTK_2_X=y -DBUILD_JPEG=y -DWITH_IPP=y -DENABLE_CONFIG_VERIFICATION=y -DBUILD_LIST=core,gapi,highgui,imgcodecs,imgproc,videoio,video ..
4545
cmake --build . -j $((`nproc`*2+2))
4646
- name: build_demos.sh

demos/background_subtraction_demo/cpp_gapi/CMakeLists.txt

-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ if (NOT TARGET utils_gapi)
77
return()
88
endif()
99

10-
if(OpenVINO_VERSION_MAJOR VERSION_GREATER_EQUAL 2024)
11-
message(WARNING "background_subtraction_demo_gapi skipped. G-API is not compatible with OpenVINO 2024.0.")
12-
return()
13-
endif()
14-
1510
file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
1611
file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
1712

demos/background_subtraction_demo/cpp_gapi/include/custom_kernels.hpp

+5-9
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,12 @@
77
#include <string>
88
#include <vector>
99

10-
#include <cpp/ie_cnn_network.h>
11-
#include <ie_allocator.hpp>
12-
#include <ie_common.h>
13-
#include <ie_input_info.hpp>
10+
#include <openvino/openvino.hpp>
11+
1412
#include <opencv2/core.hpp>
1513
#include <opencv2/gapi/gkernel.hpp>
1614
#include <opencv2/gapi/gmat.hpp>
1715

18-
namespace IE = InferenceEngine;
19-
2016
namespace custom {
2117
// clang-format off
2218
G_API_OP(GTensorToImg, <cv::GMat(cv::GMat)>, "custom.tensorToImg") {
@@ -49,10 +45,10 @@ class NNBGReplacer {
4945
}
5046

5147
protected:
52-
IE::CNNNetwork m_cnn_network;
48+
std::shared_ptr<const ov::Model> model;
5349
std::string m_tag;
54-
IE::InputsDataMap m_inputs;
55-
IE::OutputsDataMap m_outputs;
50+
std::vector<ov::Output<const ov::Node>> m_inputs;
51+
std::vector<ov::Output<const ov::Node>> m_outputs;
5652
};
5753

5854
class MaskRCNNBGReplacer : public NNBGReplacer {

demos/background_subtraction_demo/cpp_gapi/main.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ int main(int argc, char* argv[]) {
241241
} else {
242242
presenter.handleKey(key);
243243
}
244+
} else {
245+
cv::imwrite("./background-substr-out.jpg", output);
244246
}
245247
}
246248
slog::info << "Metrics report:" << slog::endl;

demos/background_subtraction_demo/cpp_gapi/src/custom_kernels.cpp

+11-14
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
#include <stdexcept>
1111
#include <utility>
1212

13-
#include <ie_core.hpp>
14-
#include <ie_data.h>
15-
#include <ie_layouts.h>
1613
#include <opencv2/gapi/core.hpp>
1714
#include <opencv2/gapi/cpu/gcpukernel.hpp>
1815
#include <opencv2/gapi/gscalar.hpp>
@@ -137,26 +134,26 @@ GAPI_OCV_KERNEL(OCVCalculateMaskRCNNBGMask, custom::GCalculateMaskRCNNBGMask) {
137134
// clang-format on
138135

139136
custom::NNBGReplacer::NNBGReplacer(const std::string& model_path) {
140-
IE::Core core;
141-
m_cnn_network = core.ReadNetwork(model_path);
142-
m_tag = m_cnn_network.getName();
143-
m_inputs = m_cnn_network.getInputsInfo();
144-
m_outputs = m_cnn_network.getOutputsInfo();
137+
ov::Core core;
138+
model = core.read_model(model_path);
139+
m_tag = model->get_name();
140+
m_inputs = model->inputs();
141+
m_outputs = model->outputs();
145142
}
146143

147144
custom::MaskRCNNBGReplacer::MaskRCNNBGReplacer(const std::string& model_path) : custom::NNBGReplacer(model_path) {
148145
for (const auto& p : m_outputs) {
149-
const auto& layer_name = p.first;
146+
const auto& layer_name = p.get_any_name();
150147
if (layer_name.rfind("TopK") != std::string::npos) {
151148
continue;
152149
}
153150

154151
if (m_inputs.size() != 1) {
155152
throw std::logic_error("Supported only single input MaskRCNN models!");
156153
}
157-
m_input_name = m_inputs.begin()->first;
154+
m_input_name = m_inputs[0].get_any_name();
158155

159-
const auto dims_size = p.second->getTensorDesc().getDims().size();
156+
const auto dims_size = p.get_partial_shape().size();
160157
if (dims_size == 1) {
161158
m_labels_name = layer_name;
162159
} else if (dims_size == 2) {
@@ -177,7 +174,7 @@ cv::GMat custom::MaskRCNNBGReplacer::replace(cv::GFrame in, cv::GMat bgr, const
177174
auto boxes = outputs.at(m_boxes_name);
178175
auto masks = outputs.at(m_masks_name);
179176

180-
const auto& dims = m_inputs.at(m_input_name)->getTensorDesc().getDims();
177+
const auto& dims = model->input(m_input_name).get_partial_shape().get_max_shape();
181178
GAPI_Assert(dims.size() == 4u);
182179
auto mask = custom::GCalculateMaskRCNNBGMask::on(in_size, cv::Size(dims[3], dims[2]), labels, boxes, masks);
183180
auto mask3ch = cv::gapi::medianBlur(cv::gapi::merge3(mask, mask, mask), 11);
@@ -188,12 +185,12 @@ custom::BGMattingReplacer::BGMattingReplacer(const std::string& model_path) : NN
188185
if (m_inputs.size() != 1) {
189186
throw std::logic_error("Supported only single input background matting models!");
190187
}
191-
m_input_name = m_inputs.begin()->first;
188+
m_input_name = m_inputs[0].get_any_name();
192189

193190
if (m_outputs.size() != 1) {
194191
throw std::logic_error("Supported only single output background matting models!");
195192
}
196-
m_output_name = m_outputs.begin()->first;
193+
m_output_name = m_outputs[0].get_any_name();
197194
}
198195

199196
cv::GMat custom::BGMattingReplacer::replace(cv::GFrame in, cv::GMat bgr, const cv::Size& in_size, cv::GMat background) {

0 commit comments

Comments
 (0)