Skip to content

Commit 9ec7c68

Browse files
committed
changes
1 parent 6e8dca8 commit 9ec7c68

File tree

5 files changed

+113
-27
lines changed

5 files changed

+113
-27
lines changed

src/cpp/py_bindings/py_instance_segmentation.cpp

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,41 @@ void init_instance_segmentation(nb::module_& m) {
4040
[](MaskRCNNModel& self, const nb::ndarray<>& input) {
4141
return self.infer(pyutils::wrap_np_mat(input));
4242
})
43-
.def("infer_batch", [](MaskRCNNModel& self, const std::vector<nb::ndarray<>> inputs) {
44-
std::vector<ImageInputData> input_mats;
45-
input_mats.reserve(inputs.size());
46-
47-
for (const auto& input : inputs) {
48-
input_mats.push_back(pyutils::wrap_np_mat(input));
49-
}
50-
51-
return self.inferBatch(input_mats);
52-
})
53-
.def("postprocess", [](MaskRCNNModel& self, InferenceResult& infResult) {
54-
return self.postprocess(infResult);
55-
})
43+
.def("infer_batch",
44+
[](MaskRCNNModel& self, const std::vector<nb::ndarray<>> inputs) {
45+
std::vector<ImageInputData> input_mats;
46+
input_mats.reserve(inputs.size());
47+
48+
for (const auto& input : inputs) {
49+
input_mats.push_back(pyutils::wrap_np_mat(input));
50+
}
51+
52+
return self.inferBatch(input_mats);
53+
})
54+
.def("postprocess",
55+
[](MaskRCNNModel& self, InferenceResult& infResult) {
56+
return self.postprocess(infResult);
57+
})
5658
.def_prop_ro_static("__model__", [](nb::object) {
5759
return MaskRCNNModel::ModelType;
5860
});
61+
62+
63+
nb::class_<InstanceSegmentationResult, ResultBase>(m, "InstanceSegmentationResult")
64+
.def(nb::init<int64_t, std::shared_ptr<MetaData>>(),
65+
nb::arg("frameId") = -1,
66+
nb::arg("metaData") = nullptr)
67+
.def_ro("segmentedObjects", &InstanceSegmentationResult::segmentedObjects)
68+
.def_prop_ro(
69+
"feature_vector",
70+
[](InstanceSegmentationResult& r) {
71+
if (!r.feature_vector) {
72+
return nb::ndarray<float, nb::numpy, nb::c_contig>();
73+
}
74+
75+
return nb::ndarray<float, nb::numpy, nb::c_contig>(r.feature_vector.data(),
76+
r.feature_vector.get_shape().size(),
77+
r.feature_vector.get_shape().data());
78+
},
79+
nb::rv_policy::reference_internal);
5980
}

src/cpp/py_bindings/py_keypoint_detection.cpp

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,33 @@ void init_keypoint_detection(nb::module_& m) {
3535
[](KeypointDetectionModel& self, const nb::ndarray<>& input) {
3636
return self.infer(pyutils::wrap_np_mat(input));
3737
})
38-
.def("infer_batch", [](KeypointDetectionModel& self, const std::vector<nb::ndarray<>> inputs) {
39-
std::vector<ImageInputData> input_mats;
40-
input_mats.reserve(inputs.size());
41-
42-
for (const auto& input : inputs) {
43-
input_mats.push_back(pyutils::wrap_np_mat(input));
44-
}
45-
46-
return self.inferBatch(input_mats);
47-
})
48-
.def("postprocess", [](KeypointDetectionModel& self, InferenceResult& infResult) {
49-
return self.postprocess(infResult);
50-
})
38+
.def("infer_batch",
39+
[](KeypointDetectionModel& self, const std::vector<nb::ndarray<>> inputs) {
40+
std::vector<ImageInputData> input_mats;
41+
input_mats.reserve(inputs.size());
42+
43+
for (const auto& input : inputs) {
44+
input_mats.push_back(pyutils::wrap_np_mat(input));
45+
}
46+
47+
return self.inferBatch(input_mats);
48+
})
49+
.def("postprocess",
50+
[](KeypointDetectionModel& self, InferenceResult& infResult) {
51+
return self.postprocess(infResult);
52+
})
5153
.def_prop_ro_static("__model__", [](nb::object) {
5254
return KeypointDetectionModel::ModelType;
5355
});
56+
57+
nb::class_<KeypointDetectionResult, ResultBase>(m, "KeypointDetectionResult")
58+
.def(nb::init<int64_t, std::shared_ptr<MetaData>>(),
59+
nb::arg("frameId") = -1,
60+
nb::arg("metaData") = nullptr)
61+
.def_ro("poses", &KeypointDetectionResult::poses);
62+
63+
nb::class_<DetectedKeypoints>(m, "DetectedKeypoints")
64+
.def(nb::init<>())
65+
.def_ro("keypoints", &DetectedKeypoints::keypoints)
66+
.def_ro("scores", &DetectedKeypoints::scores);
5467
}

