下载
中文
注册

样例介绍

获取样例

单击batchcrop获取样例

功能描述

该样例从一张YUV420SP NV12格式的输入图片中按指定区域分别抠出八张224*224子图(YUV420SP NV12)。

原理介绍

在该样例中,涉及的关键功能点,如下表所示。

初始化

  • 调用aclInit接口初始化AscendCL配置。
  • 调用aclFinalize接口实现AscendCL去初始化。

Device管理

  • 调用aclrtSetDevice接口指定用于运算的Device。
  • 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
  • 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。

Context管理

  • 调用aclrtCreateContext接口创建Context。
  • 调用aclrtDestroyContext接口销毁Context。

Stream管理

  • 调用aclrtCreateStream接口创建Stream。
  • 调用aclrtDestroyStream接口销毁Stream。
  • 调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成。

内存管理

  • 调用aclrtMallocHost接口申请Host上内存。
  • 调用aclrtFreeHost释放Host上的内存。
  • 调用aclrtMalloc接口申请Device上的内存。
  • 调用aclrtFree接口释放Device上的内存。

执行媒体数据处理时,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。

数据传输

如果在板端环境上运行应用,则无需进行数据传输。

媒体数据处理

  • 抠图

    调用acldvppVpcBatchCropResizeAsync接口按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。

目录结构

样例代码结构如下所示。

├── data
│   ├── dvpp_vpc_1920x1080_nv12.yuv            //测试数据,需要按指导获取测试图片,放到data目录下

├── inc
│   ├── dvpp_process.h               //声明媒体数据处理相关函数的头文件
│   ├── sample_process.h               //声明模型处理相关函数的头文件                  
│   ├── utils.h                       //声明公共函数(例如:文件读取函数)的头文件

├── src
│   ├── acl.json               //系统初始化的配置文件
│   ├── CMakeLists.txt         //编译脚本
│   ├── dvpp_process.cpp       //媒体数据处理相关函数的实现文件
│   ├── main.cpp               //主函数,一图多框抠图功能的实现文件
│   ├── sample_process.cpp     //资源初始化/销毁相关函数的实现文件                                       
│   ├── utils.cpp              //公共函数(例如:文件读取函数)的实现文件

├── CMakeLists.txt    //编译脚本,调用src目录下的CMakeLists文件