ncnn Windows10 64bit编译配置
配置 编译 Windows10 64bit
2023-09-11 14:22:29 时间
前言
本篇博客记录在Windows10 64bit上配置Tencent ncnn的过程,这里使用的Visual Studio版本为2015,CMake-3.14。注意: 这里配置的并不可以在VS中跟踪到cpp文件,这样的需要通过工程添加源码配置,但是这样的安装方式并不是性能最优的
安装参考文档:Build for Windows x64 using Visual Studio Community 2017
step1: protobuf编译
Protobuf的下载路径是:protobuf。下载完成之后解压压缩包,之后打开VS2015 x64本机工具命令提示符
之后进入压缩目录,执行如下命令:
mkdir build-vs2015
cd build-vs2015
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
nmake
nmake install
出现这样便是安装成功:
step2:编译ncnn
解压下载下来的ncnn压缩包,进入ncnn目录创建build文件夹:
mkdir -p build-vs2015
cd build-vs2015
这里需要注意的是依赖库和主项目,要使用同样的build type(Debug/Release)。这里都通过cmake的-DCMAKE_BUILD_TYPE=Release指定,这里选用的type是Release
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=E:/VS_ncnn/protobuf/build_vs2015/install/include -DProtobuf_LIBRARIES=E:/VS_ncnn/protobuf/build_vs2015/install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=E:/VS_ncnn/protobuf/build_vs2015/install/bin/protoc.exe ..
nmake
nmake install
安装log:
step3:VS2015配置
首先,新建Win32应用台控制程序,之后开始配置过程,配置包含目录:
配置库目录:
配置Windows运行库目录:
配置附加依赖项:
编写示例代码:
#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <map>
#include <vector>
#include <algorithm>
#include <functional>
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <net.h>
static int detect_squeezenet(const cv::Mat& bgr, std::vector<float>& cls_scores)
{
ncnn::Net squeezenet;
squeezenet.load_param("E:/VS_ncnn/ncnn/examples/squeezenet_v1.1.param");
squeezenet.load_model("E:/VS_ncnn/ncnn/examples/squeezenet_v1.1.bin");
ncnn::Mat in = ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, 227, 227);
const float mean_vals[3] = { 104.f, 117.f, 123.f };
in.substract_mean_normalize(mean_vals, 0);
ncnn::Extractor ex = squeezenet.create_extractor();
ex.input("data", in);
ncnn::Mat out;
ex.extract("prob", out);
cls_scores.resize(out.w);
for (int j = 0; j<out.w; j++)
{
cls_scores[j] = out[j];
}
return 0;
}
static int print_topk(const std::vector<float>& cls_scores, int topk)
{
// partial sort topk with index
int size = cls_scores.size();
std::vector< std::pair<float, int> > vec;
vec.resize(size);
for (int i = 0; i<size; i++)
{
vec[i] = std::make_pair(cls_scores[i], i);
}
std::partial_sort(vec.begin(), vec.begin() + topk, vec.end(),
std::greater< std::pair<float, int> >());
// print topk and score
for (int i = 0; i<topk; i++)
{
float score = vec[i].first;
int index = vec[i].second;
fprintf(stderr, "%d = %f\n", index, score);
}
return 0;
}
int main()
{
std::string imagepath = "./test.jpg";
cv::Mat m = cv::imread(imagepath, CV_LOAD_IMAGE_COLOR);
if (m.empty())
{
std::cout << "cv::imread " << imagepath << " failed\n" << std::endl;
return -1;
}
std::vector<float> cls_scores;
detect_squeezenet(m, cls_scores);
print_topk(cls_scores, 3);
return 0;
}
从网上搜索一张喵咪的图片进行测试得到测试结果:
上面的分类在ImageNet中去查找对应的分类为:
类别序号 | 分类描述 |
---|---|
281 | ‘tabby, tabby cat’ |
282: | ‘tiger cat’ |
285: | ‘Egyptian cat’ |
遇到的问题:
- _CRT_SECURE_NO_WARNINGS,这类问题比较普遍自行解决就好了链接
参考
- Visual Studio上编译ncnn
对于需要源码调试的请将src中源码配置到工程目录再做适当修改,这里偷懒就不写具体操作了,本人配置之后运行结果与链接库文件的结果一致,具体可以留言或是邮件交流,可以参考下面文章进行配置: - 腾讯ncnn-20180129版本在windows+VS2013上调试运行
- 腾讯开源ncnn:示例程序运行
相关文章
- idea中编译spark程序的POM文件配置
- CentOS 6.4下Squid代理服务器的安装与配置(转)
- uni-app:配置底部tabbar的例子(hbuilderx 3.6.18)
- RHCSA之路----2、配置软件仓库
- Ubuntu18.04 初始化配置
- 【K3s】第10篇 详解k3s安装的选项(环境变量配置)
- spring boot配置tomcat部署
- Mac上使用Sublime Text 3配置java编译运行环境
- 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 )
- 【错误记录】Android Studio 编译报错 ( Error: Duplicate resources | 使用 sourceSets 配置多个 res 资源不能有重复名称的资源 )
- 【Android Gradle 插件】BuildType 编译类型配置 ⑧ ( versionNameSuffix 配置 | zipAlignEnabled 配置 | initWith 方法 )
- 【Android Gradle 插件】BuildType 编译类型配置 ④ ( minifyEnabled 配置 | multiDexEnabled | pseudoLocalesEnabled )
- 【Android Gradle 插件】BuildType 编译类型配置 ② ( consumerProguardFiles 配置 | debuggable 配置 | embedMicroApp配置 )
- 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#buildConfigField 方法 | 单独编译生成 BuildConfig 类的任务 )
- 【Groovy】Groovy 扩展方法 ( 实例扩展方法配置 | 扩展方法示例 | 编译实例扩展类 | 打包实例扩展类字节码到 jar 包中 | 测试使用 Thread 实例扩展方法 )
- C语言使用技巧(二十一):VS CODE在windows下配置CMAKE编译环境【实现C/C++可同时在一个文件夹下编译】
- Ubuntu下进行busybox配置编译时报错:Command ‘make‘ not found, but can be installed with:
- Windows + Ubuntu下JDK与adb/android环境变量配置完整教程
- 高比例风电电力系统储能运行及配置研究(python&Matlab实现)
- Win10系统下VisualStudio2019配置LasLib库
- Ubuntu下进行busybox配置编译时报错:Command ‘make‘ not found, but can be installed with:
- RustDesk自建中转服务器如何自己编译 RustDesk客户端,将企业固定IP/域名写进客户端,客户端安装无需配置直接使用(三)
- 华为路由器 基本ACL配置