一、环境安装
1、安装环境 Ubuntu 22.04 - Jammy
2、安装第三方依赖
1)设置环境变量,配置程序编译依赖的头文件,库文件路径
vi .bashrc
export CPU_ARCH=`arch`
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
export THIRDPART_PATH=${DDK_PATH}/thirdpart #代码编译时链接samples所依赖的相关库文件
export LD_LIBRARY_PATH=/usr/lib:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #运行时链接库文件
export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest #CANN软件安装后的文件存储路径,根据安装目录自行修改
source .bashrc
2)创建THIRDPART_PATH路径
sudo mkdir -p ${THIRDPART_PATH}
3)下载samples源码仓
git clone https://gitee.com/ascend/samples.git
4)安装ffmpeg
sudo dpkg -i ffmpeg_4.4.2-1_arm64.deb
ffmpeg -hwaccels | grep ascend
ffmpeg -encoders | grep ascend
ffmpeg -decoders | grep ascend
5)安装acllite
先执行安装公共库,再执行编译具体示例
#安装公共基础库
cd /samples/cplusplus/common/acllite/
make clean && make
sudo -E make install #通过 sudo -E 保留环境变量
#特定模型推理示例
cd /home/HwHiAiUser/samples/inference/acllite/cplusplus/
make
sudo -E make install
6)设置Swap 内存
7)安装EdgeAndRobotics
git clone https://gitee.com/ascend/EdgeAndRobotics.git
cd EdgeAndRobotics/Samples/YOLOV5MultiInput
8)AI CPU 和control CPU 的设置
npu-smi info -t cpu-num-cfg -i 0 -c 0 #查看control CPU 和AI CPU 的分配数量
npu-smi info -t usages -i 0 -c 0 #查询AI CPU 占用率
sudo npu-smi set -t cpu-num-cfg -i 0 -c 0 -v 3:1:0 #将3 个CPU 设置为AI CPU
二、运行案例
# 目标检测(YoloV5s)
#### 样例介绍
使用多路离线视频流(*.mp4)作为应用程序的输入,基于YoloV5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。
样例代码逻辑如下所示:
#### 版本配套表
| 配套 | 版本 | 环境准备指导 |
| :------------------------------------------------------------: | :-------: | :------------------------------------------------------------: |
| 固件与驱动 | 23.0.0 | [固件驱动安装准备](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha003/softwareinst/instg/instg_0005.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit) |
| CANN | 7.0.0 |[CANN软件包安装准备](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha003/softwareinst/instg/instg_0011.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit)|
| Python | 3.9.2 |[Python安装准备](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha003/softwareinst/instg/instg_0064.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit#ZH-CN_TOPIC_0000002017916412?Mode=PmIns&OS=Ubuntu&Software=cannToolKit)|
| 硬件设备型号 | Orange Pi AIpro | - |
#### 准备环境
1. 以HwHiAiUser用户登录开发板。
2. 设置环境变量。
```
# 配置程序编译依赖的头文件与库文件路径
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
```
3. 安装ACLLite库。
参考[ACLLite仓](https://gitee.com/ascend/ACLLite)安装ACLLite库。
#### 样例下载
可以使用以下两种方式下载,请选择其中一种进行源码准备。
- 命令行方式下载(**下载时间较长,但步骤简单**)。
```
# 登录开发板,HwHiAiUser用户命令行中执行以下命令下载源码仓。
cd ${HOME}
git clone https://gitee.com/ascend/EdgeAndRobotics.git
# 切换到样例目录
cd EdgeAndRobotics/Samples/YOLOV5MultiInput
```
- 压缩包方式下载(**下载时间较短,但步骤稍微复杂**)。
```
# 1. 仓右上角选择 【克隆/下载】 下拉框并选择 【下载ZIP】。
# 2. 将ZIP包上传到开发板的普通用户家目录中,【例如:${HOME}/EdgeAndRobotics-master.zip】。
# 3. 开发环境中,执行以下命令,解压zip包。
cd ${HOME}
chmod +x EdgeAndRobotics-master.zip
unzip EdgeAndRobotics-master.zip
# 4. 切换到样例目录
cd EdgeAndRobotics/Samples/YOLOV5MultiInput
```
#### 运行样例
1. 以HwHiAiUser用户登录开发板,切换到当前样例目录。
2. 获取PyTorch框架的YoloV5s模型(\*.onnx),并转换为昇腾AI处理器能识别的模型(\*.om)。
- 当设备内存**小于8G**时,可设置如下两个环境变量减少atc模型转换过程中使用的进程数,减小内存占用。
```
export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1
```
- 为了方便下载,在这里直接给出原始模型下载及模型转换命令,可以直接拷贝执行。
```
cd model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s_nms.onnx --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp.cfg --no-check-certificate
atc --model=yolov5s_nms.onnx --framework=5 --output=yolov5s_nms --input_shape="images:1,3,640,640;img_info:1,4" --soc_version=Ascend310B1 --insert_op_conf=aipp.cfg
```
atc命令中各参数的解释如下,详细约束说明请参见[《ATC模型转换指南》](https://hiascend.com/document/redirect/CannCommunityAtc)。
- --model:YoloV5s网络的模型文件的路径。
- --framework:原始框架类型。5表示ONNX。
- --output:om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
- --input\_shape:模型输入数据的shape。
- --soc\_version:昇腾AI处理器的版本。
3. 准备测试视频。
请从以下链接获取该样例的测试视频,放在data目录下。
```
cd ../data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/test.mp4 --no-check-certificate
```
**注:**若需更换测试视频,则需自行准备测试视频,并将测试视频放到data目录下。
4. 编译样例源码。
执行以下命令编译样例源码。
```
cd ../scripts
bash sample_build.sh
```
```
cd scripts
bash sample_build.sh
```
5. 运行样例。
- 在HDMI连接屏幕场景,执行以下脚本运行样例。此时会以画面的形式呈现推理效果。
```
bash sample_run.sh imshow
```
- 在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果。
```
bash sample_run.sh stdout
三、报错
(base) HwHiAiUser@orangepiaipro-20t:~/EdgeAndRobotics/Samples/YOLOV5MultiInput$ cd scripts
(base) HwHiAiUser@orangepiaipro-20t:~/EdgeAndRobotics/Samples/YOLOV5MultiInput/scripts$ bash sample_build.sh
[INFO] Sample preparation
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- set INC_PATH: /usr/local/Ascend/ascend-toolkit/latest
-- set LIB_PATH: /usr/local/Ascend/ascend-toolkit/latest/runtime/lib64/stub
-- Found OpenCV: /usr (found version "4.5.4")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/build/intermediates/host
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp: In function ‘void* GetInput(void*)’:
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp:191:18: error: ‘GetRunMode’ was not declared in this scope; did you mean ‘aclrtRunMode’?
191 | int isHost = GetRunMode();
| ^~~~~~~~~~
| aclrtRunMode
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp:207:44: error: ‘CopyDataToHost’ was not declared in this scope
207 | void* hostDataBuffer = CopyDataToHost(frame.data.get(), frame.size);
| ^~~~~~~~~~~~~~
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp:209:21: error: ‘FreeHostMem’ was not declared in this scope
209 | FreeHostMem(hostDataBuffer);
| ^~~~~~~~~~~
make[2]: *** [CMakeFiles/main.dir/build.make:76: CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
[ERROR] build failed, Please check your environment!
一、环境安装
1、安装环境 Ubuntu 22.04 - Jammy
2、安装第三方依赖
1)设置环境变量,配置程序编译依赖的头文件,库文件路径
vi .bashrc
export CPU_ARCH=`arch`
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
export THIRDPART_PATH=${DDK_PATH}/thirdpart #代码编译时链接samples所依赖的相关库文件
export LD_LIBRARY_PATH=/usr/lib:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #运行时链接库文件
export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest #CANN软件安装后的文件存储路径,根据安装目录自行修改
source .bashrc
2)创建THIRDPART_PATH路径
sudo mkdir -p ${THIRDPART_PATH}
3)下载samples源码仓
git clone https://gitee.com/ascend/samples.git
4)安装ffmpeg
sudo dpkg -i ffmpeg_4.4.2-1_arm64.deb
ffmpeg -hwaccels | grep ascend
ffmpeg -encoders | grep ascend
ffmpeg -decoders | grep ascend
5)安装acllite
先执行安装公共库,再执行编译具体示例
#安装公共基础库
cd /samples/cplusplus/common/acllite/
make clean && make
sudo -E make install #通过 sudo -E 保留环境变量
#特定模型推理示例
cd /home/HwHiAiUser/samples/inference/acllite/cplusplus/
make
sudo -E make install
6)设置Swap 内存
7)安装EdgeAndRobotics
git clone https://gitee.com/ascend/EdgeAndRobotics.git
cd EdgeAndRobotics/Samples/YOLOV5MultiInput
8)AI CPU 和control CPU 的设置
npu-smi info -t cpu-num-cfg -i 0 -c 0 #查看control CPU 和AI CPU 的分配数量
npu-smi info -t usages -i 0 -c 0 #查询AI CPU 占用率
sudo npu-smi set -t cpu-num-cfg -i 0 -c 0 -v 3:1:0 #将3 个CPU 设置为AI CPU
二、运行案例
# 目标检测(YoloV5s)
#### 样例介绍使用多路离线视频流(*.mp4)作为应用程序的输入,基于YoloV5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。
样例代码逻辑如下所示:
#### 版本配套表| 配套 | 版本 | 环境准备指导 |
| :------------------------------------------------------------: | :-------: | :------------------------------------------------------------: |
| 固件与驱动 | 23.0.0 | [固件驱动安装准备](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha003/softwareinst/instg/instg_0005.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit) |
| CANN | 7.0.0 |[CANN软件包安装准备](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha003/softwareinst/instg/instg_0011.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit)|
| Python | 3.9.2 |[Python安装准备](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha003/softwareinst/instg/instg_0064.html?Mode=PmIns&OS=Ubuntu&Software=cannToolKit#ZH-CN_TOPIC_0000002017916412?Mode=PmIns&OS=Ubuntu&Software=cannToolKit)|
| 硬件设备型号 | Orange Pi AIpro | - |
#### 准备环境
1. 以HwHiAiUser用户登录开发板。
2. 设置环境变量。
```# 配置程序编译依赖的头文件与库文件路径
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
```
3. 安装ACLLite库。参考[ACLLite仓](https://gitee.com/ascend/ACLLite)安装ACLLite库。
#### 样例下载
可以使用以下两种方式下载,请选择其中一种进行源码准备。
- 命令行方式下载(**下载时间较长,但步骤简单**)。
```
# 登录开发板,HwHiAiUser用户命令行中执行以下命令下载源码仓。
cd ${HOME}
git clone https://gitee.com/ascend/EdgeAndRobotics.git
# 切换到样例目录
cd EdgeAndRobotics/Samples/YOLOV5MultiInput
```
- 压缩包方式下载(**下载时间较短,但步骤稍微复杂**)。```
# 1. 仓右上角选择 【克隆/下载】 下拉框并选择 【下载ZIP】。
# 2. 将ZIP包上传到开发板的普通用户家目录中,【例如:${HOME}/EdgeAndRobotics-master.zip】。
# 3. 开发环境中,执行以下命令,解压zip包。
cd ${HOME}
chmod +x EdgeAndRobotics-master.zip
unzip EdgeAndRobotics-master.zip
# 4. 切换到样例目录
cd EdgeAndRobotics/Samples/YOLOV5MultiInput
```
#### 运行样例
1. 以HwHiAiUser用户登录开发板,切换到当前样例目录。2. 获取PyTorch框架的YoloV5s模型(\*.onnx),并转换为昇腾AI处理器能识别的模型(\*.om)。
- 当设备内存**小于8G**时,可设置如下两个环境变量减少atc模型转换过程中使用的进程数,减小内存占用。
```
export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1
```
- 为了方便下载,在这里直接给出原始模型下载及模型转换命令,可以直接拷贝执行。
```
cd model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s_nms.onnx --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp.cfg --no-check-certificate
atc --model=yolov5s_nms.onnx --framework=5 --output=yolov5s_nms --input_shape="images:1,3,640,640;img_info:1,4" --soc_version=Ascend310B1 --insert_op_conf=aipp.cfg
```
atc命令中各参数的解释如下,详细约束说明请参见[《ATC模型转换指南》](https://hiascend.com/document/redirect/CannCommunityAtc)。- --model:YoloV5s网络的模型文件的路径。
- --framework:原始框架类型。5表示ONNX。
- --output:om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
- --input\_shape:模型输入数据的shape。
- --soc\_version:昇腾AI处理器的版本。
3. 准备测试视频。请从以下链接获取该样例的测试视频,放在data目录下。
```
cd ../data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/test.mp4 --no-check-certificate
```
**注:**若需更换测试视频,则需自行准备测试视频,并将测试视频放到data目录下。4. 编译样例源码。
执行以下命令编译样例源码。
```
cd ../scripts
bash sample_build.sh
```
```
cd scripts
bash sample_build.sh
```
5. 运行样例。
- 在HDMI连接屏幕场景,执行以下脚本运行样例。此时会以画面的形式呈现推理效果。```
bash sample_run.sh imshow
```
- 在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果。
```
bash sample_run.sh stdout
三、报错
(base) HwHiAiUser@orangepiaipro-20t:~/EdgeAndRobotics/Samples/YOLOV5MultiInput$ cd scripts
(base) HwHiAiUser@orangepiaipro-20t:~/EdgeAndRobotics/Samples/YOLOV5MultiInput/scripts$ bash sample_build.sh
[INFO] Sample preparation
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- set INC_PATH: /usr/local/Ascend/ascend-toolkit/latest
-- set LIB_PATH: /usr/local/Ascend/ascend-toolkit/latest/runtime/lib64/stub
-- Found OpenCV: /usr (found version "4.5.4")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/build/intermediates/host
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp: In function ‘void* GetInput(void*)’:
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp:191:18: error: ‘GetRunMode’ was not declared in this scope; did you mean ‘aclrtRunMode’?
191 | int isHost = GetRunMode();
| ^~~~~~~~~~
| aclrtRunMode
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp:207:44: error: ‘CopyDataToHost’ was not declared in this scope
207 | void* hostDataBuffer = CopyDataToHost(frame.data.get(), frame.size);
| ^~~~~~~~~~~~~~
/home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5MultiInput/src/main.cpp:209:21: error: ‘FreeHostMem’ was not declared in this scope
209 | FreeHostMem(hostDataBuffer);
| ^~~~~~~~~~~
make[2]: *** [CMakeFiles/main.dir/build.make:76: CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
[ERROR] build failed, Please check your environment!