【2024·CANN训练营第一季】基于AscendCL高阶封装库开发推理应用

举报
ASPARTAME 发表于 2024/04/21 13:58:57 2024/04/21
【摘要】 acllite库ACLLite库是对CANN提供的ACL接口进行的高阶封装,简化用户调用流程,为用户提供一组简易的公共接口。当前主要针对边缘场景设计。 common 资源管理AclLiteResource类:命名空间为aclliteAclLiteResource(int32_t devId = 0)构造函数,创建一个AclLiteResource对象~AclLiteResource()析构...

acllite库

ACLLite库是对CANN提供的ACL接口进行的高阶封装,简化用户调用流程,为用户提供一组简易的公共接口。当前主要针对边缘场景设计。

common

资源管理

  • AclLiteResource类:命名空间为acllite

    • AclLiteResource(int32_t devId = 0)

      • 构造函数,创建一个AclLiteResource对象
    • ~AclLiteResource()

      • 析构函数,销毁AclLiteResource对象
    • bool Init()

      • 初始化函数,初始化Acl相关资源device、context
    • aclrtContext GetContext()

      • 获取程序运行的context
    • void Release()

      • 资源释放函数,释放Acl相关资源device、context

公共函数

  • 未封装为类:命名空间为acllite

    • void SaveBinFile(const std::string& filename, const void* data, uint32_t size)

      • 将数据存为二进制文件
    • bool ReadBinFile(const std::string& fileName, void*& data, uint32_t& size)

      • 读取二进制文件
    • void* CopyDataToDevice(void* data, uint32_t size)

      • 将数据拷贝到Device侧
    • aclrtContext GetContextByDevice(int32_t devId)

      • 获取对应device上的context
    • bool SetCurContext(aclrtContext context)

      • 设置当前线程的context

工具宏

  • 宏封装函数:无命名空间

    • ALIGN_UP(num, align)

      • 计算对齐后的数值
    • ALIGN_UP2(num, align)

      • 将数据按2对齐
    • ALIGN_UP16(num, align)

      • 将数据按16对齐
    • ALIGN_UP64(num, align)

      • 将数据按64对齐
    • ALIGN_UP128(num, align)

      • 将数据按128对齐
    • YUV420SP_SIZE(width, height)

      • 计算YUV420SP图片数据大小
    • YUV422P_SIZE(width, height)

      • 计算YUV422P图片数据大小
    • SHARED_PTR_U8_BUF(buf)

      • 新建指向一般内存的智能指针
    • SHARED_PTR_HOST_BUF(buf)

      • 新建指向HOST内存的智能指针
    • SHARED_PTR_DEV_BUF(buf)

      • 新建指向DEV内存的智能指针
    • SHARED_PTR_DVPP_BUF(buf)

      • 新建指向DVPP内存的智能指针
    • CHECK_RET(cond, return_expr)

      • 函数返回值判断
    • LOG_PRINT(message, …)

      • 打印日志

公共数据结构

  • 全局变量:命名空间为acllite

    • Result

      • 用来表述返回值,一般用于函数定义或调用
    • RES_OK

      • 用来表述正常返回
    • RES_ERROR

      • 用来表述异常返回
  • 数据结构:命名空间为acllite

    • struct DataInfo

      • 数据信息,存储数据内容及数据大小,用来生成模型输入输出
    • struct InferenceOutput

      • 存放模型推理结果数据
    • struct ImageSize

      • 图像宽高组合,主要用于VPC中目标图片宽高取值
    • struct ImageData

      • 图像数据和属性
    • struct FrameData

      • 帧数据,主要用于队列传输
    • enum memoryLocation

      • 内存所在位置
    • enum ResizeType

      • resize方式
    • enum StreamProperty

      • 需要设置/获取的流属性,用于视频处理过程
    • struct DvRect

      • 图像左上角右下角坐标组合,主要用于VPC中裁剪区域取值

DVPPLite

视频解码

  • VideoRead类:命名空间为acllite

    • VideoRead(const std::string& videoName, int32_t deviceId = 0, aclrtContext context = nullptr)

      • 构造函数,创建一个VideoRead对象
    • ~VideoRead()

      • 析构函数,销毁VideoRead对象
    • bool Read(ImageData& image)

      • 获取要被处理的一帧图像数据
    • bool IsOpened()

      • 判断摄像头或者视频流是否已经打开
    • bool Set(StreamProperty propId, int value)

      • 设置解码属性
    • uint32_t Get(StreamProperty propId)

      • 获取解码视频流信息
    • void Release()

      • 资源释放函数

视频编码

  • VideoWrite类:命名空间为acllite

    • VideoWrite(std::string outFile, uint32_t maxWidth, uint32_t maxHeight, int32_t deviceId = 0)

      • 构造函数,创建一个VideoWrite对象
    • ~VideoWrite()

      • 析构函数,销毁VideoRead对象
    • bool Write(ImageData& image)

      • 写入一帧图像数据进行编码
    • bool IsOpened()

      • 判断写入文件是否已经打开
    • void Release()

      • 资源释放函数

图像编解码及VPC处理

  • ImageProc类:命名空间为acllite

    • ImageProc(int deviceId = 0)

      • 构造函数,创建一个ImageProc对象
    • ~ImageProc()

      • 析构函数,销毁ImageProc对象
    • ImageData Read(const std::string& fileName, acldvppPixelFormat imgFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420)

      • 读取一帧图片,将JPG图片解码为YUV
    • void Resize(ImageData& src, ImageData& dst, ImageSize dsize, ResizeType type = RESIZE_COMMON)

      • 对图片进行缩放
    • bool Write(const std::string& fileName, ImageData& img)

      • 对图片进行编码,写成图片文件
    • void Crop(ImageData& src, ImageData& dst, DvRect dRect, ImageSize dSize)

      • 对图片进行裁剪缩放

OMExecute

模型管理

  • ModelProc类:命名空间为acllite

    • ModelProc()

      • 构造函数,创建一个ModelProc对象
    • ~ModelProc()

      • 析构函数,销毁ModelProc对象
    • void DestroyResource()

      • 销毁模型处理过程中的相关资源
    • bool Load(const std::string& modelPath)

      • 模型加载函数
    • bool CreateInput(void *input, uint32_t size)

      • 创建模型输入(模型单输入场景)
    • bool CreateInput(void *input1, uint32_t input1size, void *input2, uint32_t input2size)

      • 创建模型输入(模型两个输入场景)
    • bool CreateInput(std::vector& inputData)

      • 创建模型输入(模型多输入场景)
    • bool Execute(std::vector& inferOutputs)

      • 模型执行函数
    • void DestroyInput()

      • 释放模型输入
    • void DestroyOutput()

      • 释放模型输出
    • void Unload()

      • 卸载模型

Media

USB摄像头读取

  • CameraRead类:命名空间为acllite

    • CameraRead(const std::string& videoName, int32_t deviceId = 0, aclrtContext context = nullptr)

      • 构造函数,创建一个VideoRead对象
    • ~CameraRead()

      • 析构函数,销毁VideoRead对象
    • bool Read(ImageData& image)

      • 获取要被处理的一帧图像数据
    • bool IsOpened()

      • 判断摄像头或者视频流是否已经打开
    • void Release()

      • 资源释放函数
    • uint32_t Get(StreamProperty propId)

      • 获取解码视频流信息

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。