Merge pull request #20157 from mpashchenkov:mp/ocv-gapi-pnetworks
authorMaxim Pashchenkov <maxim.pashchenkov@intel.com>
Tue, 1 Jun 2021 14:42:44 +0000 (17:42 +0300)
committerGitHub <noreply@github.com>
Tue, 1 Jun 2021 14:42:44 +0000 (14:42 +0000)
G-API: Python. Wrapper for networks.

* Python networks

* Added pyopencv_to

* Changed work with pyopencv_to

modules/gapi/include/opencv2/gapi/infer.hpp
modules/gapi/misc/python/pyopencv_gapi.hpp
modules/gapi/misc/python/shadow_gapi.hpp
modules/gapi/samples/face_detection_mtcnn.cpp

index 6e71f59df9bffb5ac41c1a79591823c3ffc79f6a..7ba3a4488140dcb718497cd1404a5445719ee76f 100644 (file)
@@ -693,6 +693,14 @@ template<typename... Args>
 cv::gapi::GNetPackage networks(Args&&... args) {
     return cv::gapi::GNetPackage({ cv::detail::strip(args)... });
 }
+
+inline cv::gapi::GNetPackage& operator += (      cv::gapi::GNetPackage& lhs,
+                                           const cv::gapi::GNetPackage& rhs) {
+    lhs.networks.reserve(lhs.networks.size() + rhs.networks.size());
+    lhs.networks.insert(lhs.networks.end(), rhs.networks.begin(), rhs.networks.end());
+    return lhs;
+}
+
 } // namespace gapi
 } // namespace cv
 
index 3ade7aaa4e140b2666ed30d197bd47c9799eabcf..6b782cfc8dd8a868003536f7a1fb7af4e0b12e7f 100644 (file)
@@ -756,6 +756,23 @@ static PyObject* pyopencv_cv_gapi_kernels(PyObject* , PyObject* py_args, PyObjec
     return pyopencv_from(pkg);
 }
 
+static PyObject* pyopencv_cv_gapi_networks(PyObject*, PyObject* py_args, PyObject*)
+{
+    using namespace cv;
+    gapi::GNetPackage pkg;
+    Py_ssize_t size = PyTuple_Size(py_args);
+    for (int i = 0; i < size; ++i)
+    {
+        gapi_ie_PyParams params;
+        PyObject* item = PyTuple_GetItem(py_args, i);
+        if (pyopencv_to(item, params, ArgInfo("PyParams", false)))
+        {
+            pkg += gapi::networks(params);
+        }
+    }
+    return pyopencv_from(pkg);
+}
+
 static PyObject* pyopencv_cv_gapi_op(PyObject* , PyObject* py_args, PyObject*)
 {
     using namespace cv;
@@ -916,6 +933,7 @@ struct PyOpenCV_Converter<cv::GOpaque<T>>
 // extend cv.gapi methods
 #define PYOPENCV_EXTRA_METHODS_GAPI \
   {"kernels", CV_PY_FN_WITH_KW(pyopencv_cv_gapi_kernels), "kernels(...) -> GKernelPackage"}, \
+  {"networks", CV_PY_FN_WITH_KW(pyopencv_cv_gapi_networks), "networks(...) -> GNetPackage"}, \
   {"__op", CV_PY_FN_WITH_KW(pyopencv_cv_gapi_op), "__op(...) -> retval\n"},
 
 
index bb820020698a877bff17c89891fd7c66e16fb583..40dab41581419730c87face5f393c262b1b2cceb 100644 (file)
@@ -58,7 +58,6 @@ namespace cv
 
    namespace gapi
    {
-       GAPI_EXPORTS_W gapi::GNetPackage networks(const cv::gapi::ie::PyParams& params);
        namespace wip
        {
            class GAPI_EXPORTS_W IStreamSource { };
index b1944dd3fceee5705f18770959c9503fb8a4b588..2db7517296fab3d22dc6b2b0a1fb11c451ee1e97 100644 (file)
@@ -496,13 +496,6 @@ static inline std::tuple<cv::GMat, cv::GMat> run_mtcnn_p(cv::GMat &in, const std
     return std::make_tuple(regressions, scores);
 }
 
-//Operator fot PNet network package creation in the loop
-inline cv::gapi::GNetPackage& operator += (cv::gapi::GNetPackage& lhs, const cv::gapi::GNetPackage& rhs) {
-    lhs.networks.reserve(lhs.networks.size() + rhs.networks.size());
-    lhs.networks.insert(lhs.networks.end(), rhs.networks.begin(), rhs.networks.end());
-    return lhs;
-}
-
 static inline std::string get_pnet_level_name(const cv::Size &in_size) {
     return "MTCNNProposal_" + std::to_string(in_size.width) + "x" + std::to_string(in_size.height);
 }