src/cpp/py_bindings/py_results.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (C) 2025 Intel Corporation
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
#include <nanobind/ndarray.h>
7+
#include <nanobind/stl/string.h>
8+
9+
#include <openvino/openvino.hpp>
10+
11+
#include "models/results.h"
12+
13+
namespace nb = nanobind;
14+
15+
void init_results_modules(nb::module_& m) {
16+
17+
nb::class_<DetectedObject>(m, "DetectedObject")
18+
.def(nb::init<>())
19+
.def_rw("labelID", &DetectedObject::labelID)
20+
.def_rw("label", &DetectedObject::label)
21+
.def_rw("confidence", &DetectedObject::confidence);
22+
23+
nb::class_<SegmentedObject, DetectedObject>(m, "SegmentedObject")
24+
.def(nb::init<>())
25+
.def_prop_ro(
26+
"mask",
27+
[](SegmentedObject& s) {
28+
return nb::ndarray<uint8_t, nb::numpy, nb::c_contig>(s.mask.data,
29+
{
30+
static_cast<size_t>(s.mask.rows),
31+
static_cast<size_t>(s.mask.cols),
32+
static_cast<size_t>(s.mask.channels())
33+
});
34+
},
35+
nb::rv_policy::reference_internal
36+
);
37+
}

src/cpp/py_bindings/py_segmentation.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,17 @@ void init_segmentation(nb::module_& m) {
5656
.def_prop_ro_static("__model__", [](nb::object) {
5757
return SegmentationModel::ModelType;
5858
});
59-
}
59+
60+
nb::class_<ImageResult, ResultBase>(m, "ImageResult")
61+
.def(nb::init<int64_t, std::shared_ptr<MetaData>>(),
62+
nb::arg("frameId") = -1,
63+
nb::arg("metaData") = nullptr)
64+
.def_prop_ro(
65+
"resultImage",
66+
[](ImageResult& r) {
67+
return nb::ndarray<uint8_t, nb::numpy, nb::c_contig>(r.resultImage.data,
68+
{static_cast<size_t>(r.resultImage.rows), static_cast<size_t>(r.resultImage.cols), static_cast<size_t>(r.resultImage.channels())});
69+
},
70+
nb::rv_policy::reference_internal
71+
);
72+
}

src/cpp/py_bindings/py_vision_api.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace nb = nanobind;
99

1010
void init_base_modules(nb::module_& m);
11+
void init_results_modules(nb::module_& m);
1112
void init_classification(nb::module_& m);
1213
void init_segmentation(nb::module_& m);
1314
void init_instance_segmentation(nb::module_& m);
@@ -17,6 +18,7 @@ void init_keypoint_detection(nb::module_& m);
1718
NB_MODULE(py_model_api, m) {
1819
m.doc() = "Nanobind binding for OpenVINO Vision API library";
1920
init_base_modules(m);
21+
init_results_modules(m);
2022
init_classification(m);
2123
init_keypoint_detection(m);
2224
init_segmentation(m);

0 commit comments

Comments
 (0)