Exemple #1
0
    def test_multiple_custom_kernels(self):
        sz = (3, 3, 3)
        in_mat1 = np.full(sz, 45, dtype=np.uint8)
        in_mat2 = np.full(sz, 50, dtype=np.uint8)

        # OpenCV
        expected = cv.mean(cv.split(cv.add(in_mat1, in_mat2))[1])

        # G-API
        g_in1 = cv.GMat()
        g_in2 = cv.GMat()
        g_sum = cv.gapi.add(g_in1, g_in2)
        g_b, g_r, g_g = cv.gapi.split3(g_sum)
        g_mean = cv.gapi.mean(g_b)

        comp = cv.GComputation(cv.GIn(g_in1, g_in2), cv.GOut(g_mean))

        pkg = cv.gapi_wip_kernels(
            (custom_add, 'org.opencv.core.math.add'),
            (custom_mean, 'org.opencv.core.math.mean'),
            (custom_split3, 'org.opencv.core.transform.split3'))

        actual = comp.apply(cv.gin(in_mat1, in_mat2),
                            args=cv.compile_args(pkg))

        self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
Exemple #2
0
    def test_custom_sizeR(self):
        # x, y, h, w
        roi = (10, 15, 100, 150)

        expected = (100, 150)

        # G-API
        g_r = cv.GOpaqueT(cv.gapi.CV_RECT)
        g_sz = cv.gapi.streaming.size(g_r)
        comp = cv.GComputation(cv.GIn(g_r), cv.GOut(g_sz))

        pkg = cv.gapi_wip_kernels((custom_sizeR, 'org.opencv.streaming.sizeR'))
        actual = comp.apply(cv.gin(roi), args=cv.compile_args(pkg))

        # cv.norm works with tuples ?
        self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
Exemple #3
0
    def test_custom_size(self):
        sz = (100, 150, 3)
        in_mat = np.full(sz, 45, dtype=np.uint8)

        # OpenCV
        expected = (100, 150)

        # G-API
        g_in = cv.GMat()
        g_sz = cv.gapi.streaming.size(g_in)
        comp = cv.GComputation(cv.GIn(g_in), cv.GOut(g_sz))

        pkg = cv.gapi_wip_kernels((custom_size, 'org.opencv.streaming.size'))
        actual = comp.apply(cv.gin(in_mat), args=cv.compile_args(pkg))

        self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
    def test_custom_op_boundingRect(self):
        points = [(0, 0), (0, 1), (1, 0), (1, 1)]

        # OpenCV
        expected = cv.boundingRect(np.array(points))

        # G-API
        g_pts = cv.GArrayT(cv.gapi.CV_POINT)
        g_br = boundingRect(g_pts)
        comp = cv.GComputation(cv.GIn(g_pts), cv.GOut(g_br))

        pkg = cv.gapi_wip_kernels((custom_boundingRect, 'custom.boundingRect'))
        actual = comp.apply(cv.gin(points), args=cv.compile_args(pkg))

        # cv.norm works with tuples ?
        self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
Exemple #5
0
    def test_custom_goodFeaturesToTrack(self):
        # G-API
        img_path = self.find_file('cv/face/david2.jpg',
                                  [os.environ.get('OPENCV_TEST_DATA_PATH')])
        in_mat = cv.cvtColor(cv.imread(img_path), cv.COLOR_RGB2GRAY)

        # NB: goodFeaturesToTrack configuration
        max_corners = 50
        quality_lvl = 0.01
        min_distance = 10
        block_sz = 3
        use_harris_detector = True
        k = 0.04
        mask = None

        # OpenCV
        expected = cv.goodFeaturesToTrack(
            in_mat,
            max_corners,
            quality_lvl,
            min_distance,
            mask=mask,
            blockSize=block_sz,
            useHarrisDetector=use_harris_detector,
            k=k)

        # G-API
        g_in = cv.GMat()
        g_out = cv.gapi.goodFeaturesToTrack(g_in, max_corners, quality_lvl,
                                            min_distance, mask, block_sz,
                                            use_harris_detector, k)

        comp = cv.GComputation(cv.GIn(g_in), cv.GOut(g_out))
        pkg = cv.gapi_wip_kernels(
            (custom_goodFeaturesToTrack,
             'org.opencv.imgproc.feature.goodFeaturesToTrack'))
        actual = comp.apply(cv.gin(in_mat), args=cv.compile_args(pkg))

        # NB: OpenCV & G-API have different output types.
        # OpenCV - numpy array with shape (num_points, 1, 2)
        # G-API  - list of tuples with size - num_points
        # Comparison
        self.assertEqual(
            0.0,
            cv.norm(expected.flatten(),
                    np.array(actual, dtype=np.float32).flatten(), cv.NORM_INF))
