4.7 实例演示
我们在${BMNNSDK}/examples下为用户提供了C/C++/Python三种编程语言覆盖预处理推理接口用例。
示例目录命名规则:编程语言+解码模块+预处理模块+推理接口模块
ssd300示例目录
软件流程
编程接口语言
运行环境
cpp_cv_cv_bmrt
opencv解码 (BGR输出)+ opencv预处理 + inference + 后处理
C / C++
soc/pcie
cpp_cv_bmcv_bmrt
opencv解码(yuv i420输出)+ bmcv预处理 + inference + 后处理
C / C++
soc
cpp_cv_cv+bmcv_bmrt
opencv解码(yuv i420输出)+ cv::bmcv预处理 + bmcv预处理 + inference + 后处理
C / C++
soc
cpp_ffmpeg_bmcv_bmrt
ffmpeg解码 (yuv压缩输出)+ bmcv预处理 + inference + 后处理
C / C++
soc/pcie
cpp_multi_bmcv_bmrt
多线程性能测试用例 ffmpeg/opencv解码+cv+bmcv+inference+后处理+jpg编码
C / C++
soc
cpp_cv_cv+bmcv_sail
opencv解码(yuv i420输出)+ cv::bmcv预处理 + bmcv预处理 + inference + 后处理
C++
soc
cpp_cv_bmcv_sail
opencv解码(yuv i420输出)+ bmcv预处理 + inference + 后处理
C++
soc
cpp_ffmpeg_bmcv_sail
ffmpeg解码 (yuv压缩输出)+ bmcv预处理 + inference + 后处理
C++
soc/pcie
py_ffmpeg_bmcv_sail
ffmpeg解码 (yuv压缩输出)+ bmcv预处理 + inference + 后处理
python
soc/pcie
本章主要用cpp_cv_bmcv_bmrt、cpp_ffmpeg_bmcv_bmrt用例来做以下两种模式下的编译运行演示。以下示例演示默认用户已经按照第三章内容进行了bmodel的转换。
PCIE模式用例演示
SoC模式用例演示
本示例需要使用到的测试视频(下载后,请保存到${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的检测结果图片,可查看结果图片验证模型检测结果。
最后更新于