diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 31adbd5..6085f47 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,6 +16,9 @@ jobs: - name: Install dependencies run: | sudo apt-get install -y cmake ninja-build ccache scons + sudo apt-get install python3-dev libprotobuf-dev protobuf-compiler + python -m pip install --upgrade pip + python -m pip install -r requirements.txt - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: @@ -38,6 +41,9 @@ jobs: - name: Install dependencies run: | sudo apt-get install -y cmake ninja-build ccache scons + sudo apt-get install python3-dev libprotobuf-dev protobuf-compiler + python -m pip install --upgrade pip + python -m pip install -r requirements.txt - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: @@ -82,6 +88,9 @@ jobs: - name: Install dependencies run: | sudo apt-get install -y cmake ninja-build ccache gcovr lcov scons + sudo apt-get install python3-dev libprotobuf-dev protobuf-compiler + python -m pip install --upgrade pip + python -m pip install -r requirements.txt - uses: actions/checkout@v4 with: submodules: true diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index a5c4dce..beb5da1 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(example) +add_subdirectory(frontend) \ No newline at end of file diff --git a/app/frontend/CMakeLists.txt b/app/frontend/CMakeLists.txt new file mode 100644 index 0000000..297081a --- /dev/null +++ b/app/frontend/CMakeLists.txt @@ -0,0 +1,51 @@ +cmake_minimum_required(VERSION 3.10) +project(ModelParser) + +find_package(Protobuf REQUIRED) +set(ONNX_GENERATED_DIR "${CMAKE_SOURCE_DIR}/app/frontend/build/generated") + + +set(SETUP_SCRIPT "${CMAKE_SOURCE_DIR}/app/frontend/GetModel.sh") + +set(GENERATED_FILES +"${ONNX_GENERATED_DIR}/onnx.pb.cc" +"${ONNX_GENERATED_DIR}/onnx.pb.h" +"${ONNX_GENERATED_DIR}/yolo11x.onnx" +) + + +add_custom_command( + OUTPUT ${GENERATED_FILES} + COMMAND ${CMAKE_COMMAND} -E make_directory "${ONNX_GENERATED_DIR}" + COMMAND ${CMAKE_COMMAND} -E chdir ${ONNX_GENERATED_DIR} bash ${SETUP_SCRIPT} "${ONNX_GENERATED_DIR}" + WORKING_DIRECTORY "${ONNX_GENERATED_DIR}" + DEPENDS ${SETUP_SCRIPT} + COMMENT "Create directory, generate ONNX-files and get YOLO model" + ) + +add_custom_target(generate_output ALL +DEPENDS ${GENERATED_FILES} +) + +set(ONNX_GENERATED_DIR "${CMAKE_SOURCE_DIR}/app/frontend/build/generated") + +set_source_files_properties( + "${ONNX_GENERATED_DIR}/onnx.pb.cc" + "${ONNX_GENERATED_DIR}/onnx.pb.h" + "${ONNX_GENERATED_DIR}/yolo11x.onnx" + PROPERTIES GENERATED TRUE +) + +add_executable(ModelParser + main.cpp + "${ONNX_GENERATED_DIR}/onnx.pb.cc" +) +add_dependencies(ModelParser generate_output) +target_include_directories(ModelParser PRIVATE + "${ONNX_GENERATED_DIR}" + ${Protobuf_INCLUDE_DIRS} +) + +target_link_libraries(ModelParser + ${Protobuf_LIBRARIES} +) diff --git a/app/frontend/GetModel.sh b/app/frontend/GetModel.sh new file mode 100644 index 0000000..10d1b1a --- /dev/null +++ b/app/frontend/GetModel.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +protoc --proto_path=3rdparty/onnx/onnx --cpp_out=$1 onnx.proto +yolo export model=$1/yolo11x.pt format=onnx diff --git a/app/frontend/main.cpp b/app/frontend/main.cpp new file mode 100644 index 0000000..bc321eb --- /dev/null +++ b/app/frontend/main.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include + +#include "./generated/onnx.pb.h" + +int main() { + std::ifstream model_file("generated/yolo11x.onnx", std::ios::binary); + + if (!model_file.is_open()) { + std::cerr << "Failed to open model" << std::endl; + return 1; + } + + onnx::ModelProto model; + if (!model.ParseFromIstream(&model_file)) { + std::cerr << "Model parsing error" << std::endl; + return 1; + } + model_file.close(); + + std::vector layer; + + for (int i = 0; i < model.graph().node_size(); ++i) { + const onnx::NodeProto& node = model.graph().node(i); + layer.emplace_back(node.op_type()); + } + + for (auto it : layer) { + std::cout << it << std::endl; + } + + return 0; +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b57dd3e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +ultralytics >= 8.3.107 \ No newline at end of file