コード例 #1
0
    def prepare_net(self):
        inputs = cv2.GInferInputs()
        g_inputs = []
        for input_name in self.inputs:
            if input_name in self.const_inputs:
                continue
            g_in = cv2.GMat()
            inputs.setInput(input_name, g_in)
            g_inputs.append(g_in)

        outputs = cv2.gapi.infer("net", inputs)
        g_outputs = [outputs.at(out_name) for out_name in self.output_names]
        self.comp = cv2.GComputation(cv2.GIn(*g_inputs), cv2.GOut(*g_outputs))
        args = ['net', str(self.model)]
        if self.weights is not None:
            args.append(str(self.weights))
        args.append(self.device.upper())
        if self.backend == 'ie':
            pp = cv2.gapi.ie.params(*args)
        else:
            pp = cv2.gapi.mx.params('net', str(self.model))
        for input_name, value in self._const_inputs.items():
            pp.constInput(input_name, value)
        if self.backend == 'ie':
            self.network_args = compile_args(cv2.gapi.networks(pp))
        else:
            mvcmd_file = os.environ.get('MVCMD_FILE', '')
            self.network_args = compile_args(
                cv2.gapi.networks(pp), cv2.gapi_mx_mvcmdFile(mvcmd_file)
            )
コード例 #2
0
        def test_age_gender_infer_roi_list(self):
            # NB: Check IE
            if not cv.dnn.DNN_TARGET_CPU in cv.dnn.getAvailableTargets(
                    cv.dnn.DNN_BACKEND_INFERENCE_ENGINE):
                return

            root_path = '/omz_intel_models/intel/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013'
            model_path = self.find_file(
                root_path + '.xml',
                [os.environ.get('OPENCV_DNN_TEST_DATA_PATH')])
            weights_path = self.find_file(
                root_path + '.bin',
                [os.environ.get('OPENCV_DNN_TEST_DATA_PATH')])
            device_id = 'CPU'

            rois = [(10, 15, 62, 62), (23, 50, 62, 62), (14, 100, 62, 62),
                    (80, 50, 62, 62)]
            img_path = self.find_file(
                'cv/face/david2.jpg',
                [os.environ.get('OPENCV_TEST_DATA_PATH')])
            img = cv.imread(img_path)

            # OpenCV DNN
            dnn_age_list = []
            dnn_gender_list = []
            for roi in rois:
                age, gender = self.infer_reference_network(
                    model_path, weights_path, self.make_roi(img, roi))
                dnn_age_list.append(age)
                dnn_gender_list.append(gender)

            # OpenCV G-API
            g_in = cv.GMat()
            g_rois = cv.GArrayT(cv.gapi.CV_RECT)
            inputs = cv.GInferInputs()
            inputs.setInput('data', g_in)

            outputs = cv.gapi.infer("net", g_rois, inputs)
            age_g = outputs.at("age_conv3")
            gender_g = outputs.at("prob")

            comp = cv.GComputation(cv.GIn(g_in, g_rois),
                                   cv.GOut(age_g, gender_g))
            pp = cv.gapi.ie.params("net", model_path, weights_path, device_id)

            gapi_age_list, gapi_gender_list = comp.apply(
                cv.gin(img, rois),
                args=cv.gapi.compile_args(cv.gapi.networks(pp)))

            # Check
            for gapi_age, gapi_gender, dnn_age, dnn_gender in zip(
                    gapi_age_list, gapi_gender_list, dnn_age_list,
                    dnn_gender_list):
                self.assertEqual(0.0,
                                 cv.norm(dnn_gender, gapi_gender, cv.NORM_INF))
                self.assertEqual(0.0, cv.norm(dnn_age, gapi_age, cv.NORM_INF))
コード例 #3
0
ファイル: test_gapi_infer.py プロジェクト: yding10/openvino
    def test_age_gender_infer(self):

        # NB: Check IE
        if not cv.dnn.DNN_TARGET_CPU in cv.dnn.getAvailableTargets(
                cv.dnn.DNN_BACKEND_INFERENCE_ENGINE):
            return

        root_path = '/omz_intel_models/intel/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013'
        model_path = self.find_file(
            root_path + '.xml', [os.environ.get('OPENCV_DNN_TEST_DATA_PATH')])
        weights_path = self.find_file(
            root_path + '.bin', [os.environ.get('OPENCV_DNN_TEST_DATA_PATH')])
        img_path = self.find_file('cv/face/david2.jpg',
                                  [os.environ.get('OPENCV_TEST_DATA_PATH')])
        device_id = 'CPU'
        img = cv.resize(cv.imread(img_path), (62, 62))

        # OpenCV DNN
        net = cv.dnn.readNetFromModelOptimizer(model_path, weights_path)
        net.setPreferableBackend(cv.dnn.DNN_BACKEND_INFERENCE_ENGINE)
        net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)

        blob = cv.dnn.blobFromImage(img)

        net.setInput(blob)
        dnn_age, dnn_gender = net.forward(net.getUnconnectedOutLayersNames())

        # OpenCV G-API
        g_in = cv.GMat()
        inputs = cv.GInferInputs()
        inputs.setInput('data', g_in)

        outputs = cv.gapi.infer("net", inputs)
        age_g = outputs.at("age_conv3")
        gender_g = outputs.at("prob")

        comp = cv.GComputation(cv.GIn(g_in), cv.GOut(age_g, gender_g))
        pp = cv.gapi.ie.params("net", model_path, weights_path, device_id)

        nets = cv.gapi.networks(pp)
        args = cv.compile_args(nets)
        gapi_age, gapi_gender = comp.apply(cv.gin(img),
                                           args=cv.compile_args(
                                               cv.gapi.networks(pp)))

        # Check
        self.assertEqual(0.0, cv.norm(dnn_gender, gapi_gender, cv.NORM_INF))
        self.assertEqual(0.0, cv.norm(dnn_age, gapi_age, cv.NORM_INF))
