【2023 · CANN训练营第一季】应用开发深入讲解——第四章 DVPP初级

学习资源

1.JPEG图片解码
文档
2.图片缩放
文档

媒体数据处理

数据预处理的典型使用场景

在这里插入图片描述

数据预处理的多种方式

分为两种,AIPP和DVPP
在这里插入图片描述

DVPP数据预处理功能

在这里插入图片描述
了解两个重要概念

宽stride 和 高stride

理解:这里假设一张图片的宽为500,高为300,由于JPEG对输出图片的要求为: 宽stride:64对齐 高stride:16对齐 当500/64=7.8125 不是整数,要向上取整,所以使用8*64=512 ,得出了宽stride,高stride也是类似。

在这里插入图片描述

内存申请与释放

在这里插入图片描述

JPEG图片解码

第1单元 使用约束

图片分辨率约束
在这里插入图片描述
图片格式、宽高对齐、内存约束表格

在这里插入图片描述

第2单元 媒体数据处理V1版本

流程:

JPEG图片解码流程

JPEG图片解码——内存申请与释放

·acldvppMalloc
·函数功能:

该接口主要用于分配内存给Device侧媒体数据处理时使用,申请的大页内存满足数据处理的要求(例如,内存首地址128对齐),同步接口。
调用acldvppMalloc接口申请内存时,会对用户输入的size按向上对齐成32整数倍后,再多加32字节申请。
若用户使用acldvppMalloc接口申请大块内存并自行划分、管理内存时,用户在管理内存时,需按每张图片的实际数
据大小向上对齐成32整数倍+32字节(ALIGN UPIlenl+32字节)来管理内存。
例如,用户已使用acldvppMalloc接口申请大块内存并自行管理内存,用户需管理n张图片的内存,每张图片大小为 len字节,实际应按照n*(ALIGNUP[len]+32字节)的大小管理内存,每张图片的内存地址按(ALIGN UP[len]+32字节)为单位偏移。
ALIGN UP表示向上按32字节对齐:((len-1)/32+1)*32。
调用该接口申请大页内存失败,仅表示系统内的大页内存不够>调用该接口申请内存后,必须使用acldvppFree接口释放内存。

内存申请与释放

通道创建与销毁

·acldvppCreateChannelDesc
·函数功能:

创建acldvppChannelDesc类型的数据,表示创建图片数据处理通道时的通道描述信息。该接口为同步接口。
·函数原型:
acldvppChannelDescacldvppCreateChannelDesc)·返回值说明:
返回acldvppChannelDesc类型,表示成功。>返回null,表示失败。
· = = = = = = = = = = = = ========== = = = = = = = = = = = = = = = = = = = = = = =
·acldvppDestroyChannelDesc
·函数功能:
销毁acldvppChannelDesc类型的数据,只能销毁通过acldvppCreateChannelDesc接口创建的 acldvppChannelDesc类型。该接口为同步接口。
必须在调用acldvppDestroyChanne接口销毁channel通道之后再调用acldvppDestroyChannelDesc接口释放 acldvppChannelDesc类型的数据,否则报错。
·函数原型:
·aclError acldvppDestroyChannelDesc(acldvppChannelDesc
channelDesc)

在这里插入图片描述

描述图片

·acldvppCreatePicDesc·函数功能:

创建图片描述信息。同步接口。·函数原型:
acldvppPicDesc*acldvppCreatePicDesc()·返回值说明:
返回acldvppPicDesc类型,表示成功。>返回null,表示失败。
= = = = = = = = = = = = = = = ====================================

·acldvppDestroyPicDesc·函数功能:

销毁图片描述信息,只能销毁通过acldvppCreatePicDesc接口创建的图片描述信息。·函数原型:
aclErroracldvppDestroyPicDesc(acldvppPicDesc*picDesc)

在这里插入图片描述

整体调用顺序

JPEG图片解码–整体调用顺序·整体调用顺序:

创建通道描述对象:调用acldvppCreateChannelDesc
创建acldvppChannelDesc对象
创建通道:调用acldvppCreateChannel(acldvppChannelDesc)创建通道
创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
执行操作.……
销毁图片描述:调用acldvppDestroyPicDesc(acldvppPicDesc)销毁图片描述
创建图片描述:调用acldvppCreatePicDesc创建acldvppPicDesc对象
执行操作…
销毁图片描述:调用acldvppDestroyPicDesc(acldvppPicDesc)销毁图片描述
销毁通道:调用acldvppDestroyChannel(acldvppChannelDesc)销毁通道
销毁通道描述对象:调用acldvppDestroyChannelDesc(acldvppChannelDesc)销毁通道描述对象

解码主接口

在这里插入图片描述

读取图片宽高

在这里插入图片描述

预测输出内存

在这里插入图片描述

VPC图片约束

图片分辨率约束
在这里插入图片描述
图片格式、宽高对齐、内存约束
在这里插入图片描述
在这里插入图片描述

