• 欢迎访问佰阅部落
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何在Windows子系统WSL2中安装并使用NCNN

开发工具 佰阅 12个月前 (06-22) 1859次浏览

WSL2和Windows沙盒是目前Windows平台最常用的测试环境,Windows沙盒可以用来校正全新环境下自己开发的软件是否正常运行,而WSL2可以校准Linux环境下的应用是否正常运行。

0. 效果截图

1. 为啥要用WSL2?

测试一些不容易跨端的编程语言,比如C++。最近我开发了多个人工智能APP,其核心依赖C++,使用cmake构建的c++程序只能本地编译。

2. WSL2环境安装

在微软应用商店搜索Linux,就可以找到比较熟悉的UbantuDebian等等,随便安装一个即可。

3. Opencv安装

c++的通用安装步骤,clone代码,cmke创建build工程,然后make完成打包和安装。

# 基础工具
apt install build-essential cmake git pkg-config

# opencv clone
mkdir ~/opencv_build && cd ~/opencv_build
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

# 创建build工程
cd ~/opencv_build/opencv
mkdir -p build && cd build

# cmke
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..
# 等待一分钟完成输出

# 开始构建,数字20可以改成你的CPU实际线程数,越多构建速度越快
make -j20
# 等待2分钟即可完成所有构建过程

# 最后一步,完成install,这样就可以通过findpackage找到
sudo make install

检查是否正确安装:

pkg-config --modversion opencv4


成功后会输出如上结果。

4. NCNN安装

基本符合C++的通用安装步骤

# 安装基础依赖
apt install libprotobuf-dev protobuf-compiler libvulkan-dev vulkan-utils

# clone代码
git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init

# 创建build工程
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=ON ..
# 等待1分钟完成cmake过程

# 开始构建,数字20可以改成你的CPU实际线程数,越多构建速度越快
make -j20
# 等待3秒钟即可完成所有构建过程

# 最后一步,完成install,这样就可以通过findpackage找到
sudo make install

验证安装

cd ../examples
../build/examples/squeezenet ../images/256-ncnn.png
[0 AMD RADV FIJI (LLVM 10.0.1)]  queueC=1[4]  queueG=0[1]  queueT=0[1]
[0 AMD RADV FIJI (LLVM 10.0.1)]  bugsbn1=0  buglbia=0  bugcopc=0  bugihfa=0
[0 AMD RADV FIJI (LLVM 10.0.1)]  fp16p=1  fp16s=1  fp16a=0  int8s=1  int8a=1
532 = 0.163452
920 = 0.093140
716 = 0.061584

5. Cocoyaxi安装

这是一个类Go语言的协程库,go和chanel都有,可以按照go语言的思维快速开发高并发程序

# clone代码
git https://github.com/idealvin/cocoyaxi.git
cd cocoyaxi

# 创建build工程
mkdir -p build && cd build
cmake ..
# 等待1分钟完成cmake过程

# 开始构建,数字20可以改成你的CPU实际线程数,越多构建速度越快
make -j20
# 等待1秒钟即可完成所有构建过程

# 最后一步,完成install,这样就可以通过findpackage找到
sudo make install

6. 整合所有这些环境

在Windows中打开终端工具,输入wsl或手动进入WSL2子系统,然后输入code .即可打开vscode工具,创建一个CMakeLists.txt文件,内容如下:

cmake_policy(SET CMP0091 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0091 NEW) # 确实解决内部cmake中文乱码的问题
cmake_minimum_required(VERSION 3.9) # 定义cmake最小版本号

set(CMAKE_BUILD_TYPE Release)

# Create project
set(ProjectName "cpp") # 定义变量
project(${ProjectName}) # 定义项目名称
message("ProjectName: ${ProjectName}") # 打印项目名称
add_executable(${ProjectName} main.cpp) # 定义编译的程序名称和程序文件
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}) # 输出成功,但是Release\yolov5.exe


# 设置  opencv
find_package(OpenCV REQUIRED)
target_link_libraries(${ProjectName} ${OpenCV_LIBS})

set(ncnn_DIR "/root/ncnn_build/ncnn/build/install/lib/cmake/ncnn")   # ncnn编译后,lib文件里包含ncnnconfig.camke的目录
find_package(ncnn REQUIRED)
target_link_libraries(${ProjectName} ncnn) # 在项目中使用,缺少会报错

# # 并发库
find_package(cocoyaxi REQUIRED)
target_link_libraries(${ProjectName} cocoyaxi::co)

这样就算完整了,然后为了方便可以使用pyton来自动化这个过程,如果需要实时动态编译,可以调用go语言的gowatch工具对该项目进行实时编译,实现修改后所见即所得的效果。
此处列举python自动化脚本

import os

os.system("cmake -B.build .")  # 代表编译缓存
os.system("cmake --build .build --config Release --target cpp -- -j20")  # 执行前其实还有缓存这一步
os.system('./cpp')

众所周知,不论前端还是后端,临时文件都用.XXX文件,方便识别核心代码与自生成冗余文件。

7. 小结

最近学习C++并完成了多个AI应用的开发,整体而言C++现代编程虽然比较容易,但是面对较复杂的应用时,尤其是对比Go语言几乎没有优势。想要开发复杂多变的现实应用,Go语言仍然比C++更合适,也许未来某一天我会实现Go语言直接调用C++,让愚蠢的AI迈向魔法系,让AI不再那么生硬。


佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何在Windows子系统WSL2中安装并使用NCNN
喜欢 (0)