コード例 #4
0
    def test_person_detection_retail_0013(self):
        # NB: Check IE
        if not cv.dnn.DNN_TARGET_CPU in cv.dnn.getAvailableTargets(
                cv.dnn.DNN_BACKEND_INFERENCE_ENGINE):
            return

        root_path = '/omz_intel_models/intel/person-detection-retail-0013/FP32/person-detection-retail-0013'
        model_path = self.find_file(
            root_path + '.xml', [os.environ.get('OPENCV_DNN_TEST_DATA_PATH')])
        weights_path = self.find_file(
            root_path + '.bin', [os.environ.get('OPENCV_DNN_TEST_DATA_PATH')])
        img_path = self.find_file('gpu/lbpcascade/er.png',
                                  [os.environ.get('OPENCV_TEST_DATA_PATH')])
        device_id = 'CPU'
        img = cv.resize(cv.imread(img_path), (544, 320))

        # OpenCV DNN
        net = cv.dnn.readNetFromModelOptimizer(model_path, weights_path)
        net.setPreferableBackend(cv.dnn.DNN_BACKEND_INFERENCE_ENGINE)
        net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)

        blob = cv.dnn.blobFromImage(img)

        def parseSSD(detections, size):
            h, w = size
            bboxes = []
            detections = detections.reshape(-1, 7)
            for sample_id, class_id, confidence, xmin, ymin, xmax, ymax in detections:
                if confidence >= 0.5:
                    x = int(xmin * w)
                    y = int(ymin * h)
                    width = int(xmax * w - x)
                    height = int(ymax * h - y)
                    bboxes.append((x, y, width, height))

            return bboxes

        net.setInput(blob)
        dnn_detections = net.forward()
        dnn_boxes = parseSSD(np.array(dnn_detections), img.shape[:2])

        # OpenCV G-API
        g_in = cv.GMat()
        inputs = cv.GInferInputs()
        inputs.setInput('data', g_in)

        g_sz = cv.gapi.streaming.size(g_in)
        outputs = cv.gapi.infer("net", inputs)
        detections = outputs.at("detection_out")
        bboxes = cv.gapi.parseSSD(detections, g_sz, 0.5, False, False)

        comp = cv.GComputation(cv.GIn(g_in), cv.GOut(bboxes))
        pp = cv.gapi.ie.params("net", model_path, weights_path, device_id)

        gapi_boxes = comp.apply(cv.gin(img.astype(np.float32)),
                                args=cv.compile_args(cv.gapi.networks(pp)))

        # Comparison
        self.assertEqual(
            0.0,
            cv.norm(
                np.array(dnn_boxes).flatten(),
                np.array(gapi_boxes).flatten(), cv.NORM_INF))
コード例 #5
0
        for i in range(size):
            for st in eyesl[i]:
                out_l_st += [1 if st[0] < st[1] else 0]
            for st in eyesr[i]:
                out_r_st += [1 if st[0] < st[1] else 0]
        return out_l_st, out_r_st


if __name__ == '__main__':
    ARGUMENTS = build_argparser().parse_args()

    # ------------------------Demo's graph------------------------
    g_in = cv.GMat()

    # Detect faces
    face_inputs = cv.GInferInputs()
    face_inputs.setInput('data', g_in)
    face_outputs = cv.gapi.infer('face-detection', face_inputs)
    faces = face_outputs.at('detection_out')

    # Parse faces
    sz = cv.gapi.streaming.size(g_in)
    faces_rc = cv.gapi.parseSSD(faces, sz, 0.5, False, False)

    # Detect poses
    head_inputs = cv.GInferInputs()
    head_inputs.setInput('data', g_in)
    face_outputs = cv.gapi.infer('head-pose', faces_rc, head_inputs)
    angles_y = face_outputs.at('angle_y_fc')
    angles_p = face_outputs.at('angle_p_fc')
    angles_r = face_outputs.at('angle_r_fc')