Merge pull request #18512 from TolyaTalamanov:at/fix-untyped-np-array-for-gapi-python
authorAnatoliy Talamanov <anatoliy.talamanov@intel.com>
Wed, 7 Oct 2020 20:38:59 +0000 (23:38 +0300)
committerGitHub <noreply@github.com>
Wed, 7 Oct 2020 20:38:59 +0000 (20:38 +0000)
[G-API] Numpy array with int64 failed in cv.gin

* Fix bug with numpy array precision in G-API python

* Fix comments to review

modules/gapi/misc/python/pyopencv_gapi.hpp
modules/gapi/misc/python/test/test_gapi_core.py

index b4a16cd..702e8c4 100644 (file)
@@ -128,7 +128,7 @@ static PyObject* pyopencv_cv_gin(PyObject* , PyObject* py_args, PyObject* kw)
         if (PyTuple_Check(item))
         {
             cv::Scalar s;
-            if (pyopencv_to(item, s, ArgInfo("scalar", true)))
+            if (pyopencv_to(item, s, ArgInfo("scalar", false)))
             {
                 args.emplace_back(s);
             }
@@ -141,7 +141,7 @@ static PyObject* pyopencv_cv_gin(PyObject* , PyObject* py_args, PyObject* kw)
         else if (PyArray_Check(item))
         {
             cv::Mat m;
-            if (pyopencv_to(item, m, ArgInfo("mat", true)))
+            if (pyopencv_to(item, m, ArgInfo("mat", false)))
             {
                 args.emplace_back(m);
             }
index b219ce1..cd85d9c 100644 (file)
@@ -20,11 +20,32 @@ class gapi_core_test(NewOpenCVTests):
     def test_add(self):
         # TODO: Extend to use any type and size here
         sz = (1280, 720)
+        in1 = np.random.randint(0, 100, sz)
+        in2 = np.random.randint(0, 100, sz)
+
+        # OpenCV
+        expected = cv.add(in1, in2)
+
+        # G-API
+        g_in1 = cv.GMat()
+        g_in2 = cv.GMat()
+        g_out = cv.gapi.add(g_in1, g_in2)
+        comp = cv.GComputation(cv.GIn(g_in1, g_in2), cv.GOut(g_out))
+
+        for pkg in pkgs:
+            actual = comp.apply(cv.gin(in1, in2), args=cv.compile_args(pkg))
+            # Comparison
+            self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
+            self.assertEqual(expected.dtype, actual.dtype)
+
+
+    def test_add_uint8(self):
+        sz = (1280, 720)
         in1 = np.random.randint(0, 100, sz).astype(np.uint8)
         in2 = np.random.randint(0, 100, sz).astype(np.uint8)
 
         # OpenCV
-        expected = in1 + in2
+        expected = cv.add(in1, in2)
 
         # G-API
         g_in1 = cv.GMat()
@@ -36,11 +57,12 @@ class gapi_core_test(NewOpenCVTests):
             actual = comp.apply(cv.gin(in1, in2), args=cv.compile_args(pkg))
             # Comparison
             self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
+            self.assertEqual(expected.dtype, actual.dtype)
 
 
     def test_mean(self):
         sz = (1280, 720, 3)
-        in_mat = np.random.randint(0, 100, sz).astype(np.uint8)
+        in_mat = np.random.randint(0, 100, sz)
 
         # OpenCV
         expected = cv.mean(in_mat)
@@ -58,7 +80,7 @@ class gapi_core_test(NewOpenCVTests):
 
     def test_split3(self):
         sz = (1280, 720, 3)
-        in_mat = np.random.randint(0, 100, sz).astype(np.uint8)
+        in_mat = np.random.randint(0, 100, sz)
 
         # OpenCV
         expected = cv.split(in_mat)
@@ -73,6 +95,7 @@ class gapi_core_test(NewOpenCVTests):
             # Comparison
             for e, a in zip(expected, actual):
                 self.assertEqual(0.0, cv.norm(e, a, cv.NORM_INF))
+                self.assertEqual(e.dtype, a.dtype)
 
 
     def test_threshold(self):
@@ -94,6 +117,7 @@ class gapi_core_test(NewOpenCVTests):
             actual_mat, actual_thresh = comp.apply(cv.gin(in_mat, maxv), args=cv.compile_args(pkg))
             # Comparison
             self.assertEqual(0.0, cv.norm(expected_mat, actual_mat, cv.NORM_INF))
+            self.assertEqual(expected_mat.dtype, actual_mat.dtype)
             self.assertEqual(expected_thresh, actual_thresh[0])