媒体数据处理基础知识
本章主要介绍图像/视频/音频数据处理的具体功能、接口调用流程以及示例代码。
图像/视频/音频数据处理的典型功能介绍
各功能的介绍如下表所示,昇腾AI处理器对这些功能的支持度请参见各版本功能支持度说明(AIPP当前各版本均支持)。
功能 |
子功能模块 |
描述 |
---|---|---|
获取视频数据 |
ISP(Image Signal Processing)系统控制 |
系统控制部分用于注册3A算法、注册Sensor驱动、初始化ISP firmware、运行ISP firmware、退出ISP firmware、配置ISP属性等功能。 |
MIPI Rx ioctl命令字 |
MIPI Rx是一个支持多种差分视频输入接口的采集单元,通过combo-PHY接收MIPI/LVDS/sub-LVDS/HiSPi接口的数据,通过不同的功能模式配置,MIPI Rx可以支持多种速度和分辨率的数据传输需求,支持多种外部输入设备。 |
|
VI(Video Input) |
VI模块捕获视频图像,可对其做裁剪、防抖、颜色优化、亮度优化、噪声去除等处理,并输出YUV或RAW格式的图像数据。 |
|
展示视频数据 |
VO(Video Output) |
VO模块接收VPSS处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议(当前仅支持HDMI)输出给外围视频设备。 VO可配合TDE(Two Dimensional Engine)模块、HIFB(Hisilicon Framebuffer)模块,利用硬件分别进行图形绘制、叠加图形层管理。 |
HDMI(High Definition Multimedia Interfac) |
HDMI是全数字化影像和声音发送接口,可以发送未压缩的音频及视频信号。 |
|
TDE(Two Dimensional Engine) |
TDE是图形二维加速引擎,它利用硬件为 OSD(On Screen Display)和 GUI(Graphics User Interface)提供快速的图形绘制功能,主要有快速拷贝、快速色彩填充、模式填充(当前仅支持Alpha Blending操作)。 |
|
HIFB(Hisilicon Framebuffer) |
HIFB用于管理叠加图形层,它不仅提供Linux Framebuffer的基本功能,还在Linux Framebuffer的基础上增加图层显示起始位置修改、层间Alpha等扩展功能。 |
|
区域管理 |
Region |
叠加在视频上的OSD (On Screen Display)和遮挡在视频上的色块统称为区域。区域管理模块,用于统一管理这些区域资源,用于在视频上显示一些特定信息(如通道号、时间戳等)、或在视频中填充色块用于遮挡,当前该功能需配合VPSS一起使用。 |
图像/视频数据处理 |
VPSS(Video Process Sub-System) |
VPSS模块支持对输入图像进行统一预处理,如去噪、去隔行、裁剪等,然后再对各通道分别进行处理,如缩放、加边框等。 |
AIPP(Artificial Intelligence Pre-Processing) |
AIPP人工智能预处理,在AI Core上完成数据预处理,主要功能包括改变图像尺寸(抠图、填充等)、色域转换(转换图像格式)、减均值/乘系数(改变图像像素)等。
AIPP区分为静态AIPP和动态AIPP。您只能选择静态AIPP或动态AIPP中的一种来处理图片,不能同时配置静态AIPP和动态AIPP两种方式。
|
|
DVPP(Digital Vision Pre-Processing) |
DVPP是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括以下功能:
说明:
AIPP、DVPP可以分开独立使用,也可以组合使用。组合使用场景下,一般先使用DVPP对图片/视频进行解码、抠图、缩放等基本处理,但由于DVPP硬件上的约束,DVPP处理后的图片格式、分辨率有可能不满足模型的要求,因此还需要再经过AIPP进一步做色域转换、抠图、填充等处理。 例如,在Atlas 200/300/500 推理产品和Atlas 训练系列产品上,由于DVPP视频解码仅支持输出YUV格式的图片,如果模型需要RGB格式的图片,则需要再经过AIPP做色域转换的处理。 |
|
音频数据获取和输出 |
AI(Audio Input) |
AI模块捕获音频数据 。 |
AO(Audio Output) |
通过ADEC模块解码后的音频数据,AO模块支持播放音频。 |
|
音频数据编解码 |
AENC(Audio Encoder) |
通过AI模块获取的音频数据,AENC模块支持对其进行编码,输出音频码流。 |
ADEC(Audio Decoder) |
ADEC支持解码G.711a、G.711u等协议的音频码流,再通过AO模块播放音频。 |
DVPP图像/视频数据处理的典型使用场景
如果源图或视频的分辨率、格式等与模型的要求不一致时,我们可以将源图或视频处理成符合模型的要求。如下为典型场景的举例。
- 视频解码、缩放
使用Yolov3模型实现目标检测的场景下,用户提供的输入视频为H264编码格式、分辨率为1920*1080,但Yolov3模型要求的输入图片格式为RGB/YUV、分辨率为416*416,两者不一致,此时可对视频执行以下一系列处理。
图2 视频解码、缩放使用场景图
- 图片解码、缩放、格式转换
使用Resnet50模型实现图片分类的场景下,用户提供的输入图片为JPEG编码格式、分辨率为1280*720,但Resnet50模型要求的输入图片格式为RGB、分辨率为224*224,两者不一致,此时可对图片执行以下一系列处理。
图3 图片解码、缩放、格式转换使用场景图
- 抠图、缩放、格式转换
使用Resnet50模型实现图片分类的场景下,用户提供的输入图片格式为YUV420SP、分辨率为1280*720,但Resnet50模型要求的输入图片格式为RGB、分辨率为224*224,两者不一致,此时对图片执行以下一系列处理。
图4 抠图、缩放、格式转换使用场景图
媒体数据处理功能开发流程
- 准备环境。
请参见准备开发和运行环境。
- 创建代码目录。
在开发应用前,您需要先创建目录,存放代码文件、编译脚本、测试图片数据、模型文件等
如下仅是示例,供参考:
├App名称 ├── model // 该目录下存放模型文件 │ ├── xxx.json ├── data │ ├── xxxxxx // 测试数据 ├── inc // 该目录下存放声明函数的头文件 │ ├── xxx.h ├── out // 该目录下存放输出结果 ├── src │ ├── xxx.json // 系统初始化的配置文件 │ ├── CMakeLists.txt // 编译脚本 │ ├── xxx.cpp // 实现文件
- (可选)构建模型。
模型推理场景下,必须要有适配昇腾AI处理器的离线模型(*.om文件),请参见模型构建。
如果应用中涉及模型推理,则需要构建模型。
- 开发应用。
依赖的头文件和库文件的说明请参见调用接口依赖的头文件和库文件说明。
如果应用中涉及模型推理,请参见单Batch&静态Shape输入推理、更多特性编写相应的代码。
- 编译运行应用,请参见应用编译&运行。