我们在${BMNNSDK}/examples下为用户提供了C/C++/Python三种编程语言覆盖预处理推理接口用例。
示例目录命名规则:编程语言+解码模块+预处理模块+推理接口模块
本章主要用cpp_cv_bmcv_bmrt、cpp_ffmpeg_bmcv_bmrt用例来做以下两种模式下的编译运行演示。以下示例演示默认用户已经按照第三章内容进行了bmodel的转换。
本示例需要使用到的测试视频(下载后,请保存到${BMNNSDK}/res/video/ 目录):
4.7.1 PCIE模式用例演示
在x86 Linux开发主机上解压sdk开发包并运行docker开发环境,本示例都基于此docker环境,Docker环境的按照请参考 1.5.1环境配置
复制 # 在宿主机上解压缩SDK软件包
tar –zxf bmnnsdk2-bm1684_v<x.x.x>.tar.gz
cd bmnnsdk2-bm1684_v<x.x.x>/scripts
# 在宿主机上安装驱动
sudo ./install_driver_pcie.sh && cd ..
# 运行docker开发容器
./docker_run_bmnnsdk.sh
复制 # 在docker开发容器中
cd /workspace/scritps
# 安装软件包
./install_lib.sh nntc
# 设置环境变量
source envsetup_pcie.sh
# 安装SAIL包,测试py_ffmpeg_bmcv_sail时需要
cd /workspace/lib/sail/python3/pcie/py35 && pip3 install sophon-<x.x.x>-py3-none-any.whl
# 下载测试视频
mkdir /workspace/res/video
wget -O /workspace/res/video/test_car_person.mp4 https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsTrToIfjXO6dEufUX44h%2Fuploads%2Fg6WElN0jsdW7ZsK26daI%2Ftest_car_person.mp4?alt=media&token=2b38ff64-1d25-4432-a770-2318df120a2e
在x86 Linux开发主机上编译及运行实例代码
复制 cd /workspace/examples/SSD_object/cpp_ffmpeg_bmcv_bmrt/
make -f Makefile.pcie clean && make -f Makefile.pcie
# 编译后会在目录下生成
# USAGE:
# ./ssd300_ffmpeg_bmcv_bmrt.pcie <video url> <bmodel path> <frames> <dev id>
# 下载
# float32模型测试
./ssd300_ffmpeg_bmcv_bmrt.pcie /workspace/res/video/test_car_person.mp4 ../model/out/fp32_ssd300.bmodel 10 0
# int8模型测试
#./ssd300_ffmpeg_bmcv_bmrt.pcie /workspace/res/video/test_car_person.mp4 ../model/out/int8_ssd300.bmodel 10 0
程序运行过程中,可能会出现以下丢弃音频包或者视频帧数据包错误的字样,属正常现象:
复制 packet contain audio data ,drop this packet
** error!! decode_packet error
终端会打印模型检测结果:
复制 [0]frame 1 - need to draw 2 bbox
encoded image size is 36952
[0]frame 2 - need to draw 2 bbox
encoded image size is 35696
[0]frame 3 - need to draw 2 bbox
encoded image size is 36288
[0]frame 4 - need to draw 2 bbox
encoded image size is 36280
最后也会在results目录下生成检测结果图片,可查看结果图片验证模型检测结果。
pcie状态监控
复制 $ bm-smi #此命令用于检测pcie工作状态,tpu,mem使用率, 板卡温度等
4.7.2 SOC模式用例演示
在x86 Linux开发主机上解压sdk开发包并运行docker开发环境,本实例都基于此docker环境,Docker环境的按照请参考 1.5.1环境配置
复制 # 以下命令在宿主机上执行
# <xx.xx.xx>为SDK压缩包的版本号,需根据实际情况替换为相应的版本号
tar –zxf bmnnsdk2-bm1684_v<xx.xx.xx>.tar.gz
cd bmnnsdk2-bm1684_v<xx.xx.xx>
./docker_run_bmnnsdk.sh
复制 # 以下命令在容器内执行
# 安装软件包
cd /workspace/scripts
./install_lib.sh nntc
# 设置环境变量
source envsetup_cmodel.sh
在x86 Linux开发主机上生成 SSD_object/model/out/int8_ssd300.bmodel 后,执行下面的指令,编译实例代码:
复制 cd ../examples/SSD_object/cpp_cv_bmcv_bmrt/
make -f Makefile.arm clean && make -f Makefile.arm
make -f Makefile.arm install
在x86 Linux开发主机上将交叉编译生成的程序install目录拷贝到soc单板
复制 # 使用第三章转换的bmodel进行测试
# <SOC_BOARD_IP>应当替换为实际的SOC单板IP地址
# 以下命令在宿主机上执行,SOC设备默认用户名和密码均为linaro
scp -r /workspace/install linaro@<SOC_BOARD_IP>:/data/
在Soc单板上运行程序进行测试:
在x86 Linux开发主机上操作
复制 # 登录到Soc单板中
ssh linaro@SOC_BOARD_IP
在Soc单板终端中操作
复制 # 以下命令在SOC设备中执行
# 设置环境变量:参考1.5.3
cd /data/install
# 下载测试视频
mkdir res/video
wget -O res/video/test_car_person.mp4 https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsTrToIfjXO6dEufUX44h%2Fuploads%2Fg6WElN0jsdW7ZsK26daI%2Ftest_car_person.mp4?alt=media&token=2b38ff64-1d25-4432-a770-2318df120a2e
# float32模型测试
./bin/ssd300_cv_bmcv_bmrt.arm video res/video/test_car_person.mp4 model/ssd300/fp32_ssd300.bmodel 10 0
# int8模型测试
./bin/ssd300_cv_bmcv_bmrt.arm video res/video/test_car_person.mp4 model/ssd300/int8_ssd300.bmodel 10 0
和PCIE模式一样,程序运行后终端会打印模型检测结果,并在results目录下生成图片结果out_*.jpg的检测结果图片,可查看结果图片验证模型检测结果。