从零开始编译OpenCV NPU教程

从零开始编译OpenCV NPU教程

本文介绍如何从零开始,成功编译OpenCV NPU项目。

本示例使用的机器为华为云昇腾310虚拟机。

1
2
3
实例类型:AI加速型Ai1s
操作系统:Ubuntu 18.04
IDE:VSCode

1. 环境准备

1.1 安装驱动及依赖

按照昇腾虚拟机固件与驱动安装指引__卸载旧版驱动__和__安装Ascend 310驱动__(此处仅摘抄了需要执行的命令),此时先不要安装CANN,待准备好依赖的python环境后再安装。

1
2
3
4
5
6
7
8
9
10
11
12
cd /usr/local/Ascend
# 按照opp、ascend-tookit、driver的顺序,依次进入相关目录的script目录中,执行uninstall.sh文件
# 卸载完成后,重启VM
# 安装driver
./A300-3010-npu-driver_21.0.4_linux-x86_64.run --full
# 检查安装结果,显示两块OK的ascend 310卡
npu-smi info
# 如果是非root用户,需要添加用户组
# gid: 组id; HwHiAiUser: 组名; uid: 用户id(可通过 id usrName查询); usrName:用户名
usermod -a -G HwHiAiUser/gid usrName/uid
# 安装依赖
apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils ne

1.2 Anaconda安装及配置

Anaconda官网下载x86_64对应的Anaconda,使用bash命令安装:

1
2
3
bash Anaconda3-2023.07-2-Linux-x86_64.sh
# 输入一次安装目录 /home/用户目录/anaconda3后,一直enter+yes
# conda安装完毕后,重启终端,conda命令生效

由于国内下载conda资源过慢,建议配置清华源anaconda镜像提高下载速度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 修改用户目录下的.condarc文件
vim ~/.condarc
# 修改.condarc内容为如下:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
# 至此完成清华源anaconda镜像配置。

1.3 python虚拟环境安装

新建python版本为3.X的conda虚拟环境___【CANN目前只支持python3.7/3.8/3.9版本】___

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建虚拟环境
conda create -n YOUR_ENV_NAME python=3.9
# 激活环境,在新环境中安装其他依赖
conda activate YOUR_ENV_NAME
# 升级pip
pip3 install --upgrade pip
# 安装pip依赖
pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests
# 修改用户目录的.bashrc文件,使得虚拟环境自动激活
vim ~/.bashrc
# 将“ conda activate YOUR_ENV_NAME ”添加至.bashrc文件末尾
# 退出vim并激活.bashrc使其生效
source ~/.bashrc

1.4 CANN安装

注意 开发套件安装,从 CANN 社区版下载-昇腾社区下载__6.3.RC2.alpha003__对应的CANN。

1
2
3
4
5
6
7
8
9
# 安装cann toolkit
./Ascend-cann-toolkit_6.3.RC2.alpha003_linux-x86_64.run --install
# 添加环境变量
# 编辑用户目录下的.bashrc文件
vim ~/.bashrc
# 将以下内容添加至.bashrc文件末尾
source ~/Ascend/ascend-toolkit/set_env.sh
# 退出vim并激活.bashrc使其生效
source ~/.bashrc

安装好驱动之后,将系统用户添加到组里,保证在usrName用户下可以正常使用驱动。

1
usermod -a -G HwHiAiUser/gid usrName/uid

2. OpenCV下载及编译

2.1 OpenCV项目下载

OpenCV为保证官方发行版的稳定性,使用另外的仓opencv_contrib接收贡献的功能,因此opencv和opencv_contrib均需下载。

1
2
3
4
5
6
# 克隆opencv项目到本地
git clone https://github.com/opencv/opencv.git
# 进入opencv路径
cd opencv
# 克隆opencv_contrib项目到opencv路径下
git clone https://github.com/opencv/opencv_contrib.git

2.2 项目配置

