windows源码安装protobuf,opencv,ncnn

ops/2024/9/25 6:28:09/

安装笔记

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_34">安装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.ppmy.cn/ops/115661.html

相关文章

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall 数据集-目标检测系列-海洋鱼类检测数据集 fish 数据量:1W 数据项目地址: gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/…

ubuntu server设置wifi和静态IP

需求: 我想每次都用固定的IP地址通过ssh连接我的设备我的设备有wifi设备操作系统是ubuntu22.04 实现: 了解自己的ubuntu可以连接的网段 我看了一下我的路由器网关是:192.168.31.1查找自己路由器当前连接的设备,已经分配出去的I…

spring:spring 中的初始化操作

参考 https://www.jb51.net/program/322735nvy.htmhttps://blog.csdn.net/weixin_40511641/article/details/136843198

Java使用正则表达式提取商品规格信息

需求 从不方便透露的网站爬取了一批商品数据,需要从商品名中获取规格。规格可能以 “ml”、“g”、“pcs” 等单位表示,也可能带有乘积符号 “x”(如 “2x30ml”),或者是多个规格组合(如 “50ml 30ml”&a…

TCP协议基础

网络运输层之(1)TCP协议基础 Author: Once Day Date: 2024年9月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客…

Ubuntu中常用的操作指令

ubuntu中常通过在命令行中输入各种指令完成操作。 文件操作指令 ls:列出目录内容 ls cd:改变当前目录 # 进入指定目录 cd /path/to/directory # 返回上一级目录 cd .. # 返回用户主目录 cd ~ cp:复制文件或目录 # 复制文件 …

Unity 热更新(HybridCLR+Addressable)-设置打包路径和加载路径、打开Hosting服务、打包

四、设置打包和加载路径 五、打开Hosting服务 六、打包 打包完成后路径在Assets同级目录下的ServerData 但是目前没有资源文件对比 修改上面设置后再次打包 里面多了哈希和JSON文件,这俩个就是用于资源对比

JVM 性能调优与监控

Java 虚拟机(JVM)是运行 Java 应用程序的核心组件。随着应用程序的复杂度和规模不断增大,JVM 的性能调优和监控变得尤为重要。本文将详细介绍 JVM 性能调优的基本概念、常见性能问题、解决方案、监控工具以及最佳实践。 1. JVM 性能调优概述…