VPC图片缩放

VPC
·功能:

抠图,从输入图片中抠出需要用的图片区域。
缩放-针对不同分辨率的图像,当前支持非8K缩放。
(非8K缩放,用于处理输入图片分辨率在326~40964096范围内的图片。)
-从是否抠多张图的维度,可分为单图裁剪缩放(支持非压缩格式) 一图多框裁剪缩放(支持非压缩格式)。
-其它缩放方式,如:原图缩放、等比例缩放。
善加,从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有冬片读入输出内存),只有当输出图片是已有图片时,才表示叠加。
拼接,从输入图片中报多张图片,对抠出的图进行缩放后,放到输出图片的指定区域。

8K缩放现在也支持了,用于处理宽或高在4096~8192范围内的输入图片,实际开发时请参见对应版本的文档,了解8K缩放时支持的图片格式。

抠图+缩放+叠加
在这里插入图片描述
在这里插入图片描述
调用流程
在这里插入图片描述

VPC–典型流程
·调用acldvppCreateChannel接口创建图片数据处理的通道。创建图片数据处理的通道前,需先调用acldvppCreateChannelDesc接口创建通道描述信息。
·调用acldvppCreateRoiConfig接口、acldvppCreateResizeConfig接口分别创建抠图区域位置的配置、缩放配置。
实现抠图、缩放功能前,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。
·执行抠图、缩放。

关于抠图:
调用acldvppVpcCropAsync异步接口,按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。输出图片区域与抠图区域 cropArea不一致时会对图片再做一次缩放操作。
-当前系统还提供了acldvppVpcCropAndPasteAsync异步接口,支持按指定区域从输入图片中抠图,再将抠的图片贴到目标图片的指定位置,作为输出图片。
·抠图区域cropArea的宽高与贴图区域pasteArea宽高不一致时会对图片再做一次缩放操作。
·如果用户需要将目标图片读入内存用于存放输出图片,将贴图区域叠加在目标图片上,则需要编写代码逻辑:在申请输出内存后,将目标图片读入输出内存。
关于缩放
-调用acldvppVpcResizeAsync异步接口,将输入图片缩放到输出图片大小
调用acldvppCreateResizeConfiq接口创建图片缩放配置数据,不支持指定缩放算法,默认缩放算法为“最近邻插值”。
-缩放后输出图片内存根据YUV420SP格式计算,计算公式:对齐后的宽对齐后的高3/2
对于异步接口,还需调用aclrtSynchronizeStream接口阻塞Host运行,直到指定Stream中的所有任务都完成,
·调用acldvppDestroyRoiConfig接口、acldvppDestroyResizeConfig接口分别销毁抠图区域位置的配置、缩放配置。
·调用acldvppDestroyChannel接口销毁图片数据处理的通道。销毁图片数据处理的通道后,再调用acdvppDestroyChannelDesc接销毁通道描述信息。

缩放接口
在这里插入图片描述
裁剪接口
在这里插入图片描述
剪切粘贴

在这里插入图片描述

V2版本
接口调用流程
在这里插入图片描述

应用开发初级章节小测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/19528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

匹配算法之 匈牙利算法详解

参考: 算法学习笔记(5):匈牙利算法漫谈匈牙利算法匈牙利算法、KM算法匈牙利算法(二分图)通俗易懂小白入门)二分图最大匹配——匈牙利算法多目标跟踪之数据关联(匈牙利匹配算法和KM算法)【小白学…

187页9万字企业大数据治理与云平台实施方案(word)

1 项目背景概述 1.1 项目背景理解 1.2 项目需求范围 2 项目技术方案 2.1 咨询研究服务方案 2.1.1 咨询研究服务内容 2.1.2 咨询服务方案 2.2 第三方独立评估 2.2.1 概述 2.2.2 管理办法 2.2.3 考核机制 2.3 安全咨询研究服务方案 2.3.1 安全咨询服务内…

【k8s】【ELK】日志环境部署【待写】

1、日志收集基本概念 k8s中pod的路径: containers log: /var/log/containers/*.log Pod log: /var/log/pods docker log: /var/lib/docker/containers/*/*.log如何收集日志 使用 EFKLogstashKafka 1、filebeat读取容器中的日志,然后写入K…

ChatGPT在小红书文案实践

今天聊一聊ChatGPT在小红书这个实际应用场景的案例。ChatGPT 以较低的门槛提高了使用者创作水平,有较高的下限,但如何创造更高质量的内容就要依靠使用者在领域的能力和AI使用技巧,作者无任何小红书推广和文案写作经验,文章内容来自…

快速排序、希尔排序、归并排序、堆排序、插入排序、冒泡排序、选择排序(递归、非递归)C语言详解

1.排序的概念及其运用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录&a…

python中使用opencv LED屏数字识别(可用做车牌识别,一样的原理)

