栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

昇腾处理器媒体数据处理v2(VPC)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

昇腾处理器媒体数据处理v2(VPC)

Ascend710,专属媒体数据处理接口介绍 1.什么是Ascend710?

Ascend710是华为公司开发的一款用于AI计算的芯片,也就是大家常说的NPU,通过专用的AI运算加速单元可以实现低功耗高效率的处理大量的AI运算任务。


2.为什么要用专用的媒体数据接口,opencv不是更加的通用吗?

opencv确实非常的通用,在CPU,GPU上都可以调用相应的API接口进行一些图像的数据处理,但是Ascend710上集成了专用的媒体数据处理结构,可以比传统媒体数据处理的方式更加节能高效的完成任务,这点在一些嵌入式的场景中意义重大,而opencv虽然也可以,但是考虑到传统的软件解码大多安排在CPU上运算,不仅带来了极高的运算量抢占其它的应用计算资源而且不高效,而opencv也不可以调用相应的Asend芯片的能力。所以我们要有一套专用接口。


首先贴出官方的文档的链接,请各位小伙伴有不太明白的地方查看官方的文档。
官方文档链接

虽然媒体数据处理v2版本的接口目前处在体验中,并未大规模宣传,但是从官网图片来看已经支持的很好了

流程图

从图上我们可以看出虽然接口变成了第二版本,但是实际上整体思路还是没有改变依然是: 系统初始化==》创建对应的媒体处理功能通道==》申请内存==》调用处理接口==》调用获取结果接口==》内存释放==》系统注销 重点分析一下几个重要的API接口
  1. 创建vpc图像处理通道接口
// 原型
hi_s32 hi_mpi_vpc_create_chn(hi_vpc_chn chn, const hi_vpc_chn_attr *attr)
// 参数
hi_vpc_chn chn:此参数表示图像的处理通道号取值范围为[0,256)

hi_vpc_chn_attr *attr
typedef struct {
    hi_s32 attr; // 任务队列深度,取值范围:[0,350],表示一个通道的下发任务量。内存消耗随容量线性变化。
    hi_u32 pic_width; // 通道所支持的最大的图像宽度,目前没有实际作用,官方建议设置为零,防止以后的版本兼容的问题。
    hi_u32 pic_height; // 通道所支持的最大的图像高度,目前没有实际作用,官方建议设置为零,防止以后的版本兼容的问题。
} hi_vpc_chn_attr;
  1. 缩放的接口
// 原型
hi_s32 hi_mpi_vpc_resize (hi_vpc_chn chn, const hi_vpc_pic_info *source_pic, hi_vpc_pic_info *dest_pic, hi_double fx, hi_double fy, hi_u32 interpolation, hi_u32 *task_id, hi_s32 milli_sec)
// 参数
hi_vpc_chn chn:图片处理通道号,取值范围:[0, 256)

hi_vpc_pic_info *source_pic 输入图像信息的结构体指针
 hi_vpc_pic_info *dest_pic 输出图像信息的结构体指针
typedef struct {
    hi_void* picture_address; // 存放图片数据的Device地址。
    hi_u32 picture_buffer_size; // 存放图片数据的缓冲区大小。(注意此大小为宽高对其后的大小,不一定为图片原始大小)
    hi_u32 picture_width; // 图片真实宽。
    hi_u32 picture_height; // 图片真实高
    hi_u32 picture_width_stride; // 图片宽stride
    hi_u32 picture_height_stride; // 图片高stride
    hi_pixel_format picture_format; // 目标图片的格式
} hi_vpc_pic_info;

hi_double fx: 宽的缩放比例
hi_double fy: 高的缩放比例

hi_u32 interpolation:图像缩放
0:业界通用的Bilinear算法
1:业界通用的Nearest neighbor 算法

 hi_s32 milli_sec:超时的方式
 -1:阻塞方式
 0:非阻塞方式
 >0:超时方式,配置具体的超时时间。一般偏差在操作系统的一个时间片内。

hi_u32 *task_id:任务的ID用来区分不同任务
  1. 接收缩放(抠图)的结果的接口
// 原型
hi_s32 hi_mpi_vpc_get_process_result(hi_vpc_chn chn, hi_u32 task_id, hi_s32 milli_sec)
此接口可以与任务发送接口在同一个线程中,也可以在另一个线程中调用加快速度。
// 参数
hi_vpc_chn chn: 图片处理通道号,取值范围:[0, 256)
hi_u32 task_id: 任务的ID用来区分不同任务
hi_s32 milli_sec: 超时的方式
 -1:阻塞方式
 0:非阻塞方式
 >0:超时方式,配置具体的超时时间。一般偏差在操作系统的一个时间片内
  1. 抠图任务发送接口
// 原型
hi_s32 hi_mpi_vpc_crop(hi_vpc_chn chn, const hi_vpc_pic_info *source_pic, hi_vpc_crop_region_info crop_info[], hi_u32 count, hi_u32 *task_id, hi_s32 milli_sec)
// 参数
hi_vpc_chn chn:图片处理通道号,取值范围:[0, 256)
hi_vpc_pic_info *source_pic 解释同上一条

hi_u32 count:抠图区域的数量,取值范围[1,256]

hi_vpc_crop_region_info crop_info[]:抠图图片信息数组,该数组长度与count参数值保持一致
typedef struct {
    hi_vpc_pic_info dest_pic_info;
    hi_vpc_crop_region crop_region;
} hi_vpc_crop_region_info;
typedef struct {
    hi_u32 top_offset; // 抠图的左上角(横坐标)
    hi_u32 left_offset; // 抠图的左上角(纵坐标)
    hi_u32 crop_width;  // 抠图区域宽
    hi_u32 crop_height; // 抠图区域高
} hi_vpc_crop_region;

开源代码学习

缩放

开源代码学习

缩放

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号