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"}]
}
相关文章:
windows源码安装protobuf,opencv,ncnn
安装笔记 cmake 在windows可以使用-G"MinGW Makefiles" 搭配make使用,install出来的lib文件时.a结尾的,适合linux下面使用。所以在windows上若无需求使用-G"NMake Makefiles" 搭配nmake。 但是windows上使用-G"NMake Makefil…...
MicroPython 怎么搭建工程代码
在MicroPython中搭建工程代码可以遵循以下步骤: 1. 准备工作 安装MicroPython固件:确保已经将MicroPython烧录到ESP32开发板中。准备开发环境: 可以使用文本编辑器(如VS Code、Thonny、uPyCraft等)来编写代码。 2.…...

Android studio安装问题及解决方案
Android studio安装问题及解决方案 gradle已经安装好了,但是每次就是找不到gradle的位置,每次要重新下载,很慢,每次都不成功 我尝试用安装android studio时自带的卸载程序,卸载android studio,然后重新下…...
前端面试题(二)
6. 深入 JavaScript this 关键字的指向是什么? this 的指向是在函数执行时决定的。默认情况下,非严格模式下 this 指向全局对象(浏览器中为 window),严格模式下 this 为 undefined。在对象方法中,this 通常…...

【C++】stack和queue的使用及模拟实现
stack就是栈的意思,这个结构遵循后进先出(LIFO)的原则,可以将栈想象为一个子弹夹,先进去的子弹后出来。 queue就是队列的意思,这个结构遵循先进先出(FIFO)的原则,可以将对列想象成我们排队买饭的场景,先排…...

MongoDB解说
MongoDB 是一个流行的开源 NoSQL 数据库,它使用了一种被称为文档存储的数据库模型。 与传统的关系型数据库管理系统(RDBMS)不同,MongoDB 不使用表格来存储数据,而是使用了一种更为灵活的格式——JSON 样式的文档。 这…...
问:JAVA中唤醒阻塞的线程有哪些?
在Java中,唤醒阻塞线程的方法有多种,以下是常见的线程唤醒方法。 唤醒方法 使用notify()和notifyAll()方法 synchronized (obj) {obj.notify(); // 唤醒单个等待线程// obj.notifyAll(); // 唤醒所有等待线程 }使用interrupt()方法 Thread thread n…...

Github Webhook触发Jenkins自动构建
1.功能说明 Github Webhook可以触发Jenkins自动构建,通过配置Github Webhook,每次代码变更之后(例如push操作),Webhook会自动通知Jenkins服务器,Jenkins会自动执行预定义的构建任务(如Jenkins …...

ESP32-WROOM-32 [创建AP站点-客户端-TCP透传]
简介 基于ESP32-WROOM-32 开篇(刚买), 本篇讲的是基于固件 ESP32-WROOM-32-AT-V3.4.0.0(内含用户指南, 有AT指令说明)的TCP透传设置与使用 设备连接 TTL转USB线, 接ESP32 板 的 GND,RX2, TX2 指令介绍 注意,下面指…...

新闻文本分类识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+TensorFlow+Django网页界面
一、介绍 文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集(“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”),然…...
Java使用Map数据结构配合函数式接口存储方法引用
Java使用Map数据结构配合函数式接口存储方法引用 背景 需求中存在这样一直情况 一个国家下面有很多的州 每个州对应的计算日期方法是不同的 这个时候 就面临 可能会有很多if else 为了后期维护尽量还是不想采用这个方式,那么就可以使用策略模式 但是 使用策略带来的…...
LeetCode:2207. 字符串中最多数目的子序列(Java)
目录 2207. 字符串中最多数目的子序列 题目描述: 实现代码与解析: 遍历: 原理思路: 2207. 字符串中最多数目的子序列 题目描述: 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 p…...

win10开机自启动方案总汇
win10开机自启动方案总汇 一、开始文件目录添加二、添加注册表启动程序三、服务启动3.1. 将程序注册为服务使用命令行创建服务设置服务启动类型启动服务 3.2. 使用 Windows 服务管理器配置服务3.3. 删除服务 四、定时任务或程序4.1 设置程序自启动(使用任务计划程序…...

【自动驾驶】基于车辆几何模型的横向控制算法 | Stanley 算法详解与编程实现
写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…...
微服务--初识MQ
在微服务架构中,MQ(Message Queue,消息队列)作为一种重要的通信机制,扮演着至关重要的角色。 MQ,即消息队列,是一种在不同服务或系统之间传递消息的中间件。它允许消息的发送者(生产…...

车辆识别数据集,图片数量20500,模型已训练200轮
车辆识别数据集(Vehicle Recognition Dataset, VDRD) 摘要 VDRD 是一个专为车辆识别设计的大规模数据集,它包含了20500张不同类型的汽车、货车、公交车以及其他类型车辆的图像。数据集提供了四种车辆类别:汽车、货车、其他车辆和…...

MES系统如何提升制造企业的运营效率和灵活性
参考拓展:苏州稳联-西门子MES系统-赋能智能制造的核心引擎 制造执行系统(MES)在提升制造企业运营效率和灵活性方面发挥着关键作用。 一、MES系统的基本概念和功能 MES系统是连接企业管理层与生产现场的重要桥梁。它主要负责生产调度、资源管理、质量控制等多个方…...

Nexpose 6.6.270 发布下载,新增功能概览
Nexpose 6.6.270 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Sep 18, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…...
【数据库】sqlite
文章目录 1. 基本概述2. 主要特点3. 应用场景4. 优缺点5. 基本使用示例6. 在编程语言中的使用连接到 SQLite 数据库(如果文件不存在会自动创建)创建表插入数据提交事务查询数据关闭连接 7. 总结 SQLite 是一个轻量级的关系型数据库管理系统(R…...
详解 C++中的模板
目录 前言 一、函数模板 1.定义 2.函数模板的实现 3.模板函数的实例化 4.模板参数的省略 1.函数模板的实参推导 2.类模板的实参推导 3.默认模板参数 4.特殊情况:无法推导的模板 5.推导失败的情况 二、类模板 1.概念和定义 2.类模板定义 3.类模板的使用 4.类模板…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...