应项目要求需要基于cpu的LED数字识别,为了满足需求,使用传统方法进行实验。识别传感器中显示的数字。因此使用opencv的函数做一些处理,实现功能需求。 首先读取图像,因为我没想大致得到LED屏幕的区域,因此将RGB转换为H…

postman处理各种请求数据

1、后台request接收postman参数 2、后台单个参数接收postman 3、后台RequestParam参数接收postman 注意事项:情况一:全部都是单个字符串的 情况二:有可能是一个json对象序列化成字符串过来的,那么需要在form-data中设置 …

鸿蒙Hi3861学习十-Huawei LiteOS-M(消息队列)

一、简介 消息队列,是一种常用于任务间通信的数据结构,实现了接收来自任务或中断的不固定长度的消息,并根据不同的接口选择传递消息是否存放在自己空间。任务能够从队列里面读取消息,当队列中的消息是空时,挂起读取任务…

国内免费cdn汇总2023最新

内容分发网络简称CDN,其原理大概是将网站内容分发至加速节点,让用户从就近的服务器节点上获取内容,从而提高网站的访问加载速度。大部分服务商(如阿里云,腾讯云,京东云等)的CDN服务是按使用量收…

【iOS】-- GET和POST(NSURLSession)

文章目录 NSURLSessionGET和POST区别 GET方法GET请求步骤 POSTPOST请求步骤 NSURLSessionDataDelegate代理方法AFNetWorking添加头文件GETPOST第一种第二种 NSURLSession 使用NSURLSession,一般有两步操作:通过NSURLSession的实例创建task;执…

STL配接器(容器适配器)—— stack 的介绍使用以及模拟实现。

注意 : 以下所有文档都来源此网站 : http://cplusplus.com/ 一、stack 的介绍和使用 stack 文档的介绍:https://cplusplus.com/reference/stack/stack/ 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中&…

预训练模型之BERT、Transformer-XL、XL-Net等

文章目录 预训练模型(Pre-trained Models, PTMs)前置知识BERTTransformer-XLXLNetTransformer-XL类似工作(Scalable Transformer)1. 《Scaling Transformer to 1M tokens and beyond with RMT》2. 《》 预训练模型(Pre…

【Linux常见指令以及权限理解】基本指令(3)

写在前面 上一篇文章,我们学习了Linux的一些常用指令, 学习了如何理解Linux系统,介绍了对Linux系统的理解:Linux下一切皆文件 介绍了重定向还有管道相关的知识。这里是上一篇博客的链接:http://t.csdn.cn/2d6fc 接…

Vue组件化编程

2.1. 模块与组件、模块化与组件化 模块: 理解:向外提供特定功能的 js 程序,一般就是一个 js 文件为什么:js 文件很多很复杂作用:复用、简化 js 的编写,提高 js 运行效率 组件: 定义&#xff…

QT界面开发杂记(五)

QString转char* QString("name").toStdString().c_str() c_str()没有‘\0’结尾可能导致一些错误可以使用以下方法解决: QString xmlPath "path"; const char cXmlName[1024] {0}; memcpy((void*)cXmlName,xmlPath.toStdStri…

Prompt learning 教学[案例篇]:文生文案例设定汇总,你可以扮演任意角色进行专业分析

Prompt learning 教学[案例篇]:文生文案例设定汇总,你可以扮演任意角色进行专业分析 1.角色扮演 行为Prompt写法“牙医”““我想让你扮演一名牙医。我会向你提供有关寻找牙科服务(例如 X 光、清洁和其他治疗)的个人的详细信息。…

《编程思维与实践》1072.下一位妙数

《编程思维与实践》1072.下一位妙数 题目 思路 思路与最小不重复数基本一致,从最高位开始找到第一个出现9的位置,让其加1,后面全变为0即可. 只需要再加一个判定条件:不能被9整除. 由数学知识,一个数不能被9整除当且仅当各位数之和不能被9整除. 这里给出简单的证明: 不妨以三位…

工程化:vite4和vue3里面的命令式loading的封装及使用

用习惯了vue的组件使用方式,转到vue3里面发现没有了vue的原型,不能全局挂载方法了,我们要使用命令式调用组件该怎么做, 效果展示 代码演练 1.组件结构 2.基础的组件模板loading.vue <template><sectionclass="full-loading":class

多台电脑共享鼠标键盘软件

背景 最近接手了2个不同base的项目&#xff0c;由于2个base的不同代码加密管理&#xff0c;必须要用两台电脑进行分别开发。于是&#xff0c;我不大的办公桌上要摆上2个键盘和2个鼠标&#xff0c;一下子就显得桌面特别杂乱&#xff0c;办公心情都不舒畅了。 我跟朋友吐槽了这件…

华硕ROG|玩家国度魔霸新锐2023 Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原

华硕ROG|玩家国度魔霸新锐2023 Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原 文件地址&#xff1a;https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 &#xff0c;安装结束后带隐藏分区以及机器所有驱动软件 需准备一个16G左右…