From 0b51da219d1c63fc15d43e6275a5c2154b3d28e1 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 28 Dec 2024 02:13:57 +0900 Subject: [PATCH 01/25] Add initial version of python bindings --- model_api/cpp/CMakeLists.txt | 2 ++ model_api/cpp/cmake/model_apiConfig.cmake | 2 ++ model_api/cpp/py_bindings/CMakeLists.txt | 30 +++++++++++++++++++++++ model_api/cpp/py_bindings/py_models.cpp | 30 +++++++++++++++++++++++ model_api/cpp/py_bindings/py_tilers.cpp | 0 5 files changed, 64 insertions(+) create mode 100644 model_api/cpp/py_bindings/CMakeLists.txt create mode 100644 model_api/cpp/py_bindings/py_models.cpp create mode 100644 model_api/cpp/py_bindings/py_tilers.cpp diff --git a/model_api/cpp/CMakeLists.txt b/model_api/cpp/CMakeLists.txt index 4bcb9bbf..33ce58aa 100644 --- a/model_api/cpp/CMakeLists.txt +++ b/model_api/cpp/CMakeLists.txt @@ -83,6 +83,8 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "^GNU|(Apple)?Clang$") target_compile_options(model_api PRIVATE -Wall -Wextra -Wpedantic) endif() +add_subdirectory(py_bindings) + include(GenerateExportHeader) generate_export_header(model_api) diff --git a/model_api/cpp/cmake/model_apiConfig.cmake b/model_api/cpp/cmake/model_apiConfig.cmake index 84f6272b..570679ce 100644 --- a/model_api/cpp/cmake/model_apiConfig.cmake +++ b/model_api/cpp/cmake/model_apiConfig.cmake @@ -3,3 +3,5 @@ find_dependency(OpenCV COMPONENTS core imgproc) find_dependency(OpenVINO COMPONENTS Runtime) include("${CMAKE_CURRENT_LIST_DIR}/model_apiTargets.cmake") + +check_required_components() diff --git a/model_api/cpp/py_bindings/CMakeLists.txt b/model_api/cpp/py_bindings/CMakeLists.txt new file mode 100644 index 00000000..5efbfcd0 --- /dev/null +++ b/model_api/cpp/py_bindings/CMakeLists.txt @@ -0,0 +1,30 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# + +set(DEV_MODULE Development.Module) + +find_package(Python COMPONENTS Interpreter ${DEV_MODULE} REQUIRED) + +execute_process( + COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir + OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE nanobind_ROOT) +find_package(nanobind CONFIG REQUIRED) + + +file(GLOB BINDINGS_SOURCES ./*.cpp) +file(GLOB BINDINGS_HEADERS ./*.hpp) + +message(${BINDINGS_SOURCES}) + +nanobind_add_module(py_model_api NB_STATIC STABLE_ABI LTO ${BINDINGS_SOURCES} ${BINDINGS_HEADERS}) + +target_link_libraries(py_model_api PRIVATE model_api) + +nanobind_add_stub( + py_model_api_stub + MODULE py_model_api + OUTPUT py_model_api.pyi + PYTHON_PATH $ + DEPENDS py_model_api +) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp new file mode 100644 index 00000000..5f8da36c --- /dev/null +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +#include "models/results.h" +#include "models/classification_model.h" + +namespace nb = nanobind; + +NB_MODULE(py_model_api, m) { + m.doc() = "Nanobind binding for OpenVINO Vision API library"; + nb::class_(m, "ResultBase") + .def(nb::init<>()); + + nb::class_(m, "Classification") + .def(nb::init()) + .def_rw("id", &ClassificationResult::Classification::id) + .def_rw("label", &ClassificationResult::Classification::label) + .def_rw("score", &ClassificationResult::Classification::score); + + nb::class_(m, "ClassificationResult") + .def(nb::init<>()) + .def_ro("topLabels", &ClassificationResult::topLabels) + .def("__repr__", &ClassificationResult::operator std::string); + + + nb::class_(m, "ClassificationModel") + .def("create_model", nb::overload_cast(&ClassificationModel::create_model)); +} diff --git a/model_api/cpp/py_bindings/py_tilers.cpp b/model_api/cpp/py_bindings/py_tilers.cpp new file mode 100644 index 00000000..e69de29b From 01b5770909e81c07d91a7ab2838b8c48bed63603 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Thu, 2 Jan 2025 23:05:07 +0900 Subject: [PATCH 02/25] Update python deps --- model_api/python/pyproject.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/model_api/python/pyproject.toml b/model_api/python/pyproject.toml index 468d2752..316aece3 100644 --- a/model_api/python/pyproject.toml +++ b/model_api/python/pyproject.toml @@ -59,7 +59,10 @@ docs = [ "breathe", "graphviz", ] -full = ["openvino_model_api[dependencies, ovms, tests, docs]"] +build = [ + "nanobind==2.4.0", +] +full = ["openvino_model_api[dependencies, ovms, tests, docs, build]"] [project.urls] Homepage = "https://github.com/openvinotoolkit/model_api" From 12c4824b53a68a8cfc732d1ef61e72cb12e552b0 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 3 Jan 2025 21:32:22 +0900 Subject: [PATCH 03/25] Update linkage flags for GCC --- model_api/cpp/CMakeLists.txt | 1 + model_api/cpp/py_bindings/CMakeLists.txt | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/model_api/cpp/CMakeLists.txt b/model_api/cpp/CMakeLists.txt index 33ce58aa..f73fa2a5 100644 --- a/model_api/cpp/CMakeLists.txt +++ b/model_api/cpp/CMakeLists.txt @@ -81,6 +81,7 @@ if(MSVC) /EHsc) # Enable standard C++ stack unwinding, assume functions with extern "C" never throw elseif(CMAKE_CXX_COMPILER_ID MATCHES "^GNU|(Apple)?Clang$") target_compile_options(model_api PRIVATE -Wall -Wextra -Wpedantic) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") endif() add_subdirectory(py_bindings) diff --git a/model_api/cpp/py_bindings/CMakeLists.txt b/model_api/cpp/py_bindings/CMakeLists.txt index 5efbfcd0..b7d33e21 100644 --- a/model_api/cpp/py_bindings/CMakeLists.txt +++ b/model_api/cpp/py_bindings/CMakeLists.txt @@ -15,8 +15,6 @@ find_package(nanobind CONFIG REQUIRED) file(GLOB BINDINGS_SOURCES ./*.cpp) file(GLOB BINDINGS_HEADERS ./*.hpp) -message(${BINDINGS_SOURCES}) - nanobind_add_module(py_model_api NB_STATIC STABLE_ABI LTO ${BINDINGS_SOURCES} ${BINDINGS_HEADERS}) target_link_libraries(py_model_api PRIVATE model_api) From 8bb9a5d28c1eb02e75b3c54cf905e3a8e23fc253 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 4 Jan 2025 00:21:05 +0900 Subject: [PATCH 04/25] Classification bindings without config --- model_api/cpp/py_bindings/py_models.cpp | 36 +++++++++++++++++++++---- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp index 5f8da36c..da323d37 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -1,17 +1,21 @@ #include +#include #include +#include #include +#include #include -#include "models/results.h" +#include + #include "models/classification_model.h" +#include "models/results.h" namespace nb = nanobind; NB_MODULE(py_model_api, m) { m.doc() = "Nanobind binding for OpenVINO Vision API library"; - nb::class_(m, "ResultBase") - .def(nb::init<>()); + nb::class_(m, "ResultBase").def(nb::init<>()); nb::class_(m, "Classification") .def(nb::init()) @@ -24,7 +28,29 @@ NB_MODULE(py_model_api, m) { .def_ro("topLabels", &ClassificationResult::topLabels) .def("__repr__", &ClassificationResult::operator std::string); - nb::class_(m, "ClassificationModel") - .def("create_model", nb::overload_cast(&ClassificationModel::create_model)); + .def_static( + "create_model", + [](const std::string& model_path, + const std::map& configuration, + bool preload, + const std::string& device) { + return ClassificationModel::create_model(model_path, {}, preload, device); + }, + nb::arg("model_path"), + nb::arg("configuration") = ov::AnyMap({}), + nb::arg("preload") = true, + nb::arg("device") = "AUTO") + + .def("infer", [](ClassificationModel& self, const nb::ndarray<>& input) { + if (input.ndim() != 3 || input.shape(2) != 3 || input.dtype() != nb::dtype()) { + throw std::runtime_error("Input image should have HWC_8U layout"); + } + + int height = input.shape(0); + int width = input.shape(1); + + cv::Mat mat_wrapper(height, width, CV_8UC3, input.data()); + return self.infer(mat_wrapper); + }); } From ae9dc94b02f91e9945a7b25cf9c0ba1ddf69cc0d Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 4 Jan 2025 01:12:55 +0900 Subject: [PATCH 05/25] Wrap batch inference --- model_api/cpp/py_bindings/py_models.cpp | 32 ++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp index da323d37..679b9f32 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -13,6 +13,19 @@ namespace nb = nanobind; +namespace { +cv::Mat wrap_np_mat(const nb::ndarray<>& input) { + if (input.ndim() != 3 || input.shape(2) != 3 || input.dtype() != nb::dtype()) { + throw std::runtime_error("Input image should have HWC_8U layout"); + } + + int height = input.shape(0); + int width = input.shape(1); + + return cv::Mat(height, width, CV_8UC3, input.data()); +} +} // namespace + NB_MODULE(py_model_api, m) { m.doc() = "Nanobind binding for OpenVINO Vision API library"; nb::class_(m, "ResultBase").def(nb::init<>()); @@ -42,15 +55,18 @@ NB_MODULE(py_model_api, m) { nb::arg("preload") = true, nb::arg("device") = "AUTO") - .def("infer", [](ClassificationModel& self, const nb::ndarray<>& input) { - if (input.ndim() != 3 || input.shape(2) != 3 || input.dtype() != nb::dtype()) { - throw std::runtime_error("Input image should have HWC_8U layout"); - } + .def("__call__", + [](ClassificationModel& self, const nb::ndarray<>& input) { + return self.infer(wrap_np_mat(input)); + }) + .def("infer_batch", [](ClassificationModel& self, const std::vector> inputs) { + std::vector input_mats; + input_mats.reserve(inputs.size()); - int height = input.shape(0); - int width = input.shape(1); + for (const auto& input : inputs) { + input_mats.push_back(wrap_np_mat(input)); + } - cv::Mat mat_wrapper(height, width, CV_8UC3, input.data()); - return self.infer(mat_wrapper); + return self.inferBatch(input_mats); }); } From b215fecb7498d02501031fd19473409fdac359ab Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 4 Jan 2025 01:36:20 +0900 Subject: [PATCH 06/25] Wrap load() to enable setting correct number of infer requests --- model_api/cpp/py_bindings/py_models.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp index 679b9f32..3da41803 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -7,6 +7,7 @@ #include #include +#include #include "models/classification_model.h" #include "models/results.h" @@ -41,7 +42,15 @@ NB_MODULE(py_model_api, m) { .def_ro("topLabels", &ClassificationResult::topLabels) .def("__repr__", &ClassificationResult::operator std::string); - nb::class_(m, "ClassificationModel") + nb::class_(m, "ModelBase") + .def("load", [](ModelBase& self, const std::string& device, size_t num_infer_requests) { + auto core = ov::Core(); + self.load(core, device, num_infer_requests); + }); + + nb::class_(m, "ImageModel"); + + nb::class_(m, "ClassificationModel") .def_static( "create_model", [](const std::string& model_path, From 67fd082dd7174e51c5f8a2e7d247d31a6f3662fd Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 4 Jan 2025 02:18:18 +0900 Subject: [PATCH 07/25] Add a simple any map converter --- model_api/cpp/py_bindings/py_models.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp index 3da41803..d303e740 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -25,6 +25,19 @@ cv::Mat wrap_np_mat(const nb::ndarray<>& input) { return cv::Mat(height, width, CV_8UC3, input.data()); } + +ov::Any py_object_to_any(const nb::object& py_obj, std::string property_name) { + if (nb::isinstance(py_obj)) { + return ov::Any(std::string(static_cast(py_obj).c_str())); + } else if (nb::isinstance(py_obj)) { + return ov::Any(static_cast(static_cast(py_obj))); + } else if (nb::isinstance(py_obj)) { + return ov::Any(static_cast(static_cast(py_obj))); + } else { + OPENVINO_THROW("Property \"" + property_name + "\" has unsupported type."); + } +} + } // namespace NB_MODULE(py_model_api, m) { @@ -57,7 +70,12 @@ NB_MODULE(py_model_api, m) { const std::map& configuration, bool preload, const std::string& device) { - return ClassificationModel::create_model(model_path, {}, preload, device); + auto ov_any_config = ov::AnyMap(); + for (const auto& item : configuration) { + ov_any_config[item.first] = py_object_to_any(item.second, item.first); + } + + return ClassificationModel::create_model(model_path, ov_any_config, preload, device); }, nb::arg("model_path"), nb::arg("configuration") = ov::AnyMap({}), From a39ef1151cc264beb40e5ad0e0b45158e6b20c4d Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 4 Jan 2025 02:25:58 +0900 Subject: [PATCH 08/25] Add license --- model_api/cpp/py_bindings/py_models.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp index d303e740..37ec5869 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -1,3 +1,8 @@ +/* + * Copyright (C) 2025 Intel Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + #include #include #include From 2c515cc7497d65657f07764128925022ffb3193b Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Thu, 9 Jan 2025 02:25:17 +0900 Subject: [PATCH 09/25] Wrap tensor results --- model_api/cpp/py_bindings/py_models.cpp | 27 ++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_models.cpp index 37ec5869..45ade05b 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_models.cpp @@ -58,7 +58,31 @@ NB_MODULE(py_model_api, m) { nb::class_(m, "ClassificationResult") .def(nb::init<>()) .def_ro("topLabels", &ClassificationResult::topLabels) - .def("__repr__", &ClassificationResult::operator std::string); + .def("__repr__", &ClassificationResult::operator std::string) + .def_prop_ro( + "feature_vector", + [](ClassificationResult& r) { + if (!r.feature_vector) { + return nb::ndarray(); + } + + return nb::ndarray(r.feature_vector.data(), + r.feature_vector.get_shape().size(), + r.feature_vector.get_shape().data()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro( + "saliency_map", + [](ClassificationResult& r) { + if (!r.saliency_map) { + return nb::ndarray(); + } + + return nb::ndarray(r.saliency_map.data(), + r.saliency_map.get_shape().size(), + r.saliency_map.get_shape().data()); + }, + nb::rv_policy::reference_internal); nb::class_(m, "ModelBase") .def("load", [](ModelBase& self, const std::string& device, size_t num_infer_requests) { @@ -102,3 +126,4 @@ NB_MODULE(py_model_api, m) { return self.inferBatch(input_mats); }); } + From f9019e05ad423e133bc1948dfb705102561ae235 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 19:23:11 +0900 Subject: [PATCH 10/25] Update bindings directory structure --- model_api/cpp/py_bindings/py_base.cpp | 26 ++++++++++ .../{py_models.cpp => py_classificaiton.cpp} | 52 +++---------------- model_api/cpp/py_bindings/py_tilers.cpp | 0 model_api/cpp/py_bindings/py_utils.cpp | 33 ++++++++++++ model_api/cpp/py_bindings/py_utils.hpp | 16 ++++++ model_api/cpp/py_bindings/py_vision_api.cpp | 17 ++++++ 6 files changed, 99 insertions(+), 45 deletions(-) create mode 100644 model_api/cpp/py_bindings/py_base.cpp rename model_api/cpp/py_bindings/{py_models.cpp => py_classificaiton.cpp} (65%) delete mode 100644 model_api/cpp/py_bindings/py_tilers.cpp create mode 100644 model_api/cpp/py_bindings/py_utils.cpp create mode 100644 model_api/cpp/py_bindings/py_utils.hpp create mode 100644 model_api/cpp/py_bindings/py_vision_api.cpp diff --git a/model_api/cpp/py_bindings/py_base.cpp b/model_api/cpp/py_bindings/py_base.cpp new file mode 100644 index 00000000..4a64ad55 --- /dev/null +++ b/model_api/cpp/py_bindings/py_base.cpp @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2025 Intel Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#include + +#include "models/results.h" +#include "models/image_model.h" + +namespace nb = nanobind; + +void init_base_modules(nb::module_& m) { + nb::class_(m, "ResultBase").def(nb::init<>()); + + nb::class_(m, "ModelBase") + .def("load", [](ModelBase& self, const std::string& device, size_t num_infer_requests) { + auto core = ov::Core(); + self.load(core, device, num_infer_requests); + }); + + nb::class_(m, "ImageModel"); +} diff --git a/model_api/cpp/py_bindings/py_models.cpp b/model_api/cpp/py_bindings/py_classificaiton.cpp similarity index 65% rename from model_api/cpp/py_bindings/py_models.cpp rename to model_api/cpp/py_bindings/py_classificaiton.cpp index 45ade05b..5f19e818 100644 --- a/model_api/cpp/py_bindings/py_models.cpp +++ b/model_api/cpp/py_bindings/py_classificaiton.cpp @@ -1,9 +1,9 @@ + /* * Copyright (C) 2025 Intel Corporation * SPDX-License-Identifier: Apache-2.0 */ -#include #include #include #include @@ -11,44 +11,14 @@ #include #include -#include -#include - #include "models/classification_model.h" #include "models/results.h" -namespace nb = nanobind; - -namespace { -cv::Mat wrap_np_mat(const nb::ndarray<>& input) { - if (input.ndim() != 3 || input.shape(2) != 3 || input.dtype() != nb::dtype()) { - throw std::runtime_error("Input image should have HWC_8U layout"); - } - - int height = input.shape(0); - int width = input.shape(1); - - return cv::Mat(height, width, CV_8UC3, input.data()); -} - -ov::Any py_object_to_any(const nb::object& py_obj, std::string property_name) { - if (nb::isinstance(py_obj)) { - return ov::Any(std::string(static_cast(py_obj).c_str())); - } else if (nb::isinstance(py_obj)) { - return ov::Any(static_cast(static_cast(py_obj))); - } else if (nb::isinstance(py_obj)) { - return ov::Any(static_cast(static_cast(py_obj))); - } else { - OPENVINO_THROW("Property \"" + property_name + "\" has unsupported type."); - } -} - -} // namespace +#include "py_utils.hpp" -NB_MODULE(py_model_api, m) { - m.doc() = "Nanobind binding for OpenVINO Vision API library"; - nb::class_(m, "ResultBase").def(nb::init<>()); +namespace pyutils = vision::nanobind::utils; +void init_classification(nb::module_& m) { nb::class_(m, "Classification") .def(nb::init()) .def_rw("id", &ClassificationResult::Classification::id) @@ -84,13 +54,6 @@ NB_MODULE(py_model_api, m) { }, nb::rv_policy::reference_internal); - nb::class_(m, "ModelBase") - .def("load", [](ModelBase& self, const std::string& device, size_t num_infer_requests) { - auto core = ov::Core(); - self.load(core, device, num_infer_requests); - }); - - nb::class_(m, "ImageModel"); nb::class_(m, "ClassificationModel") .def_static( @@ -101,7 +64,7 @@ NB_MODULE(py_model_api, m) { const std::string& device) { auto ov_any_config = ov::AnyMap(); for (const auto& item : configuration) { - ov_any_config[item.first] = py_object_to_any(item.second, item.first); + ov_any_config[item.first] = pyutils::py_object_to_any(item.second, item.first); } return ClassificationModel::create_model(model_path, ov_any_config, preload, device); @@ -113,17 +76,16 @@ NB_MODULE(py_model_api, m) { .def("__call__", [](ClassificationModel& self, const nb::ndarray<>& input) { - return self.infer(wrap_np_mat(input)); + return self.infer(pyutils::wrap_np_mat(input)); }) .def("infer_batch", [](ClassificationModel& self, const std::vector> inputs) { std::vector input_mats; input_mats.reserve(inputs.size()); for (const auto& input : inputs) { - input_mats.push_back(wrap_np_mat(input)); + input_mats.push_back(pyutils::wrap_np_mat(input)); } return self.inferBatch(input_mats); }); } - diff --git a/model_api/cpp/py_bindings/py_tilers.cpp b/model_api/cpp/py_bindings/py_tilers.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/model_api/cpp/py_bindings/py_utils.cpp b/model_api/cpp/py_bindings/py_utils.cpp new file mode 100644 index 00000000..918a5e31 --- /dev/null +++ b/model_api/cpp/py_bindings/py_utils.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2025 Intel Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "py_utils.hpp" + +namespace vision::nanobind::utils { + +cv::Mat wrap_np_mat(const nb::ndarray<>& input) { + if (input.ndim() != 3 || input.shape(2) != 3 || input.dtype() != nb::dtype()) { + throw std::runtime_error("Input image should have HWC_8U layout"); + } + + int height = input.shape(0); + int width = input.shape(1); + + return cv::Mat(height, width, CV_8UC3, input.data()); +} + +ov::Any py_object_to_any(const nb::object& py_obj, const std::string& property_name) { + if (nb::isinstance(py_obj)) { + return ov::Any(std::string(static_cast(py_obj).c_str())); + } else if (nb::isinstance(py_obj)) { + return ov::Any(static_cast(static_cast(py_obj))); + } else if (nb::isinstance(py_obj)) { + return ov::Any(static_cast(static_cast(py_obj))); + } else { + OPENVINO_THROW("Property \"" + property_name + "\" has unsupported type."); + } +} + +} diff --git a/model_api/cpp/py_bindings/py_utils.hpp b/model_api/cpp/py_bindings/py_utils.hpp new file mode 100644 index 00000000..13050f8d --- /dev/null +++ b/model_api/cpp/py_bindings/py_utils.hpp @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2025 Intel Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once +#include +#include +#include + +namespace nb = nanobind; + +namespace vision::nanobind::utils { + cv::Mat wrap_np_mat(const nb::ndarray<>& input); + ov::Any py_object_to_any(const nb::object& py_obj, const std::string& property_name); +} diff --git a/model_api/cpp/py_bindings/py_vision_api.cpp b/model_api/cpp/py_bindings/py_vision_api.cpp new file mode 100644 index 00000000..c10e6486 --- /dev/null +++ b/model_api/cpp/py_bindings/py_vision_api.cpp @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2025 Intel Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +namespace nb = nanobind; + +void init_classification(nb::module_& m); +void init_base_modules(nb::module_& m); + +NB_MODULE(py_model_api, m) { + m.doc() = "Nanobind binding for OpenVINO Vision API library"; + init_base_modules(m); + init_classification(m); +} From ad44de25887f3eb872199c032c6e0ad6f40768b0 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 19:45:50 +0900 Subject: [PATCH 11/25] Add cmake option to anable/disable bindings --- model_api/cpp/CMakeLists.txt | 6 +++++- model_api/cpp/py_bindings/py_classificaiton.cpp | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/model_api/cpp/CMakeLists.txt b/model_api/cpp/CMakeLists.txt index f73fa2a5..ee16ae2c 100644 --- a/model_api/cpp/CMakeLists.txt +++ b/model_api/cpp/CMakeLists.txt @@ -4,6 +4,8 @@ cmake_minimum_required(VERSION 3.26) +option(ENABLE_PY_BINDINGS "Enables building python bindings package" ON) + # Multi config generators such as Visual Studio ignore CMAKE_BUILD_TYPE. Multi config generators are configured with # CMAKE_CONFIGURATION_TYPES, but limiting options in it completely removes such build options get_property(GENERATOR_IS_MULTI_CONFIG_VAR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -84,7 +86,9 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "^GNU|(Apple)?Clang$") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") endif() -add_subdirectory(py_bindings) +if (ENABLE_PY_BINDINGS) + add_subdirectory(py_bindings) +endif() include(GenerateExportHeader) diff --git a/model_api/cpp/py_bindings/py_classificaiton.cpp b/model_api/cpp/py_bindings/py_classificaiton.cpp index 5f19e818..9ca9edff 100644 --- a/model_api/cpp/py_bindings/py_classificaiton.cpp +++ b/model_api/cpp/py_bindings/py_classificaiton.cpp @@ -1,4 +1,3 @@ - /* * Copyright (C) 2025 Intel Corporation * SPDX-License-Identifier: Apache-2.0 @@ -54,7 +53,6 @@ void init_classification(nb::module_& m) { }, nb::rv_policy::reference_internal); - nb::class_(m, "ClassificationModel") .def_static( "create_model", From 0016a07e4a4fff09f04e24dede9ff7a530a6a335 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 19:57:07 +0900 Subject: [PATCH 12/25] Fix linter --- model_api/cpp/py_bindings/py_base.cpp | 2 +- model_api/cpp/py_bindings/py_classificaiton.cpp | 1 - model_api/cpp/py_bindings/py_utils.cpp | 2 +- model_api/cpp/py_bindings/py_utils.hpp | 7 ++++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/model_api/cpp/py_bindings/py_base.cpp b/model_api/cpp/py_bindings/py_base.cpp index 4a64ad55..e257991d 100644 --- a/model_api/cpp/py_bindings/py_base.cpp +++ b/model_api/cpp/py_bindings/py_base.cpp @@ -8,8 +8,8 @@ #include -#include "models/results.h" #include "models/image_model.h" +#include "models/results.h" namespace nb = nanobind; diff --git a/model_api/cpp/py_bindings/py_classificaiton.cpp b/model_api/cpp/py_bindings/py_classificaiton.cpp index 9ca9edff..19e2b4eb 100644 --- a/model_api/cpp/py_bindings/py_classificaiton.cpp +++ b/model_api/cpp/py_bindings/py_classificaiton.cpp @@ -12,7 +12,6 @@ #include "models/classification_model.h" #include "models/results.h" - #include "py_utils.hpp" namespace pyutils = vision::nanobind::utils; diff --git a/model_api/cpp/py_bindings/py_utils.cpp b/model_api/cpp/py_bindings/py_utils.cpp index 918a5e31..d08881c5 100644 --- a/model_api/cpp/py_bindings/py_utils.cpp +++ b/model_api/cpp/py_bindings/py_utils.cpp @@ -30,4 +30,4 @@ ov::Any py_object_to_any(const nb::object& py_obj, const std::string& property_n } } -} +} // namespace vision::nanobind::utils diff --git a/model_api/cpp/py_bindings/py_utils.hpp b/model_api/cpp/py_bindings/py_utils.hpp index 13050f8d..955dbfe3 100644 --- a/model_api/cpp/py_bindings/py_utils.hpp +++ b/model_api/cpp/py_bindings/py_utils.hpp @@ -5,12 +5,13 @@ #pragma once #include + #include #include namespace nb = nanobind; namespace vision::nanobind::utils { - cv::Mat wrap_np_mat(const nb::ndarray<>& input); - ov::Any py_object_to_any(const nb::object& py_obj, const std::string& property_name); -} +cv::Mat wrap_np_mat(const nb::ndarray<>& input); +ov::Any py_object_to_any(const nb::object& py_obj, const std::string& property_name); +} // namespace vision::nanobind::utils From d5b33c6a3bd067f05a4e1a6b1078dcd52cd10a12 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 20:37:46 +0900 Subject: [PATCH 13/25] Update copyrights --- model_api/cpp/CMakeLists.txt | 2 +- model_api/cpp/py_bindings/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/model_api/cpp/CMakeLists.txt b/model_api/cpp/CMakeLists.txt index ee16ae2c..44e9b057 100644 --- a/model_api/cpp/CMakeLists.txt +++ b/model_api/cpp/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2024 Intel Corporation +# Copyright (C) 2018-2025 Intel Corporation # SPDX-License-Identifier: Apache-2.0 # diff --git a/model_api/cpp/py_bindings/CMakeLists.txt b/model_api/cpp/py_bindings/CMakeLists.txt index b7d33e21..91eb70ce 100644 --- a/model_api/cpp/py_bindings/CMakeLists.txt +++ b/model_api/cpp/py_bindings/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2024 Intel Corporation +# Copyright (C) 2025 Intel Corporation # SPDX-License-Identifier: Apache-2.0 # From 0425d596e57c4af974fdd3719753a679b75381e7 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 20:41:49 +0900 Subject: [PATCH 14/25] Update CI scripts --- .github/workflows/test_precommit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 1e3fc906..01e3f7d8 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -63,7 +63,7 @@ jobs: run: | source venv/bin/activate python -m pip install --upgrade pip - pip install model_api/python/[tests] --extra-index-url https://download.pytorch.org/whl/cpu + pip install model_api/python/[tests,build] --extra-index-url https://download.pytorch.org/whl/cpu sudo bash model_api/cpp/install_dependencies.sh - name: Prepare test data @@ -113,7 +113,7 @@ jobs: run: | mkdir build && cd build MSYS_NO_PATHCONV=1 cmake ../examples/cpp/ -DOpenVINO_DIR=$GITHUB_WORKSPACE/w_openvino_toolkit_windows_2024.6.0.17404.4c0f47d2335_x86_64/runtime/cmake -DOpenCV_DIR=$GITHUB_WORKSPACE/opencv/opencv/build -DCMAKE_CXX_FLAGS=/WX - cmake --build . --config Release -j $((`nproc`*2+2)) + cmake --build . --config Release -j $((`nproc`*2+2)) -DENABLE_PY_BINDINGS=OFF - name: Run sync sample shell: cmd # .\w_openvino_toolkit_windows_2023.0.0.10926.b4452d56304_x86_64\setupvars.bat exits with 0 code without moving to a next command. Set PATH manually From bcaf3d72ab2c73d075eaafc286c5204badc7e609 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 21:20:55 +0900 Subject: [PATCH 15/25] Fix more issues in CI scripts --- .github/workflows/test_accuracy.yml | 5 +++-- .github/workflows/test_precommit.yml | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index d9f0a7bd..c706ba19 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -25,7 +25,7 @@ jobs: run: | source venv/bin/activate python -m pip install --upgrade pip - pip install model_api/python/[tests] --extra-index-url https://download.pytorch.org/whl/cpu + pip install model_api/python/[tests, build] --extra-index-url https://download.pytorch.org/whl/cpu - name: Prepare test data run: | source venv/bin/activate @@ -35,11 +35,12 @@ jobs: source venv/bin/activate pytest --data=./data tests/python/accuracy/test_accuracy.py DATA=data pytest --data=./data tests/python/accuracy/test_YOLOv8.py - - name: Install CPP ependencies + - name: Install CPP dependencies run: | sudo bash model_api/cpp/install_dependencies.sh - name: Build CPP Test run: | + source venv/bin/activate mkdir build && cd build cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror make -j diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 01e3f7d8..f0409382 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -72,6 +72,7 @@ jobs: python tests/cpp/precommit/prepare_data.py -d data -p tests/cpp/precommit/public_scope.json - name: Build run: | + source venv/bin/activate mkdir build && cd build cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror cmake --build . -j $((`nproc`*2+2)) @@ -112,8 +113,8 @@ jobs: shell: bash run: | mkdir build && cd build - MSYS_NO_PATHCONV=1 cmake ../examples/cpp/ -DOpenVINO_DIR=$GITHUB_WORKSPACE/w_openvino_toolkit_windows_2024.6.0.17404.4c0f47d2335_x86_64/runtime/cmake -DOpenCV_DIR=$GITHUB_WORKSPACE/opencv/opencv/build -DCMAKE_CXX_FLAGS=/WX - cmake --build . --config Release -j $((`nproc`*2+2)) -DENABLE_PY_BINDINGS=OFF + MSYS_NO_PATHCONV=1 cmake ../examples/cpp/ -DOpenVINO_DIR=$GITHUB_WORKSPACE/w_openvino_toolkit_windows_2024.6.0.17404.4c0f47d2335_x86_64/runtime/cmake -DOpenCV_DIR=$GITHUB_WORKSPACE/opencv/opencv/build -DCMAKE_CXX_FLAGS=/WX -DENABLE_PY_BINDINGS=OFF + cmake --build . --config Release -j $((`nproc`*2+2)) - name: Run sync sample shell: cmd # .\w_openvino_toolkit_windows_2023.0.0.10926.b4452d56304_x86_64\setupvars.bat exits with 0 code without moving to a next command. Set PATH manually From 24b865fe4bd2b2afafad8f03a021945b5cf51073 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 21:33:44 +0900 Subject: [PATCH 16/25] Add missing requirements --- .github/workflows/test_accuracy.yml | 2 +- .github/workflows/test_precommit.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index c706ba19..3be787e7 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -25,7 +25,7 @@ jobs: run: | source venv/bin/activate python -m pip install --upgrade pip - pip install model_api/python/[tests, build] --extra-index-url https://download.pytorch.org/whl/cpu + pip install model_api/python/[tests,build] --extra-index-url https://download.pytorch.org/whl/cpu - name: Prepare test data run: | source venv/bin/activate diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index f0409382..66a52ef6 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -97,7 +97,7 @@ jobs: run: | source venv/Scripts/activate python -m pip install --upgrade pip - pip install model_api/python/[tests] --extra-index-url https://download.pytorch.org/whl/cpu + pip install model_api/python/[tests,build] --extra-index-url https://download.pytorch.org/whl/cpu curl https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.6/windows/w_openvino_toolkit_windows_2024.6.0.17404.4c0f47d2335_x86_64.zip --output w_openvino_toolkit_windows.zip unzip w_openvino_toolkit_windows.zip rm w_openvino_toolkit_windows.zip From 9ae15b6316821f929ecc84ed58701906e21625c0 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 22:03:26 +0900 Subject: [PATCH 17/25] Dismiss pre-defined gha-specific ython paath --- .github/workflows/test_accuracy.yml | 2 +- .github/workflows/test_precommit.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index 3be787e7..c6ae5c2c 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -42,7 +42,7 @@ jobs: run: | source venv/bin/activate mkdir build && cd build - cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror + Python3_ROOT_DIR= cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror make -j - name: Run CPP Test run: | diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 66a52ef6..6798f21c 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -74,7 +74,7 @@ jobs: run: | source venv/bin/activate mkdir build && cd build - cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror + Python3_ROOT_DIR= cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror cmake --build . -j $((`nproc`*2+2)) - name: Run test run: | From aa8ada658c19a1b2d592bfe0fbc38c497b8d2e04 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 22:15:24 +0900 Subject: [PATCH 18/25] Force cmake to use python from venv --- .github/workflows/test_accuracy.yml | 2 +- .github/workflows/test_precommit.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index c6ae5c2c..196efcc1 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -42,7 +42,7 @@ jobs: run: | source venv/bin/activate mkdir build && cd build - Python3_ROOT_DIR= cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror + cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror -DPython3_FIND_VIRTUALENV=ONLY make -j - name: Run CPP Test run: | diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 6798f21c..21d1c3b8 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -74,7 +74,7 @@ jobs: run: | source venv/bin/activate mkdir build && cd build - Python3_ROOT_DIR= cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror + cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror -DPython3_FIND_VIRTUALENV=ONLY cmake --build . -j $((`nproc`*2+2)) - name: Run test run: | From 35001f87520731096c4e31957535d18eed998522 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Fri, 10 Jan 2025 22:54:42 +0900 Subject: [PATCH 19/25] Workaround missing nanobind with global package installation --- .github/workflows/test_accuracy.yml | 4 ++-- .github/workflows/test_precommit.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index 196efcc1..6b75e0c6 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -40,9 +40,9 @@ jobs: sudo bash model_api/cpp/install_dependencies.sh - name: Build CPP Test run: | - source venv/bin/activate + pip install nanobind==2.4.0 mkdir build && cd build - cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror -DPython3_FIND_VIRTUALENV=ONLY + cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror make -j - name: Run CPP Test run: | diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 21d1c3b8..e2959754 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -72,9 +72,9 @@ jobs: python tests/cpp/precommit/prepare_data.py -d data -p tests/cpp/precommit/public_scope.json - name: Build run: | - source venv/bin/activate mkdir build && cd build - cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror -DPython3_FIND_VIRTUALENV=ONLY + pip install nanobind==2.4.0 + cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror cmake --build . -j $((`nproc`*2+2)) - name: Run test run: | From a4472ac10808164087477a0a9c46fced0fa1180f Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Sat, 11 Jan 2025 04:22:15 +0900 Subject: [PATCH 20/25] Try python 3.10 --- .github/workflows/test_accuracy.yml | 2 +- .github/workflows/test_precommit.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index 6b75e0c6..9c9c44ff 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: "3.10" cache: pip - name: Create and start a virtual environment run: | diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index e2959754..26620803 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -53,7 +53,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: "3.10" cache: pip - name: Create and start a virtual environment run: | From c7aab3fe44ee22d4f6910ad9894ee9c0da936d10 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Tue, 14 Jan 2025 01:26:46 +0900 Subject: [PATCH 21/25] Try to reduce the amount of warning in tests --- tests/cpp/accuracy/CMakeLists.txt | 2 +- tests/cpp/precommit/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cpp/accuracy/CMakeLists.txt b/tests/cpp/accuracy/CMakeLists.txt index 7bac347c..28e2917c 100644 --- a/tests/cpp/accuracy/CMakeLists.txt +++ b/tests/cpp/accuracy/CMakeLists.txt @@ -30,7 +30,7 @@ if(MSVC) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "^GNU|(Apple)?Clang$") - add_compile_options(-Wall -Wextra -Wpedantic) + add_compile_options(-Wall -Wextra) endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64.*|aarch64.*|AARCH64.*)") diff --git a/tests/cpp/precommit/CMakeLists.txt b/tests/cpp/precommit/CMakeLists.txt index a7306cc0..93508c5a 100644 --- a/tests/cpp/precommit/CMakeLists.txt +++ b/tests/cpp/precommit/CMakeLists.txt @@ -29,7 +29,7 @@ if(MSVC) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "^GNU|(Apple)?Clang$") - add_compile_options(-Wall -Wextra -Wpedantic) + add_compile_options(-Wall -Wextra) endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64.*|aarch64.*|AARCH64.*)") From 3a04f39ad960d641de3fc1fb30706fccc622956b Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Tue, 14 Jan 2025 01:40:31 +0900 Subject: [PATCH 22/25] Limit ubuntu version in cpp build --- .github/workflows/test_precommit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 26620803..56ca12e8 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -48,7 +48,7 @@ jobs: # missingInclude: cppcheck can't find stl, openvino, opencv other_options: --suppress=missingInclude -Imodel_api/cpp/models/include -Imodel_api/cpp/utils/include -Imodel_api/cpp/pipelines/include --check-config CPP-Precommit: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 From b617c3afeea0e5eabbbbe149df7209089d732295 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Tue, 14 Jan 2025 04:20:52 +0900 Subject: [PATCH 23/25] Ignore warnings on cpp pre-commit --- .github/workflows/test_precommit.yml | 2 +- tests/cpp/precommit/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 56ca12e8..236ff7d3 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -74,7 +74,7 @@ jobs: run: | mkdir build && cd build pip install nanobind==2.4.0 - cmake ../tests/cpp/precommit/ -DCMAKE_CXX_FLAGS=-Werror + cmake ../tests/cpp/precommit/ cmake --build . -j $((`nproc`*2+2)) - name: Run test run: | diff --git a/tests/cpp/precommit/CMakeLists.txt b/tests/cpp/precommit/CMakeLists.txt index 93508c5a..a7306cc0 100644 --- a/tests/cpp/precommit/CMakeLists.txt +++ b/tests/cpp/precommit/CMakeLists.txt @@ -29,7 +29,7 @@ if(MSVC) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "^GNU|(Apple)?Clang$") - add_compile_options(-Wall -Wextra) + add_compile_options(-Wall -Wextra -Wpedantic) endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64.*|aarch64.*|AARCH64.*)") From e108ee416acd9b186a40fe14e4fa640ae6e3b0aa Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Tue, 14 Jan 2025 04:34:48 +0900 Subject: [PATCH 24/25] Update installation script --- .github/workflows/test_precommit.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_precommit.yml b/.github/workflows/test_precommit.yml index 236ff7d3..6084a799 100644 --- a/.github/workflows/test_precommit.yml +++ b/.github/workflows/test_precommit.yml @@ -74,6 +74,7 @@ jobs: run: | mkdir build && cd build pip install nanobind==2.4.0 + pip install typing_extensions==4.12.2 cmake ../tests/cpp/precommit/ cmake --build . -j $((`nproc`*2+2)) - name: Run test From e7f31e516c0e7ed3dd315d73a0df6d9b7ca35082 Mon Sep 17 00:00:00 2001 From: Vladisalv Sovrasov Date: Tue, 14 Jan 2025 04:56:15 +0900 Subject: [PATCH 25/25] Update cpp accuracy build settings --- .github/workflows/test_accuracy.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_accuracy.yml b/.github/workflows/test_accuracy.yml index 9c9c44ff..e4584c1c 100644 --- a/.github/workflows/test_accuracy.yml +++ b/.github/workflows/test_accuracy.yml @@ -10,7 +10,7 @@ concurrency: cancel-in-progress: true jobs: test_accuracy: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 @@ -41,8 +41,9 @@ jobs: - name: Build CPP Test run: | pip install nanobind==2.4.0 + pip install typing_extensions==4.12.2 mkdir build && cd build - cmake ../tests/cpp/accuracy/ -DCMAKE_CXX_FLAGS=-Werror + cmake ../tests/cpp/accuracy/ make -j - name: Run CPP Test run: |