编译及运行应用(昇腾910 AI处理器)
- 以运行用户登录开发环境,并切换到smallResolution_cropandpaste样例所在的目录。
- 编译代码。
- 设置环境变量,编译脚本src/CMakeLists.txt通过环境变量所设置的头文件、库文件的路径来编译代码。
如下为设置环境变量的示例,请将$HOME/Ascend/ascend-toolkit/latest替换为FwkACLlib安装包的实际安装路径。
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest export NPU_HOST_LIB=$HOME/Ascend/ascend-toolkit/latest/fwkacllib/lib64/stub
设置环境变量后,还需修改src/CMakeLists.txt文件中的如下配置段,将“acllib”修改为“fwkacllib”。
# Header path include_directories( ${INC_PATH}/acllib/include/ ../inc/ )
使用“$HOME/Ascend/ascend-toolkit/latest/fwkacllib/lib64/stub”目录下的*.so库,是为了编译基于AscendCL接口的代码逻辑时,不依赖其它组件(例如Driver)的任何*.so库。
编译通过后,在Host上运行应用时,通过配置环境变量,应用会链接到Host上“$HOME/Ascend/nnae/latest/fwkacllib/lib64”目录下的*.so库,运行时会自动链接到依赖其它组件的*.so库。
- 在样例目录下,创建目录用于存放编译文件,例如,本文中,创建的目录为“build/intermediates/host”。
mkdir -p build/intermediates/host
- 切换到“build/intermediates/host”目录,执行cmake生成编译文件。
“../../../src”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改。
基于运行环境的操作系统架构,配置的环境变量不同:
- 当开发环境与运行环境操作系统架构相同时,执行如下命令编译。
cd build/intermediates/host cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
- 当开发环境与运行环境操作系统架构不同时,执行如下命令交叉编译。例如,当开发环境为X86架构,运行环境为AArch64架构时,执行以下命令进行交叉编译。
cd build/intermediates/host cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
- 当开发环境与运行环境操作系统架构相同时,执行如下命令编译。
- 执行make命令,生成的可执行文件main在“样例目录/out”目录下。
make
- 设置环境变量,编译脚本src/CMakeLists.txt通过环境变量所设置的头文件、库文件的路径来编译代码。
- 准备输入图片。
请从以下链接获取该样例的输入图片,并以运行用户将获取的文件上传至开发环境的“smallResolution_cropandpaste样例目录/data”目录下。如果目录不存在,需自行创建。
https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dvpp_vpc_1920x1080_nv12.yuv
- 运行应用。
- 以运行用户将开发环境的smallResolution_cropandpaste样例目录及目录下的文件上传到运行环境(Host),例如“$HOME/acl_vpc_smallResolution_crop”。
- 以运行用户登录运行环境(Host)。
- 设置环境变量。如下为设置环境变量的示例,请根据实际安装情况替换路径。
export LD_LIBRARY_PATH=$HOME/Ascend/nnae/latest/fwkacllib/lib64
- 切换到可执行文件main所在的目录,例如“acl_vpc_smallResolution_crop/out”,给该目录下的main文件加执行权限。
chmod +x main
- 切换到可执行文件main所在的目录,例如“acl_vpc_smallResolution_crop/out”,如下示例命令可实现:2次调用VPC进行抠图、缩放,将输入图片中指定区域分辨率为6*6的子图抠出,并放大到分辨率为224*224的图片。
./main --inImgName dvpp_vpc_1920x1080_nv12.yuv --inFormat 1 --inWidth 1920 --inHeight 1080 --cLeftOffset 0 --cRightOffset 5 --cTopOffset 0 --cBottomOffset 5 --outImgName output_224_224.yuv --outFormat 1 --outWidth 224 --outHeight 224 --pLeftOffset 0 --pRightOffset 223 --pTopOffset 0 --pBottomOffset 223
参数说明如下,您可以根据实际需求修改:
- inImgName:输入图像文件的路径,包含文件名。
- inFormat:输入图片的格式,请参见功能及约束说明。
- inWidth:输入图片的宽。
- inHeight:输入图片的高。
- cLeftOffset:抠图左偏移,必须为偶数。
- cRightOffset:抠图右偏移,必须为奇数。
- cTopOffset:抠图上偏移,必须为偶数。
- cBottomOffset:抠图下偏移,必须为奇数。
- outImgName:输出图像文件的路径,包含文件名。
- outFormat:输出图片的格式,请参见功能及约束说明。
- outWidth:输出图片的宽。
- outHeight:输出图片的高。
- pLeftOffset:贴图左偏移,必须为偶数,需要16对齐。
- pRightOffset:贴图右偏移,必须为奇数。
- pTopOffset:贴图上偏移,必须为偶数。
- pBottomOffset:贴图下偏移,必须为奇数。
执行成功后,在屏幕上的关键提示信息示例如下。
[INFO] acl init success [INFO] set device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] call SplitProcessCropAndPaste [INFO] vpc crop and paste success [INFO] execute sample success [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device 0