在opencv项目路径下新建.vscode文件夹,新建调试配置文件launch.json,写入以下内容(注释为解析,不需要写入):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"version": "0.2.0",
"configurations": [
{

"name": "ascend",
"type": "cppdbg",
"request": "launch", // 启动程序or连接到已在运行的实例。launch:启动;attach:附加
"cwd": "${workspaceFolder}", // 调试器启动的应用程序的工作目录
"program": "~/anaconda3/envs/py39/bin/python", // 需要调试的程序,此处为conda虚拟环境的python
"args": [
"~/workspace/opencv/test.py", // 调试时传递给程序的参数
],
"MIMode": "gdb", // 调试器类型 gdb/lldb;此处为gdb
"targetArchitecture": "x86_64",
"stopAtEntry": false, // 调试时是否停在程序入口
"externalConsole": false, // true:输出到外部终端;false:只输出到软件终端
"setupCommands": [ // 设置GDB或LLDB所需执行的命令
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

同样地,.vscode文件夹下新建配置文件setting.json,写入cmake配置项和文件关联配置项如下(注释为解析,不需要写入):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"cmake.configureArgs": [
"-DCMAKE_INSTALL_PREFIX=~/workspace/opencv/build/install", // 配置安装目录
"-DWITH_DEBUG=0", // 是否以debug方式编译项目
"-DBUILD_WITH_DEBUG_INFO=0", // 编译是否输出debug info
"-DOPENCV_EXTRA_MODULES_PATH=~/workspace/opencv/opencv_contrib/modules", // OpenCV其他模块的路径,将opencv_contrib modules的路径配置进来
"-DWITH_CUDA=0", // 是否有CUDA
"-DWITH_CANN=1", // 是否有CANN
"-DPYTHON3_EXECUTABLE=~/anaconda3/envs/$YOUR_ENV_NAME$/bin/python", // python可执行文件的路径
"-DPYTHON_LIBRARY=~/anaconda3/envs/$YOUR_ENV_NAME$", // python库路径
"-DPYTHON_INCLUDE_DIR=~/anaconda3/envs/$YOUR_ENV_NAME$/include/python3.9", // python包含路径
/* 此部分为与opencv npu开发无关的库,关闭其编译以加快编译速度 */
"-DBUILD_opencv_wechat_qrcode=OFF",
"-DBUILD_opencv_xfeatures2d=OFF",
"-DBUILD_opencv_face=OFF",
"-DBUILD_opencv_dnn=OFF",
"-DBUILD_opencv_features2d=OFF",
"-DBUILD_opencv_bioinspired=OFF",
"-DBUILD_opencv_flann=OFF",
"-DBUILD_opencv_hdf=OFF",
"-DBUILD_opencv_hfs=OFF",
"-DBUILD_opencv_fuzzy=OFF",
"-DBUILD_opencv_intensity_transform=OFF",
"-DBUILD_opencv_line_descriptor=OFF",
"-DBUILD_opencv_ml=OFF",
"-DBUILD_opencv_phase_unwrapping=OFF",
"-DBUILD_opencv_photo=OFF",
"-DBUILD_opencv_quality=OFF",
"-DBUILD_opencv_tracking=OFF",
"-DWITH_CAROTENE=OFF",
"-DWITH_IPP=OFF",
/* ************************************************* */
"-DBUILD_DOCS=ON", // 是否构建文档
],
}

2.3 项目编译

通过vscode安装C/C++、CMake、CMake Tools、Python拓展,由于项目配置项较多,通过2.2 项目配置+CMake Tools对项目进行编译。

利用CMake Tool进行编译示例界面。configure根据2.2 项目配置中指定的编译选项进行配置。build则实现项目编译。

cmake-configure

完成cmake configure之后,请检查是否包含CANN(下图黄色高亮),python是否指向YOUR_ENV_NAME虚拟环境(下图绿色高亮),如果这些答案均为“是”,则关键配置正确。

makedone

build成功的标志则为[build] Build finished with exit code 0

项目编译完成后,在build目录下会出现python_loader文件夹,在终端中执行python_loader路径下的setup.py,即可将opencv安装到python虚拟环境中,从而实现python调用opencv。

1
2
3
4
5
6
7
8
9
10
# 进入python_loader目录(当前目录为opencv)
cd ./build/python_loader
# 安装opencv到python(注意当前python环境应为YOUR_ENV_NAME虚拟环境)
python setup.py develop
# 验证python中opencv是否安装好
python
>>>import cv2
>>>
# 如上即为安装成功,可以愉快的开启开发了
# 如果提示找不到cv2则安装失败:( 检查一下编译是否有问题吧

Comments