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

文章介绍了AclLite库,它对CANN的ACL接口进行了封装,简化了用户在边缘场景下的操作,涉及资源管理、视频编码解码、图像处理、模型管理和USB摄像头读取等功能。
摘要由CSDN通过智能技术生成

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)

      • 获取解码视频流信息

在这里插入图片描述

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值