当前位置: 首页 > news >正文

windows源码安装protobuf,opencv,ncnn

安装笔记

cmake 在windows可以使用-G"MinGW Makefiles" 搭配make使用,install出来的lib文件时.a结尾的,适合linux下面使用。所以在windows上若无需求使用-G"NMake Makefiles" 搭配nmake。

但是windows上使用-G"NMake Makefiles"编译最后生成的执行文件无法使用gdb进行调试,gdb只能对调试信息包含在exe中的执行文件进行调试。所以需要修改vscode中的launch文件,如下文所示。

要想编译成功ncnn,下载好cmake、mingw64、opencv、protobuf、ncnn、依次编译就可以。当然,有的有现成的不需要编译,看自己。在ncnn编译的时候给cmake中设置好所需要的库路径,仿照下文修改成你的。

目前仍然无法在ncnn中使用simpleocv。报错找不到cv等命名空间,原因未知。

命令行工具

x64 Native Tools Command Prompt for VS 2022

安装protobuf

git clone  httpd://github.com/protocolbuffers/protobuf/
cd ./protobuf
git clone https://github.com/abseil/abseil-cpp.git ./protobuf/third_party/abseil-cpp
cd ./protobuf/cmake
mkdir build & cd build
cmake -G "NMake Makefiles" ^-DCMAKE_BUILD_TYPE=Release ^-DCMAKE_INSTALL_PREFIX=../../../install/release ^-Dprotobuf_BUILD_SHARED_LIBS=ON ^-Dprotobuf_WITH_ZLIB=OFF ^-Dprotobuf_BUILD_TESTS=OFF ^../..
nmake & nmake install

安装opencv

下载源码
git clone https://github.com/opencv/opencv.git
cd opencv & mkdir build & cd build
cmake -G “NMake Makefiles” -DCMAKE_BUILD_TYPE=Release …
nmake & nmake install

安装ncnn

cd ./ncnn & mkdir build & cd buildcmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=D:/ProgramData/protobuf/cmake/build/install/release/include -DProtobuf_LIBRARIES=D:/ProgramData/protobuf/cmake/build/install/release/lib/libprotobuf.lib  -DProtobuf_PROTOC_EXECUTABLE=D:/ProgramData/protobuf/cmake/build/install/release/bin/protoc.exe  -DNCNN_VULKAN=OFF .. -DOpenCV_DIR=D:/ProgramData/opencv/build/install/x64/mingw/libnmake & nmake install

C++推理Demo

复制一份yolov8与samples下的CMakeLists.txt组成新的项目;

#CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(App)
# # 设置编译器windows中设置这个会导致编译失败
#set(CMAKE_C_COMPILER "D:/ProgramData/mingw64/bin/gcc.exe")
#set(CMAKE_CXX_COMPILER "D:/ProgramData/mingw64/bin/g++.exe")set(NCNN_ROOT "D:/github/ncnn/build_debug/install")
include_directories(${NCNN_ROOT}/include/ncnn)
link_directories(${NCNN_ROOT}/lib)
# 导入静态库
add_library(ncnn STATIC IMPORTED)
set_target_properties(ncnn PROPERTIESIMPORTED_LOCATION "${NCNN_ROOT}/lib/ncnnd.lib" # 根据实际情况调整路径和库名称
)
#下方与原来的一样
macro(ncnn_add_example name)add_executable(${name} ${name}.cpp)if(OpenCV_FOUND)target_include_directories(${name} PRIVATE ${OpenCV_INCLUDE_DIRS})target_link_libraries(${name} PRIVATE ncnn ${OpenCV_LIBS})elseif(NCNN_SIMPLEOCV)target_compile_definitions(${name} PUBLIC USE_NCNN_SIMPLEOCV)target_link_libraries(${name} PRIVATE ncnn)endif()# add test to a virtual project groupset_property(TARGET ${name} PROPERTY FOLDER "examples")
endmacro()if(NCNN_PIXEL)if(NOT NCNN_SIMPLEOCV)find_package(OpenCV QUIET COMPONENTS opencv_world)# for opencv 2.4 on ubuntu 16.04, there is no opencv_world but OpenCV_FOUND will be TRUEif("${OpenCV_LIBS}" STREQUAL "")set(OpenCV_FOUND FALSE)endif()if(NOT OpenCV_FOUND)find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs videoio)endif()if(NOT OpenCV_FOUND)find_package(OpenCV QUIET COMPONENTS core highgui imgproc)endif()endif()if(OpenCV_FOUND OR NCNN_SIMPLEOCV)if(OpenCV_FOUND)message(STATUS "OpenCV library: ${OpenCV_INSTALL_PATH}")message(STATUS "    version: ${OpenCV_VERSION}")message(STATUS "    libraries: ${OpenCV_LIBS}")message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")if(${OpenCV_VERSION_MAJOR} GREATER 3)set(CMAKE_CXX_STANDARD 11)endif()endif()include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src)include_directories(${CMAKE_CURRENT_BINARY_DIR}/../src)if(OpenCV_FOUND)ncnn_add_example(test) //名字改成你的main函数所在文件的名字endif()else()message(WARNING "OpenCV not found and NCNN_SIMPLEOCV disabled, examples won't be built")endif()
else()message(WARNING "NCNN_PIXEL not enabled, examples won't be built")
endif()
//launch.json"version": "0.2.0","configurations": [{"name": "(Windows) 启动","type": "cppvsdbg","request": "launch","program": "${workspaceFolder}/build/test.exe","args": ["D:/data/test5.jpeg"],"stopAtEntry": true,"cwd": "${workspaceFolder}","environment": [{"name": "PATH","value": "D:/ProgramData/opencv1/build/x64/vc16/bin;${env:PATH}"}], // 环境变量"console": "externalTerminal"}]
}
http://www.lryc.cn/news/445652.html

相关文章:

  • MicroPython 怎么搭建工程代码
  • Android studio安装问题及解决方案
  • 前端面试题(二)
  • 【C++】stack和queue的使用及模拟实现
  • MongoDB解说
  • 问:JAVA中唤醒阻塞的线程有哪些?
  • Github Webhook触发Jenkins自动构建
  • ESP32-WROOM-32 [创建AP站点-客户端-TCP透传]
  • 新闻文本分类识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+TensorFlow+Django网页界面
  • Java使用Map数据结构配合函数式接口存储方法引用
  • LeetCode:2207. 字符串中最多数目的子序列(Java)
  • win10开机自启动方案总汇
  • 【自动驾驶】基于车辆几何模型的横向控制算法 | Stanley 算法详解与编程实现
  • 微服务--初识MQ
  • 车辆识别数据集,图片数量20500,模型已训练200轮
  • MES系统如何提升制造企业的运营效率和灵活性
  • Nexpose 6.6.270 发布下载,新增功能概览
  • 【数据库】sqlite
  • 详解 C++中的模板
  • 基于DAMODEL——Faster-RCNN 训练与测试指南
  • 考研数据结构——C语言实现冒泡排序
  • labview更换操作系统后打开原VI闪退
  • 什么是CAPTCHA?有什么用途?
  • 在虚幻引擎中创建毛发/头发
  • PHP API 框架:构建高效API的利器【电商API接口】
  • transformer模型写诗词
  • [大语言模型-工程实践] 手把手教你-基于Ollama搭建本地个人智能AI助理
  • 开放原子开源基金会OPENATOM
  • Docker的监控:docker stats与docker events
  • jvm专题 之 内存模型