Exemple #6
0
    def test_custom_addC(self):
        sz = (3, 3, 3)
        in_mat = np.full(sz, 45, dtype=np.uint8)
        sc = (50, 10, 20)

        # Numpy reference, make array from sc to keep uint8 dtype.
        expected = in_mat + np.array(sc, dtype=np.uint8)

        # G-API
        g_in = cv.GMat()
        g_sc = cv.GScalar()
        g_out = cv.gapi.addC(g_in, g_sc)
        comp = cv.GComputation(cv.GIn(g_in, g_sc), cv.GOut(g_out))

        pkg = cv.gapi_wip_kernels((custom_addC, 'org.opencv.core.math.addC'))
        actual = comp.apply(cv.gin(in_mat, sc), args=cv.compile_args(pkg))

        self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
Exemple #7
0
    def test_custom_add(self):
        sz = (3, 3)
        in_mat1 = np.full(sz, 45, dtype=np.uint8)
        in_mat2 = np.full(sz, 50, dtype=np.uint8)

        # OpenCV
        expected = cv.add(in_mat1, in_mat2)

        # 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))

        pkg = cv.gapi_wip_kernels((custom_add, 'org.opencv.core.math.add'))
        actual = comp.apply(cv.gin(in_mat1, in_mat2),
                            args=cv.compile_args(pkg))

        self.assertEqual(0.0, cv.norm(expected, actual, cv.NORM_INF))
Exemple #8
0
    def test_custom_mean(self):
        img_path = self.find_file('cv/face/david2.jpg',
                                  [os.environ.get('OPENCV_TEST_DATA_PATH')])
        in_mat = cv.imread(img_path)

        # OpenCV
        expected = cv.mean(in_mat)

        # G-API
        g_in = cv.GMat()
        g_out = cv.gapi.mean(g_in)

        comp = cv.GComputation(g_in, g_out)

        pkg = cv.gapi_wip_kernels((custom_mean, 'org.opencv.core.math.mean'))
        actual = comp.apply(cv.gin(in_mat), args=cv.compile_args(pkg))

        # Comparison
        self.assertEqual(expected, actual)
    def test_custom_op_split3(self):
        sz = (4, 4)
        in_ch1 = np.full(sz, 1, dtype=np.uint8)
        in_ch2 = np.full(sz, 2, dtype=np.uint8)
        in_ch3 = np.full(sz, 3, dtype=np.uint8)
        # H x W x C
        in_mat = np.stack((in_ch1, in_ch2, in_ch3), axis=2)

        # G-API
        g_in = cv.GMat()
        g_ch1, g_ch2, g_ch3 = split3(g_in)

        comp = cv.GComputation(cv.GIn(g_in), cv.GOut(g_ch1, g_ch2, g_ch3))

        pkg = cv.gapi_wip_kernels((custom_split3, 'custom.split3'))
        ch1, ch2, ch3 = comp.apply(cv.gin(in_mat), args=cv.compile_args(pkg))

        self.assertEqual(0.0, cv.norm(in_ch1, ch1, cv.NORM_INF))
        self.assertEqual(0.0, cv.norm(in_ch2, ch2, cv.NORM_INF))
        self.assertEqual(0.0, cv.norm(in_ch3, ch3, cv.NORM_INF))