API接口参考(C++)
使用须知
[!NOTICE]
- 本章节开放的类,请遵循同一个类实例在单一线程中使用的原则,请勿将同一个类实例在不同的线程中使用。
- 请注意输入为STL容器或webjson参数的函数,应基于性能和实际业务需求限制容器长度,以防止可能出现的内存问题。
- 传入接口内的JSON相关内容中请勿包含注释,否则会引起解析失败。
- 若JSON相关内容中单个object存在key值相同键值对,接口将默认保留最后一组键值对作为解析结果。
- C++接口中存在由编译器生成的接口,例如默认构造函数,默认析构函数以及赋值构造函数等接口,不在本文作详细说明。
- 部分接口以及数据结构是由protobuf生成。需注意protobuf会自动生成protobuf内部自定义的类以及数据结构,请用户不要使用protobuf内部自定义的类和数据结构。
- 标记有宏 SDK_AVAILABLE_FOR_OUT 的接口,表示对用户开放。
- 标记有宏 SDK_AVAILABLE_FOR_IN 的接口,表示内部使用,请用户不要使用。
- 标记有宏 SDK_UNAVAILABLE_FOR_OTHER 的接口,表示为隐藏,用户无法使用。
- 标记有宏 SDK_DEPRECATED_FOR 的接口,表示在未来版本会弃用,建议使用替代接口。
高级API头文件列表说明
表 1 头文件列表
| 头文件名称 | 所在目录 | 用途 |
|---|---|---|
| MxBase.h | MxBase/ | MxBase头文件。 |
| AscendStream.h | MxBase/Asynchron | 定义AscendStream类,用于异步流程控制。 |
| HiddenAttr.h | MxBase/Common | 声明__attribute__相关的宏,用于标记接口属性,当前主要用于标记废弃接口、使得在编译阶段出现接口已废弃的告警提示。 |
| Version.h | MxBase/Common | 声明返回Vision SDK版本信息的接口,Vision SDK版本信息主要包括当前Vision SDK版本号、主版本号、从版本号、小版本号。 |
| ConfigUtil.h | MxBase/ConfigUtil | 定义ConfigData类和ConfigUtil类用于后处理模块和日志模块。具体来说,ConfigUtil类用于将配置文件读取到ConfigData对象当中,ConfigData对象定义了如添加JSON文件键值对、加载Label文件到std::vector对象、根据索引返回标签名等接口,供后处理模块和日志模块调用。 |
| DataType.h | MxBase/CV/Core | 定义目标检测相关数据结构,具体包含:DetectBox结构体、RoiBox结构体、IOUMethod枚举类、TrackFlag枚举类。 |
| Huangarian.h | MxBase/CV/MultipleObjectTracking | 定义匈牙利算法相关数据结构和接口,用于二分图匹配。 |
| KalmanTracker.h | MxBase/CV/MultipleObjectTracking | 定义卡尔曼滤波相关数据结构和接口,用于跟踪检测目标。 |
| Nms.h | MxBase/CV/ObjectDetection/Nms | 定义非极大值抑制算法相关接口,用于去除冗余目标框。 |
| SimilarityTransform.h | MxBase/CV/WarpAffine | 定义SimilarityTransform类,用于计算相似变换。 |
| WarpAffine.h | MxBase/CV/WarpAffine | 定义WarpAffine类,用于计算仿射变换。 |
| DeviceManager.h | MxBase/DeviceManager | 定义DeviceManager类,其中包括设备初始化、返回设备数量、返回当前设备、设置运行设备等相关接口。 |
| DvppWrapper.h | MxBase/DvppWrapper | 定义了DvppWrapper类,该类会根据芯片的不同调用不同的接口进行实例化,DvppWrapper类封装了图像变换相关的操作。 |
| DvppWrapperDataType.h | MxBase/DvppWrapper | 主要定义了图像处理相关的数据结构以及用于图片参数校验的常量。该头文件将于2025年12月退出。 |
| Color.h | MxBase/E2eInfer/Color | 定义了Color结构体。 |
| Dim.h | MxBase/E2eInfer/Dim | 定义了Dim结构体。 |
| GlobalInit.h | MxBase/E2eInfer/GlobalInit | 声明了初始化与去初始化接口。 |
| Image.h | MxBase/E2eInfer/Image | 定义了Image类,该类作为图片的数据结构,包含获取图片属性、将图片转为Tensor对象等接口。 |
| ImageProcessor.h | MxBase/E2eInfer/ImageProcessor | 定义了ImageProcessor类,提供编码、解码、切片、缩放、抠图、贴图等常用接口,ImageProcessor类底层调用了DvppWrapper类中的接口。 |
| Model.h | MxBase/E2eInfer/Model | 定义了Model类,提供高性能推理,返回输入输出Tensor格式等接口。 |
| Point.h | MxBase/E2eInfer/Point | 定义了Point结构体用于表示点。 |
| Rect.h | MxBase/E2eInfer/Rect | 定义了Rect结构体用于表示矩形。 |
| Size.h | MxBase/E2eInfer/Size | 定义了Size结构体用于表示尺寸。 |
| Tensor.h | MxBase/E2eInfer/Tensor | 定义了Tensor类,提供返回Tensor数据类型、返回字节大小、返回Tensor当前设备ID等接口。 |
| TensorFeatures.h | MxBase/E2eInfer/Tensor | 定义了Tensor特征提取类算法。 |
| TensorFusion.h | MxBase/E2eInfer/TensorOperation | 定义了Tensor融合方法,提供背景替换、动效透明度贴图和字幕透明度贴图等功能。 |
| TensorWarping.h | MxBase/E2eInfer/TensorOperation | 定义了Tensor图像变形处理方法,提供旋转、仿射变换等功能。 |
| PerElementOperations.h | MxBase/E2eInfer/TensorOperation/MatricesOperation | 定义了Tensor按元素处理方法,提供计算Tensor加、减、乘、除等功能。 |
| MatrixReductions.h | MxBase/E2eInfer/TensorOperation/MatricesOperation | 定义了Tensor归约方法,提供Tensor归约、求和等功能。 |
| CoreOperationsOnTensors.h | MxBase/E2eInfer/TensorOperation/MatricesOperation | 定义了Tensor核心处理方法,提供Tensor裁剪、扩展、水平堆叠和垂直堆叠等功能。 |
| VideoDecoder.h | MxBase/E2eInfer/VideoDecoder | 定义了VideoDecoder类,提供回调式、非阻塞视频解码接口,VideoDecoder类底层调用了DvppWrapper类中的接口。 |
| VideoEncoder.h | MxBase/E2eInfer/VideoEncoder | 定义了VideoEncoder类,提供回调式、非阻塞视频编码接口,VideoEncoder类底层调用了DvppWrapper类中的接口。 |
| DataType.h | MxBase/E2eInfer | 定义图像处理相关枚举类。 |
| ErrorCode.h | MxBase/ErrorCode | 定义错误码相关的字符串数组。 |
| ErrorCodes.h | MxBase/ErrorCode | 定义错误码相关的枚举类。 |
| ErrorCodeThirdParty.h | MxBase/ErrorCode | 定义第三方错误码相关的枚举类。 |
| Log.h | MxBase/Log | 定义Log类,主要提供了Debug、Info、Warn、Error等接口用于记录不同级别的日志信息。 |
| FastMath.h | MxBase/Maths | 定义了FastMath类,主要提供了Sigmoid、Softmax函数计算的接口。 |
| MathFunction.h | MxBase/Maths | 定义了LineRegressionFit类,主要提供了线性回归函数计算的接口。 |
| NpySort.h | MxBase/Maths | 定义了NpySort,主要提供快排算法接口。 |
| MemoryHelper.h | MxBase/MemoryHelper | 定义了MemoryData类和MemoryHelper类,主要提供内存申请、释放、拷贝等接口。 |
| ModelDataType.h | MxBase/ModelInfer | 定义了模型相关的数据结构。 |
| ModelInferenceProcessor.h | MxBase/ModelInfer | 定义了ModelInferenceProcessor类,主要提供模型推理相关接口,其功能与MxBase/E2eInfer/Model/Model.h相似。 |
| ModelPostProcessorBase.h | MxBase/ModelPostProcessors/ModelPostProcessorBase | 定义了ModelPostProcessorBase类,该类为MxBase/ModelPostProcessors目录下的基类。 |
| ObjectPostDataType.h | MxBase/ModelPostProcessors/ModelPostProcessorBase | 定义了目标后处理相关的数据结构。 |
| ObjectPostProcessorBase.h | MxBase/ModelPostProcessors/ModelPostProcessorBase | 定义了ObjectPostProcessorBase类,该类继承ModelPostProcessorBase类,已标识为弃用。 |
| Resnet50PostProcess.h | MxBase/postprocess/include/ClassPostProcessors | 定义了Resnet50PostProcess类,该类继承ClassPostProcessBase类。 |
| HigherHRnetPostProcess.h | MxBase/postprocess/include/KeypointPostProcessors | 定义了HigherHRnetPostProcess类,该类继承KeypointPostProcessBase类。 |
| OpenPosePostProcess.h | MxBase/postprocess/include/KeypointPostProcessors | 定义了OpenPosePostProcess类,该类继承KeypointPostProcessBase类。 |
| FasterRcnnPostProcess.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了FasterRcnnPostProcess类,该类继承ObjectPostProcessBase类。 |
| MaskRcnnMindsporePost.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了MaskRcnnMindsporePost类,该类继承ObjectPostProcessBase类。 |
| RetinaNetPostProcess.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了RetinaNetPostProcess类,该类继承ObjectPostProcessBase类。 |
| SsdMobilenetFpnMindsporePost.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了SsdMobilenetFpnMindsporePost类,该类继承ObjectPostProcessBase类。 |
| SsdMobilenetv1FpnPostProcess.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了SsdMobilenetv1FpnPostProcess类,该类继承ObjectPostProcessBase类。 |
| Ssdvgg16PostProcess.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了Ssdvgg16PostProcess类,该类继承ObjectPostProcessBase类。 |
| Yolov3PostProcess.h | MxBase/postprocess/include/ObjectPostProcessors | 定义了Yolov3PostProcess类,该类继承ObjectPostProcessBase类。 |
| Deeplabv3Post.h | MxBase/postprocess/include/SegmentPostProcessors | 定义了Deeplabv3Post类,该类继承SemanticSegPostProcessBase类。 |
| UNetMindSporePostProcess.h | MxBase/postprocess/include/SegmentPostProcessors | 定义了UNetMindSporePostProcess类,该类继承SemanticSegPostProcessBase类。 |
| CrnnPostProcess.h | MxBase/postprocess/include/TextGenerationPostProcessors | 定义了CrnnPostProcess类,该类继承TextGenerationPostProcessBase类。 |
| TransformerPostProcess.h | MxBase/postprocess/include/TextGenerationPostProcessors | 定义了TransformerPostProcess类,该类继承TextGenerationPostProcessBase类。 |
| CtpnPostProcess.h | MxBase/postprocess/include/TextObjectPostProcessors | 定义了CtpnPostProcess类,该类继承TextObjectPostProcessBase类。 |
| PSENetPostProcess.h | MxBase/postprocess/include/TextObjectPostProcessors | 定义了PSENetPostProcess类,该类继承TextObjectPostProcessBase类。 |
| ClassPostProcessBase.h | MxBase/PostProcessBases | 定义了ClassPostProcessBase类,该类继承PostProcessBase类,主要提供Process接口。 |
| ImagePostProcessBase.h | MxBase/PostProcessBases | 定义了ImagePostProcessBase类,该类继承PostProcessBase类,主要提供设置裁剪感兴趣区域的接口。 |
| KeypointPostProcessBase.h | MxBase/PostProcessBases | 定义了KeypointPostProcessBase类,该类继承PostProcessBase类,主要提供关键点检测任务相关的后处理接口。 |
| ObjectPostProcessBase.h | MxBase/PostProcessBases | 定义了ObjectPostProcessBase类,该类继承PostProcessBase类,主要提供目标检测任务相关的后处理接口。 |
| PostProcessBase.h | MxBase/PostProcessBases | 定义PostProcessBase类,该类为其余后处理类的基类。 |
| PostProcessDataType.h | MxBase/PostProcessBases | 定义了目标检测、图片缩放、图片裁剪等任务相关的数据结构。 |
| SemanticSegPostProcessBase.h | MxBase/PostProcessBases | 定义了SemanticSegPostProcessBase类,该类继承PostProcessBase类,主要提供语义分割任务相关的后处理接口。 |
| TextGenerationPostProcessBase.h | MxBase/PostProcessBases | 定义了TextGenerationPostProcessBase类,该类继承PostProcessBase类,主要提供文本生成任务相关的后处理接口。 |
| TextObjectPostProcessBase.h | MxBase/PostProcessBases | 定义了TextObjectPostProcessBase类,该类继承PostProcessBase类,主要提供文本对象任务相关的后处理接口。 |
| TensorBase.h | MxBase/Tensor/TensorBase | 定义TensorBase类。 |
| TensorDataType.h | MxBase/Tensor/TensorBase | 定义TensorDataType枚举类,该类对象为TensorBase类的成员变量。 |
数据结构及枚举类型
通用数据结构
AppGlobalCfg
全局应用配置,支持配置DVPP资源池中VPC通道的数量。
struct AppGlobalCfg {
uint32_t vpcChnNum = DEFAULT_VPC_CHN_NUM;
};
| 参数名 | 说明 |
|---|---|
| vpcChnNum | VPC通道资源池大小。默认值为DEFAULT_VPC_CHN_NUM = 48。取值范围为[1, 128]。 |
AppGlobalCfgExtra
全局应用配置,支持配置DVPP资源池中VPC、JPEGD、PNGD及JPEGE通道的数量。
struct AppGlobalCfgExtra {
uint32_t vpcChnNum = DEFAULT_VPC_CHN_NUM;
uint32_t jpegdChnNum = DEFAULT_JPEGD_CHN_NUM;
uint32_t pngdChnNum = DEFAULT_PNGD_CHN_NUM;
uint32_t jpegeChnNum = DEFAULT_JPEGE_CHN_NUM;
virtual ~AppGlobalCfgExtra() = default;
};
| 参数名 | 说明 |
|---|---|
| vpcChnNum | VPC通道资源池大小。默认值为DEFAULT_VPC_CHN_NUM = 48。取值范围为[1, 128]。 |
| jpegdChnNum | JPEGD通道资源池大小。默认值为DEFAULT_JPEGD_CHN_NUM = 24。取值范围为[1, 64]。 |
| pngdChnNum | PNGD通道资源池大小。默认值为DEFAULT_PNGD_CHN_NUM = 24。取值范围为[1, 64]。 |
| jpegeChnNum | JPEGE通道资源池大小。默认值为DEFAULT_JPEGE_CHN_NUM = 24。取值范围为[1, 48]。 |
AspectRatioPostImageInfo
继承了PostImageInfo类,并增加了图片缩放相关属性。
struct AspectRatioPostImageInfo : PostImageInfo {
enum ResizeType {
RESIZER_STRETCHING = 0,
RESIZER_TF_KEEP_ASPECT_RATIO,
RESIZER_MS_KEEP_ASPECT_RATIO,
RESIZER_ONLY_PADDING,
RESIZER_KEEP_ASPECT_RATIO_LONG,
RESIZER_KEEP_ASPECT_RATIO_SHORT,
RESIZER_RESCALE,
RESIZER_RESCALE_DOUBLE,
RESIZER_MS_YOLOV4
};
float keepAspectRatioScaling = 0;
ResizeType resizeType;
};
| 参数名 | 说明 |
|---|---|
| keepAspectRatioScaling | 图片缩放比例。 |
| resizeType | 图片缩放方式。 |
AttributeInfo
分类任务的分类信息。
class AttributeInfo {
public:
int attrId;
std::string attrName;
std::string attrValue;
float confidence;
};
| 参数名 | 说明 |
|---|---|
| attrId | 属性ID。 |
| attrName | 属性名。 |
| attrValue | 属性值。 |
| confidence | 属性置信度。 |
BaseTensor
定义一个张量数据的结构。
struct BaseTensor {
void* buf;
std::vector<int> shape;
size_t size;
}
| 参数名 | 说明 |
|---|---|
| buf | 张量的数据。 |
| shape | 张量的形状。 |
| size | 张量数据对应内存大小,单位为Byte。size大小应与实际内存大小一致,否则可能会导致程序出现coredump情况。 |
BlurConfig
用于配置腐蚀操作的结构体。
struct BlurConfig {
Size kernelSize = Size(3, 3);
MorphShape morphShape = MorphShape::MORPH_RECT;
std::pair<int, int> anchor = std::make_pair(-1, -1);
uint32_t iterations = 1;
BorderType borderType = BorderType::BORDER_REPLICATE;
std::vector<double> borderValue;
};
| 参数名 | 说明 |
|---|---|
| kernelSize | 卷积核尺寸,kernelSize的宽和高取值范围为[3,9],且卷积核宽高相同。默认值为3*3。 |
| morphShape | 卷积形状,当前仅支持MORPH_RECT。MORPH_RECT的介绍可参见MorphShape。 |
| anchor | 卷积核的锚点,默认值为(-1,-1),表示锚位于kernel中心位置,暂不支持配置。 |
| iterations | 腐蚀操作迭代次数,默认为1,取值范围为[1, 100]。 |
| borderType | 边界填充类型,当前仅支持BORDER_REPLICATE。BORDER_REPLICATE介绍可参见BorderType。 |
| borderValue | 边界填充值,存放颜色分量的值,取值范围为[0,255]。预埋参数,暂不支持配置。 |
BorderType
补边方式,用于图像处理“ImageProcessor”类的补边功能。
enum class BorderType {
BORDER_CONSTANT = 0,
BORDER_REPLICATE = 1,
BORDER_REFLECT = 2,
BORDER_REFLECT_101 = 3,
};
| 参数名 | 说明 |
|---|---|
| BORDER_CONSTANT | 添加有颜色的常数值边界。 |
| BORDER_REPLICATE | 重复最后一个元素。例如:aaaaaa |
| BORDER_REFLECT | 边界元素的镜像,镜像包括边界元素。例如:ba |
| BORDER_REFLECT_101 | 边界元素的镜像,镜像不包括边界元素。例如:cb |
ClassInfo
分类任务的分类信息。
class ClassInfo {
public:
int classId;
float confidence;
std::string className;
};
| 参数名 | 说明 |
|---|---|
| classId | 类别的编号。 |
| confidence | 类别的置信度。 |
| className | 类别名称。 |
CmpOp
张量比较类型。
enum class CmpOp {
CMP_EQ = 0,
CMP_NE,
CMP_LT,
CMP_GT,
CMP_LE,
CMP_GE
};
| 参数名 | 说明 |
|---|---|
| CMP_EQ | 相等操作,代表==。 |
| CMP_NE | 不相等操作,代表!=。 |
| CMP_LT | 小于操作,代表<。 |
| CMP_GT | 大于操作,代表>。 |
| CMP_LE | 小于等于操作,代表<=。 |
| CMP_GE | 大于等于操作,代表>=。 |
Color
色彩值,用于图像处理补边功能,描述三通道色彩的结构体。
struct Color {
Color()
: channel_zero(0), channel_one(0), channel_two(0) {};
Color(const uint32_t inputRed, const uint32_t inputGreen, const uint32_t inputBlue)
: channel_zero(inputRed), channel_one(inputGreen), channel_two(inputBlue) {};
uint32_t channel_zero;
uint32_t channel_one;
uint32_t channel_two;
};
| 参数名 | 说明 |
|---|---|
| channel_zero,inputRed | 0号通道取值,范围[0, 255]。例如:对于RGB_888格式图像,该通道为R;对于YUV格式图像,该通道为Y。 |
| channel_one,inputGreen | 1号通道取值,范围[0, 255]。例如:对于RGB_888格式图像,该通道为G;对于YUV格式图像,该通道为U。 |
| channel_two,inputBlue | 2号通道取值,范围[0, 255]。例如:对于RGB_888格式图像,该通道为B;对于YUV格式图像,该通道为V。 |
ConfigMode
LoadConfiguration所使用的枚举类型,具体请参见LoadConfiguration。
enum ConfigMode {
CONFIGJSON = 0, // 对应 JSON 文件。
CONFIGFILE, // 对应 Normal 文件
CONFIGPM, // 对应 Pm 文件
CONFIGCONTENT // 对应 JSON content
};
| 参数名 | 说明 |
|---|---|
| CONFIGJSON | 配置为JSON文件。 |
| CONFIGFILE | 配置为普通文件。 |
| CONFIGPM | 配置为PM文件。 |
| CONFIGCONTENT | 配置为JSON内容。 |
CoorDim
用于坐标的信息描述。
struct TextObjectPostProcessBase::CoorDim {
int i;
int j;
int k;
int index;
CoorDim(int i, int j, int k, int idx):i(i), j(j), k(k), index(idx){}
};
struct OcrPostProcessors::CoorDim {
int i;
int j;
CoorDim(int i, int j):i(i), j(j){}
};
| 参数名 | 说明 |
|---|---|
| i , j , k | 坐标分量值。 |
| index | 坐标索引。 |
CropResizePasteConfig
抠图坐标及贴图坐标。
struct CropResizePasteConfig {
// CROP CONFIG
uint32_t cropLeft;
uint32_t cropRight;
uint32_t cropTop;
uint32_t cropBottom;
// PASTE CONFIG
uint32_t pasteLeft;
uint32_t pasteRight;
uint32_t pasteTop;
uint32_t pasteBottom;
// RESIZE CONFIG
uint32_t interpolation;
};
| 参数名 | 说明 |
|---|---|
| cropLeft | 抠图坐标左边。 |
| cropRight | 抠图坐标右边。 |
| cropTop | 抠图坐标上边。 |
| cropBottom | 抠图坐标下边。 |
| pasteLeft | 贴图坐标左边。 |
| pasteRight | 贴图坐标右边。 |
| pasteTop | 贴图坐标上边。 |
| pasteBottom | 贴图坐标下边。 |
| interpolation | 指定缩放算子,取值范围: |
CropRoiBox
用于记录图像类任务中模型前处理中的感兴趣(Region of Interest,简称ROI)区域,提供给模型后处理的坐标还原使用。
class CropRoiBox {
public:
float x0;
float y0;
float x1;
float y1;
};
| 参数名 | 说明 |
|---|---|
| x0 | ROI框左上角横坐标。 |
| y0 | ROI框左上角纵坐标。 |
| x1 | ROI框右下角横坐标。 |
| y1 | ROI框右下角纵坐标。 |
CropRoiConfig
定义抠图的范围。
struct CropRoiConfig {
uint32_t x0;
uint32_t x1;
uint32_t y1;
uint32_t y0;
};
| 参数名 | 说明 |
|---|---|
| x0 | 左上角横坐标。 |
| x1 | 右下角横坐标。 |
| y1 | 右下角纵坐标。 |
| y0 | 左上角纵坐标。 |
CvtColorMode
定义色域转换的原始类型和目标类型。使用方式请参见CvtColor。
enum class CvtColorMode {
COLOR_YUVSP4202GRAY = 0,
COLOR_YVUSP4202GRAY = 1,
COLOR_YUVSP4202RGB = 2,
COLOR_YVUSP4202RGB = 3,
COLOR_YUVSP4202BGR = 4,
COLOR_YVUSP4202BGR = 5,
COLOR_RGB2GRAY = 6,
COLOR_BGR2GRAY = 7,
COLOR_BGR2RGB = 8,
COLOR_RGB2BGR = 9,
COLOR_RGB2RGBA = 10,
COLOR_RGBA2GRAY = 11,
COLOR_RGBA2RGB = 12,
COLOR_GRAY2RGB = 13,
COLOR_RGBA2mRGBA = 14,
COLOR_BGR2YUVSP420 = 15,
COLOR_RGB2YUVSP420 = 16,
COLOR_RGB2YVUSP420 = 17,
COLOR_BGR2YVUSP420 = 18
};
无
DataFormat
数据排布格式描述。
enum DataFormat {
NCHW = 0,
NHWC = 1
};
| 参数名 | 说明 |
|---|---|
| NCHW | 数据按NCHW排布。 |
| NHWC | 数据按NHWC排布。 |
DecodeH26xInfo
解码H.264或H.265的相关信息结构体。
struct DecodeH26xInfo {
DecodeH26xInfo(uint32_t i, uint32_t i1, DecodeCallBackFunction pFunction, void *pVoid): channelId(i), frameId(i1), callbackFunc(pFunction), userData(pVoid) {}
uint32_t channelId = 0;
uint32_t frameId = 0;
DecodeCallBackFunction callbackFunc = nullptr;
void* userData = nullptr;
bool userMalloc = false;
};
| 参数名 | 说明 |
|---|---|
| channelId | 视频路ID。 |
| frameId | 帧ID。 |
| callbackFunc | Callback函数。 |
| userData | 用户自定义数据。 |
| userMalloc | 数据内存是否由用户申请。 |
DetectBox
定义获取推理结果使用的结构体。
struct DetectBox {
float prob;
int classID;
float x;
float y;
float width;
float height;
std::string className;
void *maskPtr;
};
| 参数名 | 说明 |
|---|---|
| prob | 类别的置信度。 |
| classID | 类别的编号。 |
| x | 目标的横坐标。 |
| y | 目标的纵坐标。 |
| width | 目标的宽度,从横坐标x处开始计算。 |
| height | 目标的高度,从纵坐标y处开始计算。 |
| className | 类别名。 |
| maskPtr | 实例分割需要使用的掩码。 |
DeviceContext
设备内容设置。
struct DeviceContext {
enum DeviceStatus {
IDLE = 0, // idle status
USING // running status
} devStatus = IDLE;
int32_t devId = DEFAULT_VALUE; // DEFAULT_VALUE = 0
};
| 参数名 | 说明 |
|---|---|
| devStatus | 设备状态,默认为IDLE闲置。 |
| devId | 设备ID。 |
Dim
补边值,用于图像处理“ImageProcessor”的补边功能,描述左、右、上、下四个方向补边的像素个数。
struct Dim {
Dim()
: left(0), right(0), top(0), bottom(0) {};
Dim(const uint32_t inputDim)
: left(inputDim), right(inputDim), top(inputDim), bottom(inputDim) {};
Dim(const uint32_t inputLeft, const uint32_t inputRight, const uint32_t inputTop, const uint32_t inputBottom)
: left(inputLeft), right(inputRight), top(inputTop), bottom(inputBottom) {};
uint32_t left;
uint32_t right;
uint32_t top;
uint32_t bottom;
};
| 参数名 | 说明 |
|---|---|
| left,inputLeft | 左侧补边像素数量。 |
| right,inputRight | 右侧补边像素数量。 |
| top,inputTop | 上方补边像素数量。 |
| bottom,inputBottom | 下方补边像素数量。 |
| inputDim | 左、右、上、下补边像素数量。仅在使用Dim(const uint32_t inputDim)构造函数时,将左、右、上、下补边像素数量设为与inputDim相同的值。 |
DvppDataInfo
DVPP实体数据定义。
struct DvppDataInfo {
uint32_t width = 0;
uint32_t height = 0;
uint32_t widthStride = 0;
uint32_t heightStride = 0;
MxbasePixelFormat format = MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_420;
uint32_t frameId = 0;
uint32_t channelId = 0;
uint32_t dataSize = 0;
uint32_t outDataSize = 0;
uint32_t dataType = 0;
uint8_t* data = nullptr;
uint8_t* outData = nullptr;
uint32_t resizeWidth = 0;
uint32_t resizeHeight = 0;
std::string device = "host:0";
uint32_t deviceId = 0;
void (*destory)(void *) = nullptr;
};
| 参数名 | 说明 |
|---|---|
| width | 原始图像宽。 |
| height | 原始图像高。 |
| widthStride | 原始图像对齐后的宽。 |
| heightStride | 原始图像对齐后的高。 |
| format | 图像格式,默认值为MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_420。 DVPP图像格式定义具体请参见MxbasePixelFormat。 |
| frameId | 图像帧编号。 |
| channelId | 图像通道数编号。 |
| dataSize | 图像数据大小,单位为Byte。 dataSize大小需要和图像实际大小一致,否则可能会导致程序出现coredump情况。 |
| outDataSize | 输出图像数据大小,单位为Byte。 outDataSize大小需要和输出图像大小一致,否则可能会导致程序出现coredump情况。 |
| dataType | 图像的数据类型。 |
| data | 图像数据。 |
| outData | 预申请内存地址,主要用于存放视频解码后的图像数据。 |
| resizeWidth | 缩放宽,主要用于视频解码时的缩放操作。 目前仅支持Atlas 推理系列产品。 默认值为0,即不做缩放。取值范围:[10, 4096]。 |
| resizeHeight | 缩放高,主要用于视频解码时的缩放操作。 目前仅支持Atlas 推理系列产品。 默认值为0,即不做缩放。取值范围:[6, 4096]。 |
| device | 设备号。 |
| deviceId | 设备编号。 |
| destory | 回调函数,用于释放该DVPP数据。 |
DvppImageInfo
DVPP图像信息描述。
struct DvppImageInfo {
enum PictureType {
PIXEL_FORMAT_ANY = 0,
PIXEL_FORMAT_JPEG = 1,
PIXEL_FORMAT_PNG = 2
};
const void* data;
uint32_t size;
PictureType pictureType;
};
| 参数名 | 说明 |
|---|---|
| data | 图片数据的内存地址。 |
| size | 图片大小,单位为Byte。size大小需要和实际图片大小一致,否则可能会导致程序出现coredump情况。 |
| pictureType | 图片类型,为下列三者之一: |
DvppImageOutput
DVPP图像输出定义。
struct DvppImageOutput {
uint32_t width;
uint32_t height;
int32_t components;
uint32_t widthStride;
uint32_t heightStride;
uint32_t outImgDatasize;
}
| 参数名 | 说明 |
|---|---|
| width | 输出图像的宽度。 |
| height | 输出图像的高度。 |
| components | 输出图像的通道个数。 |
| widthStride | 输出对齐后的图像宽。 |
| heightStride | 输出对齐后的图像高。 |
| outImgDatasize | 输出图像的内存大小。 |
DynamicInfo
模型支持的类型。
struct DynamicInfo {
DynamicType dynamicType = DYNAMIC_BATCH;
size_t batchSize;
ImageSize imageSize = {};
std::vector<std::vector<uint32_t>> shape = {};
};
| 参数名 | 说明 |
|---|---|
| dynamicType | 动态类型描述。 |
| batchSize | batch大小。 |
| imageSize | 图像大小。 |
| shape | 动态Batch的形状。 |
DynamicType
动态类型描述。
enum DynamicType {
STATIC_BATCH = 0,
DYNAMIC_BATCH = 1,
DYNAMIC_HW = 2,
DYNAMIC_DIMS = 3,
DYNAMIC_SHAPE = 4
};
| 参数名 | 说明 |
|---|---|
| STATIC_BATCH | 静态batch |
| DYNAMIC_BATCH | 动态batch |
| DYNAMIC_HW | 动态分辨率 |
| DYNAMIC_DIMS | 动态维度 |
| DYNAMIC_SHAPE | 动态shape |
EncodeH26xInfo
视频编码回调传入数据。
struct EncodeH26xInfo {
std::function<void(std::shared_ptr<uint8_t>, uint32_t)> func = {};
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| func | 输入 | 用于视频编码回调处理的函数对象。 函数对象的第一个参数std::shared_ptr<uint8_t>为输出的视频流数据(Host侧的数据),第二个参数uint32_t为视频流数据大小。 |
HungarianHandle
匈牙利算法,一种在多项式时间内求解任务分配问题的组合优化算法。
struct HungarianHandle {
int rows;
int cols;
int max;
int* resX;
int* resY;
bool transpose;
std::shared_ptr<int> adjMat;
std::shared_ptr<int> xMatch;
std::shared_ptr<int> yMatch;
std::shared_ptr<int> xValue;
std::shared_ptr<int> yValue;
std::shared_ptr<int> slack;
std::shared_ptr<int> xVisit;
std::shared_ptr<int> yVisit;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| rows | 输入 | 匹配矩阵行。 |
| cols | 输入 | 匹配矩阵列。 |
| max | 输出 | 匹配矩阵行与列最大值。 |
| resX | 输出 | 点集x匹配结果。 |
| resY | 输出 | 点集y匹配结果。 |
| transpose | 输出 | 矩阵转置标识符。 |
| adjMat | 输入 | 权值矩阵。 |
| xMatch | 输出 | 点集x匹配值。 |
| yMatch | 输出 | 点集y匹配值。 |
| xValue | 输出 | 点集x顶标值。 |
| yValue | 输出 | 点集y值,默认为0。 |
| slack | 输出 | slack数组。 |
| xVisit | 输出 | 点集x匹配标识符。 |
| yVisit | 输出 | 点集y匹配标识符。 |
ImageConstrainInfo
图片对齐相关参数。
struct ImageConstrainInfo {
uint32_t minWidthStride;
uint32_t maxWidthStride;
uint32_t minHeightStride;
uint32_t maxHeightStride;
uint32_t widthStrideAlign;
uint32_t heightStrideAlign;
uint32_t widthAlign;
uint32_t heightAlign;
float ratio;
uint32_t pixelBit;
};
| 参数名 | 说明 |
|---|---|
| minWidthStride | 宽对齐最小值。 |
| maxWidthStride | 宽对齐最大值。 |
| minHeightStride | 高对齐最小值。 |
| maxHeightStride | 高对齐最大值。 |
| widthStrideAlign | 宽对齐的对齐方式。 |
| heightStrideAlign | 高对齐的对齐方式。 |
| widthAlign | 宽对齐方式。 |
| heightAlign | 高对齐方式。 |
| ratio | 比例。 |
| pixelBit | 像素点数据。 |
ImageFormat
图像格式,用于描述解码后Image类的数据格式。
enum class ImageFormat {
YUV_400 = 0,
YUV_SP_420 = 1,
YVU_SP_420 = 2,
YUV_SP_422 = 3,
YVU_SP_422 = 4,
YUV_SP_444 = 5,
YVU_SP_444 = 6,
YUYV_PACKED_422 = 7,
UYVY_PACKED_422 = 8,
YVYU_PACKED_422 = 9,
VYUY_PACKED_422 = 10,
YUV_PACKED_444 = 11,
RGB_888 = 12,
BGR_888 = 13,
ARGB_8888 = 14,
ABGR_8888 = 15,
RGBA_8888 = 16,
BGRA_8888 = 17,
};
| 参数名 | 说明 |
|---|---|
| YUV_400 | YUV_400 的图像格式。 |
| YUV_SP_420 | YUV_SP_420 的图像格式。 |
| YVU_SP_420 | YVU_SP_420 的图像格式。 |
| YUV_SP_422 | YUV_SP_422 的图像格式。 |
| YVU_SP_422 | YVU_SP_422 的图像格式。 |
| YUV_SP_444 | YUV_SP_444 的图像格式。 |
| YVU_SP_444 | YVU_SP_444 的图像格式。 |
| YUYV_PACKED_422 | YUYV_PACKED_422 的图像格式。 |
| UYVY_PACKED_422 | UYVY_PACKED_422 的图像格式。 |
| YVYU_PACKED_422 | YVYU_PACKED_422 的图像格式。 |
| VYUY_PACKED_422 | VYUY_PACKED_422 的图像格式。 |
| YUV_PACKED_444 | YUV_PACKED_444 的图像格式。 |
| RGB_888 | RGB_888 的图像格式。 |
| BGR_888 | BGR_888 的图像格式。 |
| ARGB_8888 | ARGB_8888 的图像格式。 |
| ABGR_8888 | ABGR_8888 的图像格式。 |
| RGBA_8888 | RGBA_8888 的图像格式。 |
| BGRA_8888 | BGRA_8888 的图像格式。 |
ImageFormatString
用于ImageFormat枚举值与其相应字符串的映射。
static const std::map<ImageFormat, std::string> IMAGE_FORMAT_STRING = {
{ImageFormat::YUV_400, "YUV_400"},
{ImageFormat::YUV_SP_420, "YUV_SP_420"},
{ImageFormat::YVU_SP_420, "YVU_SP_420"},
{ImageFormat::YUV_SP_422, "YUV_SP_422"},
{ImageFormat::YVU_SP_422, "YVU_SP_422"},
{ImageFormat::YUV_SP_444, "YUV_SP_444"},
{ImageFormat::YVU_SP_444, "YVU_SP_444"},
{ImageFormat::YUYV_PACKED_422, "YUYV_PACKED_422"},
{ImageFormat::UYVY_PACKED_422, "UYVY_PACKED_422"},
{ImageFormat::YVYU_PACKED_422, "YVYU_PACKED_422"},
{ImageFormat::VYUY_PACKED_422, "VYUY_PACKED_422"},
{ImageFormat::YUV_PACKED_444, "YUV_PACKED_444"},
{ImageFormat::RGB_888, "RGB_888"},
{ImageFormat::BGR_888, "BGR_888"},
{ImageFormat::ARGB_8888, "ARGB_8888"},
{ImageFormat::ABGR_8888, "ABGR_8888"},
{ImageFormat::RGBA_8888, "RGBA_8888"},
{ImageFormat::BGRA_8888, "BGRA_8888"},
};
| 参数名 | 说明 |
|---|---|
| ImageFormat::YUV_400, "YUV_400" | YUV_400的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YUV_SP_420, "YUV_SP_420" | YUV_SP_420的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YVU_SP_420, "YVU_SP_420" | YVU_SP_420的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YUV_SP_422, "YUV_SP_422" | YUV_SP_422的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YVU_SP_422, "YVU_SP_422" | YVU_SP_422的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YUV_SP_444, "YUV_SP_444" | YUV_SP_444的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YVU_SP_444, "YVU_SP_444" | YVU_SP_444的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YUYV_PACKED_422, "YUYV_PACKED_422" | YUYV_PACKED_422的图像格式枚举值与其字符串的映射。 |
| ImageFormat::UYVY_PACKED_422, "UYVY_PACKED_422" | UYVY_PACKED_422的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YVYU_PACKED_422, "YVYU_PACKED_422" | YVYU_PACKED_422的图像格式枚举值与其字符串的映射。 |
| ImageFormat::VYUY_PACKED_422, "VYUY_PACKED_422" | VYUY_PACKED_422的图像格式枚举值与其字符串的映射。 |
| ImageFormat::YUV_PACKED_444, "YUV_PACKED_444" | YUV_PACKED_444的图像格式枚举值与其字符串的映射。 |
| ImageFormat::RGB_888, "RGB_888" | RGB_888的图像格式枚举值与其字符串的映射。 |
| ImageFormat::BGR_888, "BGR_888" | BGR_888的图像格式枚举值与其字符串的映射。 |
| ImageFormat::ARGB_8888, "ARGB_8888" | ARGB_8888的图像格式枚举值与其字符串的映射。 |
| ImageFormat::ABGR_8888, "ABGR_8888" | ABGR_8888的图像格式枚举值与其字符串的映射。 |
| ImageFormat::RGBA_8888, "RGBA_8888" | RGBA_8888的图像格式枚举值与其字符串的映射。 |
| ImageFormat::BGRA_8888, "BGRA_8888" | BGRA_8888的图像格式枚举值与其字符串的映射。 |
ImagePreProcessInfo
用于记录图像类任务中模型前处理中的感兴趣(Region of Interest)区域,提供给模型后处理的坐标还原使用。
class ImagePreProcessInfo {
public:
ImagePreProcessInfo()
{
imageWidth = 0;
imageHeight = 0;
originalWidth = 0;
originalHeight = 0;
xRatio = 1.0;
xBias = 0.0;
yRatio = 1.0;
yBias = 0.0;
x0Valid = 0.0;
y0Valid = 0.0;
x1Valid = 0.0;
y1Valid = 0.0;
}
ImagePreProcessInfo(uint32_t width, uint32_t height)
{
imageWidth = width;
imageHeight = height;
originalWidth = width;
originalHeight = height;
xRatio = 1.0;
xBias = 0.0;
yRatio = 1.0;
yBias = 0.0;
x0Valid = 0.0;
y0Valid = 0.0;
x1Valid = width;
y1Valid = height;
}
ImagePreProcessInfo(uint32_t widthResize, uint32_t heightResize, uint32_t widthOriginal, uint32_t heightOriginal)
{
if (!((widthOriginal == 0) || (heightOriginal == 0))) {
xRatio = widthResize / (float)widthOriginal;
yRatio = heightResize / (float)heightOriginal;
} else {
xRatio = 1.0;
yRatio = 1.0;
}
imageWidth = widthResize;
imageHeight = heightResize;
originalWidth = widthOriginal;
originalHeight = heightOriginal;
xBias = 0.0;
yBias = 0.0;
x0Valid = 0.0;
y0Valid = 0.0;
x1Valid = widthResize;
y1Valid = heightResize;
}
~ImagePreProcessInfo() {}
public:
// image
uint32_t imageWidth = 0; // memoryWidth
uint32_t imageHeight = 0; // memoryHeight
uint32_t originalWidth = 0; // originalWidth
uint32_t originalHeight = 0; // originalHeight
// mapping parameters
float xRatio = 1.0;
float xBias = 0.0;
float yRatio = 1.0;
float yBias = 0.0;
// valid region
float x0Valid = 0.0;
float y0Valid = 0.0;
float x1Valid = 0.0;
float y1Valid = 0.0;
};
| 参数名 | 说明 |
|---|---|
| imageWidth | 图像宽。 |
| imageHeight | 图像高。 |
| originalWidth | 原图宽。 |
| originalHeight | 原图高。 |
| xRatio | x方向伸缩比。 |
| xBias | x方向偏置。 |
| yRatio | y方向伸缩比。 |
| yBias | y方向偏置。 |
| x0Valid | 图像中有效区域的左上角横坐标。 |
| y0Valid | 图像中有效区域的左上角纵坐标。 |
| x1Valid | 图像中有效区域的右下角横坐标。 |
| y1Valid | 图像中有效区域的右下角纵坐标。 |
ImageSize
图片尺寸信息。
namespace MxBase{
struct ImageSize {
size_t height;
size_t width;
ImageSize() = default;
ImageSize(size_t height, size_t width)
{
this->width = width;
this->height = height;
}
}
}
namespace MxTools{
struct ImageSize {
size_t height;
size_t width;
size_t area;
ImageSize(int height, int width)
{
this->width = static_cast<size_t>(width);
this->height = static_cast<size_t>(height);
this->area = static_cast<size_t>(height * width);
}
}
}
| 参数名 | 说明 |
|---|---|
| height | 图片的高。 |
| width | 图片的宽。 |
| area | 图片面积。 |
Interpolation
缩放方式,用于Resize类的缩放接口。
enum class Interpolation {
HUAWEI_HIGH_ORDER_FILTER = 0,
BILINEAR_SIMILAR_OPENCV = 1,
NEAREST_NEIGHBOR_OPENCV = 2,
BILINEAR_SIMILAR_TENSORFLOW = 3,
NEAREST_NEIGHBOR_TENSORFLOW = 4,
};
| 参数名 | 说明 |
|---|---|
| HUAWEI_HIGH_ORDER_FILTER | 华为自研的高阶滤波算法(在Atlas 推理系列产品上,此选项等同于BILINEAR_SIMILAR_OPENCV)。 |
| BILINEAR_SIMILAR_OPENCV | 业界通用的Bilinear算法(与OpenCV算法的计算过程类似)。 |
| NEAREST_NEIGHBOR_OPENCV | 业界通用的Nearest Neighbor算法(与OpenCV算法的计算过程类似)。 |
| BILINEAR_SIMILAR_TENSORFLOW | 业界通用的Bilinear算法(与TensorFlow算法的计算过程类似,在Atlas 推理系列产品上,不支持此选项)。 |
| NEAREST_NEIGHBOR_TENSORFLOW | 业界通用的Nearest Neighbor算法(与TensorFlow算法的计算过程类似,在Atlas 推理系列产品上,不支持此选项)。 |
IOUMethod
IOU计算方式。
enum IOUMethod {
MAX = 0,
MIN = 1,
UNION = 2,
DIOU = 3
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| MAX | 输入 | 重叠区域除以两者中面积大的。 |
| MIN | 输入 | 重叠区域除以两者中面积小的。 |
| UNION | 输入 | 重叠区域除以两者面积并集。 |
| DIOU | 输入 | 重叠区域除以两者面积并集减去距离的交并比。 |
JpegEncodeChnConfig
编码JPEG图像通道结构体。
struct JpegEncodeChnConfig {
uint32_t maxPicWidth = MAX_HIMPI_VENC_PIC_WIDTH;
uint32_t maxPicHeight = MAX_HIMPI_VENC_PIC_HEIGHT;
};
| 参数名 | 说明 |
|---|---|
| maxPicWidth | 图片编码的通道宽度。 |
| maxPicHeight | 图片编码的通道高度。 |
JpegDecodeChnConfig
解码JPEG图像通道结构体。
struct JpegDecodeChnConfig {};
KeyPointDetectionInfo
关键点检测信息。
class KeyPointDetectionInfo {
public:
std::map<int, std::vector<float>> keyPointMap;
std::map<int, float> scoreMap;
float score;
};
| 参数名 | 说明 |
|---|---|
| keyPointMap | 每个关键点的坐标等信息。 |
| scoreMap | 每个关键点对应的置信度。 |
| score | 整体置信度。 |
KeyPointInfo
面部关键点(左/右眼、鼻尖、左/右嘴角)坐标信息。
struct KeyPointInfo {
float kPBefore[LANDMARK_LEN]; // LANDMARK_LEN = 10
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| kPBefore | 输入 | 关键点坐标数组。 |
LogLevels
对内使用枚举类,外部不可用。
enum LogLevels {
LOG_LEVEL_DEBUG = -1,
LOG_LEVEL_INFO = 0,
LOG_LEVEL_WARN = 1,
LOG_LEVEL_ERROR = 2,
LOG_LEVEL_FATAL = 3,
LOG_LEVEL_NONE
};
MakeBorderConfig
用于在图像处理补边功能中定义具体的补边配置。可设置图像补边的左、右、上、下像素个数、补边颜色常数和补边类型。
struct MakeBorderConfig {
enum BorderType {
BORDER_CONSTANT = 0,
BORDER_REPLICATE,
BORDER_REFLECT,
BORDER_REFLECT_101
};
uint32_t left;
uint32_t right;
uint32_t top;
uint32_t bottom;
uint32_t channel_zero;
uint32_t channel_one;
uint32_t channel_two;
BorderType borderType;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| left | 输入 | 左侧补边像素数量。 |
| right | 输入 | 右侧补边像素数量。 |
| top | 输入 | 上方补边像素数量。 |
| bottom | 输入 | 下方补边像素数量。 |
| channel_zero | 输入 | 0号通道取值,范围[0, 255]。 |
| channel_one | 输入 | 1号通道取值,范围[0, 255]。 |
| channel_two | 输入 | 2号通道取值,范围[0, 255]。 |
| borderType | 输入 | 补边类型。 |
Note
“channel_zero”、“channel_one”、“channel_two”,依次对应各图像通道,例如:使用RGB时,“channel_zero”对应R,“channel_one”对应G通道,“channel_two”对应B通道。
MemoryData
内存管理结构体。
struct MemoryData {
enum MemoryType {
MEMORY_HOST = 0,
MEMORY_DEVICE,
MEMORY_DVPP,
MEMORY_HOST_MALLOC,
MEMORY_HOST_NEW
};
MemoryData() = default;
MemoryData(size_t size, MemoryType type = MEMORY_HOST, int32_t deviceId = 0)
: size(size), deviceId(deviceId), type(type) {}
MemoryData(void* ptrData, size_t size, MemoryType type = MEMORY_HOST, int32_t deviceId = 0)
: ptrData(ptrData), size(size), deviceId(deviceId), type(type) {}
void* ptrData = nullptr;
size_t size;
int32_t deviceId;
MemoryType type;
APP_ERROR (*free)(void*) = nullptr;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| ptrData | 输出 | 存放数据的内存地址。 |
| size | 输入 | 内存大小,单位为Byte。size值应与实际内存大小一致,否则可能导致出现coredump情况。 |
| deviceId | 输入 | 设备编号。 |
| type | 输入 | 申请的内存类型: |
| free | 输出 | ptrData指针释放函数。 |
| MemoryData(size_t size, MemoryType type = MEMORY_HOST, size_t deviceId = 0) | - | 定义结构体的形式一。 |
| MemoryData(void* ptrData, size_t size, MemoryType type = MEMORY_HOST, size_t deviceId = 0) | - | 定义结构体的形式二。 |
ModelDataset
模型数据集定义。
struct ModelDataset {
void* mdlDataPtr;
size_t dynamicBatchSize;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mdlDataPtr | 输入 | 模型数据集数据的内存地址。 |
| dynamicBatchSize | 输入 | 模型推理时的批量大小。 |
ModelDesc
模型描述信息定义。
struct ModelDesc {
std::vector<TensorDesc> inputTensors;
std::vector<TensorDesc> outputTensors;
std::vector<size_t> batchSizes;
bool dynamicBatch;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensors | 输出 | 输入张量描述。 |
| outputTensors | 输出 | 输出张量描述。 |
| batchSizes | 输出 | batch大小。 |
| dynamicBatch | 输出 | 是否为动态Batch。 |
ModelLoadOptV2
支持多种推理模型输入方式,用户可通过该数据结构,选择其中一种方式输入推理模型。
[!NOTICE] 请根据实际情况选择对应配置,如配置与实际输入存在差异,会在Model处抛出异常,如未对该异常进行catch操作,则程序会发生core dumped。
struct ModelLoadOptV2 {
enum ModelLoadType {
LOAD_MODEL_FROM_FILE = 1,
LOAD_MODEL_FROM_FILE_WITH_MEM,
LOAD_MODEL_FROM_MEM,
LOAD_MODEL_FROM_MEM_WITH_MEM
};
enum ModelType {
MODEL_TYPE_OM = 0,
MODEL_TYPE_MINDIR
};
ModelType modelType = MODEL_TYPE_OM;
ModelLoadType loadType = LOAD_MODEL_FROM_FILE;
std::string modelPath = "";
void* modelPtr = nullptr;
void* modelWorkPtr = nullptr;
void* modelWeightPtr = nullptr;
size_t modelSize = 0;
size_t workSize = 0;
size_t weightSize = 0;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| modelType | 输入 | 推理模型类型,支持情况参见如下。默认为MODEL_TYPE_OM。 |
| loadType | 输入 | 推理模型输入类型,可通过以下参数选定输入方式。默认为LOAD_MODEL_FROM_FILE。 |
| modelPath | 输入 | 推理模型文件路径,仅在以下模式生效。默认为"",最大只支持至4GB大小的模型且建议模型属主为当前用户,模型文件的权限小于或等于640。 |
| modelPtr | 输入 | 推理模型所在内存地址指针,仅在以下模式生效。默认为nullptr,用户需根据实际情况输入内存地址。 |
| modelWorkPtr | 输入 | 推理模型所在工作内存地址指针,仅在以下模式生效。默认为nullptr,表示由系统管理内存。 |
| modelWeightPtr | 输入 | 推理模型权值内存地址指针,仅在以下模式生效。默认为nullptr,表示由系统管理内存。LOAD_MODEL_FROM_FILE_WITH_MEMLOAD_MODEL_FROM_MEM_WITH_MEM |
| modelSize | 输入 | 推理模型数据长度,单位Byte,仅在以下模式生效。默认为0,最大只支持至4GB大小的模型。 |
| workSize | 输入 | 推理模型所在工作内存大小,单位Byte。默认为0,当modelWorkPtr为nullptr时该选项无效。 |
| weightSize | 输入 | 推理模型权值内存大小,单位Byte。默认为0,当modelWeightPtr为nullptr时该选项无效。 |
MorphShape
用于描述腐蚀和形状的枚举类型。
enum class MorphShape {
MORPH_RECT =0,
MORPH_CROSS = 1,
MORPH_ELLIPSE = 2,
MORPH_MAX = 100,
};
| 参数名 | 说明 |
|---|---|
| MORPH_RECT | 矩形。 |
| MORPH_CROSS | 交叉形。 |
| MORPH_ELLIPSE | 椭圆形。 |
| MORPH_MAX | 预埋参数。 |
MxbaseDvppChannelMode
DvppWrapper初始化配置。
enum MxbaseDvppChannelMode {
MXBASE_DVPP_CHNMODE_DEFAULT = 0, // default mode, contain VPC, JPEGD and JPEGE mode
MXBASE_DVPP_CHNMODE_VPC = 1,
MXBASE_DVPP_CHNMODE_JPEGD = 2,
MXBASE_DVPP_CHNMODE_JPEGE = 3,
MXBASE_DVPP_CHNMODE_PNGD = 4,
};
| 参数名 | 说明 |
|---|---|
| MXBASE_DVPP_CHNMODE_DEFAULT | 默认配置。(Atlas 推理系列产品,当前版本不支持。) |
| MXBASE_DVPP_CHNMODE_VPC | VPC图像处理。 |
| MXBASE_DVPP_CHNMODE_JPEGD | JPEG图像解码。 |
| MXBASE_DVPP_CHNMODE_JPEGE | JPEG图像编码。 |
| MXBASE_DVPP_CHNMODE_PNGD | PNG解码。 |
MxbasePixelFormat
描述图片格式。
enum MxbasePixelFormat {
MXBASE_PIXEL_FORMAT_YUV_400 = 0, // 0
MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, // 1
MXBASE_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, // 2
MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3, // 3
MXBASE_PIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4, // 4
MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_444 = 5, // 5
MXBASE_PIXEL_FORMAT_YVU_SEMIPLANAR_444 = 6, // 6
MXBASE_PIXEL_FORMAT_YUYV_PACKED_422 = 7, // 7
MXBASE_PIXEL_FORMAT_UYVY_PACKED_422 = 8, // 8
MXBASE_PIXEL_FORMAT_YVYU_PACKED_422 = 9, // 9
MXBASE_PIXEL_FORMAT_VYUY_PACKED_422 = 10, // 10
MXBASE_PIXEL_FORMAT_YUV_PACKED_444 = 11, // 11
MXBASE_PIXEL_FORMAT_RGB_888 = 12, // 12
MXBASE_PIXEL_FORMAT_BGR_888 = 13, // 13
MXBASE_PIXEL_FORMAT_ARGB_8888 = 14, // 14
MXBASE_PIXEL_FORMAT_ABGR_8888 = 15, // 15
MXBASE_PIXEL_FORMAT_RGBA_8888 = 16, // 16
MXBASE_PIXEL_FORMAT_BGRA_8888 = 17, // 17
MXBASE_PIXEL_FORMAT_ANY = 100,
MXBASE_PIXEL_FORMAT_JPEG = 101,
MXBASE_PIXEL_FORMAT_PNG = 102,
MXBASE_PIXEL_FORMAT_BOTTOM = 103,
};
| 参数名 | 说明 |
|---|---|
| MXBASE_PIXEL_FORMAT_YUV_400 | YUV_400的图像格式。 |
| MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_420 | YUV_SP_420的图像格式。 |
| MXBASE_PIXEL_FORMAT_YVU_SEMIPLANAR_420 | YVU_SP_420的图像格式。 |
| MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_422 | YUV_SP_422的图像格式。 |
| MXBASE_PIXEL_FORMAT_YVU_SEMIPLANAR_422 | YVU_SP_422的图像格式。 |
| MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_444 | YUV_SP_444的图像格式。 |
| MXBASE_PIXEL_FORMAT_YVU_SEMIPLANAR_444 | YVU_SP_444的图像格式。 |
| MXBASE_PIXEL_FORMAT_YUYV_PACKED_422 | YUYV_PACKED_422的图像格式。 |
| MXBASE_PIXEL_FORMAT_UYVY_PACKED_422 | UYVY_PACKED_422的图像格式。 |
| MXBASE_PIXEL_FORMAT_YVYU_PACKED_422 | YVYU_PACKED_422的图像格式。 |
| MXBASE_PIXEL_FORMAT_VYUY_PACKED_422 | VYUY_PACKED_422的图像格式。 |
| MXBASE_PIXEL_FORMAT_YUV_PACKED_444 | YUV_PACKED_444的图像格式。 |
| MXBASE_PIXEL_FORMAT_RGB_888 | RGB_888的图像格式。 |
| MXBASE_PIXEL_FORMAT_BGR_888 | BGR_888的图像格式。 |
| MXBASE_PIXEL_FORMAT_ARGB_8888 | ARGB_8888的图像格式。 |
| MXBASE_PIXEL_FORMAT_ABGR_8888 | ABGR_8888的图像格式。 |
| MXBASE_PIXEL_FORMAT_RGBA_8888 | RGBA_8888的图像格式。 |
| MXBASE_PIXEL_FORMAT_BGRA_8888 | BGRA_8888的图像格式。 |
| MXBASE_PIXEL_FORMAT_ANY | 任意的图像格式。 |
| MXBASE_PIXEL_FORMAT_JPEG | JPEG/JPG的图像格式。 |
| MXBASE_PIXEL_FORMAT_PNG | PNG的图像格式。 |
| MXBASE_PIXEL_FORMAT_BOTTOM | 未定义型的图像格式。 |
MxbaseStreamFormat
获取视频编码处理通道的描述信息:视频编码协议。
enum MxbaseStreamFormat {
MXBASE_STREAM_FORMAT_H265_MAIN_LEVEL = 0,
MXBASE_STREAM_FORMAT_H264_BASELINE_LEVEL = 1,
MXBASE_STREAM_FORMAT_H264_MAIN_LEVEL = 2,
MXBASE_STREAM_FORMAT_H264_HIGH_LEVEL = 3,
};
| 参数名 | 说明 |
|---|---|
| MXBASE_STREAM_FORMAT_H265_MAIN_LEVEL | H.265主流画质。 |
| MXBASE_STREAM_FORMAT_H264_BASELINE_LEVEL | H.264基本画质。 |
| MXBASE_STREAM_FORMAT_H264_MAIN_LEVEL | H.264主流画质。 |
| MXBASE_STREAM_FORMAT_H264_HIGH_LEVEL | H.264高级画质。 |
MxMemMallocPolicy
DeviceMallocFuncHookReg使用的枚举类。
typedef enum MxMemMallocPolicy {
MX_MEM_MALLOC_HUGE_FIRST,
MX_MEM_MALLOC_HUGE_ONLY,
MX_MEM_MALLOC_NORMAL_ONLY,
MX_MEM_MALLOC_HUGE_FIRST_P2P,
MX_MEM_MALLOC_HUGE_ONLY_P2P,
MX_MEM_MALLOC_NORMAL_ONLY_P2P,
MX_MEM_TYPE_LOW_BAND_WIDTH = 0x0100,
MX_MEM_TYPE_HIGH_BAND_WIDTH = 0x1000,
} MxMemMallocPolicy;
| 参数名 | 说明 |
|---|---|
| MX_MEM_MALLOC_HUGE_FIRST | 当申请的内存小于等于1M时,即使使用该内存分配规则,也是申请普通页的内存。当申请的内存大于1M时,优先申请大页内存,如果大页内存不够,则使用普通页的内存。 |
| MX_MEM_MALLOC_HUGE_ONLY | 仅申请大页,如果大页内存不够,则返回错误。 |
| MX_MEM_MALLOC_NORMAL_ONLY | 仅申请普通页,如果普通页内存不够,则返回错误。 |
| MX_MEM_MALLOC_HUGE_FIRST_P2P | 仅Device之间内存复制场景下申请内存时使用该选项,表示优先申请大页内存,如果大页内存不够,则使用普通页的内存。 |
| MX_MEM_MALLOC_HUGE_ONLY_P2P | 仅Device之间内存复制场景下申请内存时使用该选项,仅申请大页内存,如果大页内存不够,则返回错误。 |
| MX_MEM_MALLOC_NORMAL_ONLY_P2P | 仅Device之间内存复制场景下申请内存时使用该选项,仅申请普通页的内存,如果普通页内存不够,则返回错误。 |
| MX_MEM_TYPE_LOW_BAND_WIDTH = 0x0100 | 从带宽低的物理内存上申请内存。设置该选项无效,系统默认会根据硬件支持的内存类型选择。 |
| MX_MEM_TYPE_HIGH_BAND_WIDTH = 0x1000 | 从带宽高的物理内存上申请内存。设置该选项无效,系统默认会根据硬件支持的内存类型选择。 |
ObjectInfo
目标检测类任务的目标框信息。
class SDK_AVAILABLE_FOR_OUT ObjectInfo {
public:
ObjectInfo() = default;
ObjectInfo(float x0_, float y0_, float x1_, float y1_, float confidence_, float classId_, std::string className_,
std::vector<std::vector<uint8_t>> mask_) {
x0 = x0_;
y0 = y0_;
x1 = x1_;
y1 = y1_;
confidence = confidence_;
classId = classId_;
className = className_;
mask = mask_;
}
public:
float x0 = 0;
float y0 = 0;
float x1 = 0;
float y1 = 0;
float confidence = 0;
float classId = 0;
std::string className;
std::vector<std::vector<uint8_t>> mask;
};
| 参数名 | 说明 |
|---|---|
| x0 | 目标左上角横坐标。 |
| y0 | 目标左上角纵坐标。 |
| x1 | 目标右下角横坐标。 |
| y1 | 目标右下角纵坐标。 |
| confidence | 类别的置信度。 |
| classId | 类别的编号。 |
| className | 类别名称。 |
| mask | 实例分割任务使用,目标框内的像素图。 |
PaddingMode
仿射变换和透射变换的补边方式,当前仅支持常量补边。
enum class PaddingMode {
PADDING_CONST = 0
};
| 参数名 | 说明 |
|---|---|
| PADDING_CONST | 常量补边方式 |
PngDecodeChnConfig
解码PNG图像通道结构体。
struct PngDecodeChnConfig {};
Point
坐标点,用于保存图像像素点位置的结构体。
struct Point {
Point()
: x(0), y(0) {};
Point(const uint32_t inputX, const uint32_t inputY)
: x(inputX), y(inputY) {};
uint32_t x = 0;
uint32_t y = 0;
};
| 参数名 | 说明 |
|---|---|
| x,inputX | 横坐标(以图像左上角为原点)。 |
| y,inputY | 纵坐标(以图像左上角为原点)。 |
PortDirection
GenerateStaticPortsInfo所使用的枚举类,具体请参见GenerateStaticPortsInfo。
typedef enum {
INPUT_PORT,
OUTPUT_PORT,
} PortDirection;
PortTypeDesc
MxpiPortInfo所使用的枚举类,具体请参见MxpiPortInfo。
typedef enum {
STATIC = GST_PAD_ALWAYS,
DYNAMICS = GST_PAD_REQUEST
} PortTypeDesc;
PostImageInfo
定义后处理图片信息使用的结构体。
struct PostImageInfo {
uint32_t widthOriginal = 0;
uint32_t heightOriginal = 0;
uint32_t widthResize = 0;
uint32_t heightResize = 0;
float x0 = 0;
float y0 = 0;
float x1 = 0;
float y1 = 0;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| widthOriginal | 输入 | 原始图片宽度。 |
| heightOriginal | 输入 | 原始图片高度。 |
| widthResize | 输入 | 缩放后图片宽度。 |
| heightResize | 输入 | 缩放后图片高度。 |
| x0 | 输入 | 左上角横坐标。 |
| y0 | 输入 | 左上角纵坐标。 |
| x1 | 输入 | 右下角横坐标。 |
| y1 | 输入 | 右下角纵坐标。 |
PostProcessorImageInfo
视频编码回调传入数据。
struct PostProcessorImageInfo {
std::vector<MxBase::PostImageInfo> postImageInfoVec;
bool useMpPictureCrop = false;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postImageInfoVec | 输入 | 图片信息(包括原图和缩放宽高,目标框坐标)。 |
| useMpPictureCrop | 输入 | 是否还原坐标到目标框坐标上。 |
PropertyType
ElementProperty所使用的枚举类型,具体请参见ElementProperty。
typedef enum {
STRING = 0,
INT,
UINT,
FLOAT,
DOUBLE,
LONG,
ULONG
} PropertyType;
Rect
矩形框结构体(抠图贴图),用来保存一个矩形框的左上角坐标和右下角坐标(图像的左上角坐标和右下角坐标)。
struct Rect {
Rect()
: x0(0), y0(0), x1(0), y1(0) {};
Rect(const uint32_t leftTopX, const uint32_t leftTopY,
const uint32_t rightBottomX, const uint32_t rightBottomY)
: x0(leftTopX), y0(leftTopY), x1(rightBottomX), y1(rightBottomY) {};
Rect(const Point leftTop, const Point rightBottom)
: x0(leftTop.x), y0(leftTop.y), x1(rightBottom.x), y1(rightBottom.y) {};
uint32_t x0 = 0;
uint32_t y0 = 0;
uint32_t x1 = 0;
uint32_t y1 = 0;
};
| 参数名 | 说明 |
|---|---|
| x0,leftTopX | 矩形框左上角坐标的横坐标(以图像左上角为原点)。 |
| y0,leftTopY | 矩形框左上角坐标的纵坐标(以图像左上角为原点)。 |
| x1,rightBottomX | 矩形框右下角坐标的横坐标(以图像左上角为原点)。 |
| y1,rightBottomY | 矩形框右下角坐标的纵坐标(以图像左上角为原点)。 |
| leftTop | 矩形框左上角坐标点(Point结构体)。 |
| rightBottom | 矩形框右下角坐标点(Point结构体)。 |
ReduceDim
用于描述规约轴的枚举类型。
enum class ReduceDim{
REDUCE_HEIGHT = 0,
REDUCE_WIDTH = 1
};
| 参数名 | 说明 |
|---|---|
| REDUCE_HEIGHT | 用于描述规约高维度。 |
| REDUCE_WIDTH | 用于描述规约宽维度。 |
ReduceType
用于描述规约操作的枚举类型。
enum class ReduceType{
REDUCE_SUM = 0,
REDUCE_MEAN = 1,
REDUCE_MAX = 2,
REDUCE_MIN = 3
};
| 参数名 | 说明 |
|---|---|
| REDUCE_SUM | 用于描述求和规约操作。 |
| REDUCE_MEAN | 用于描述求平均规约操作。 |
| REDUCE_MAX | 用于描述求最大值规约操作。 |
| REDUCE_MIN | 用于描述求最小值规约操作。 |
ResizeConfig
缩放的配置定义。
struct ResizeConfig {
uint32_t height = 0;
uint32_t width = 0;
float scale_x = 0.f;
float scale_y = 0.f;
uint32_t interpolation = 0;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| height | 输入 | 缩放后的高度。 |
| width | 输入 | 缩放后的宽度。 |
| scale_x | 输入 | 横向缩放比例。 |
| scale_y | 输入 | 纵向缩放比例。 |
| interpolation | 输入 | 指定缩放算子,取值范围:0:默认值,华为自研的最近邻插值算法。1:业界通用的Bilinear算法,当前不支持。2:业界通用的Nearest Neighbor算法,当前不支持。 |
ResizedImageInfo
用于记录图像类任务中模型前处理中的缩放方式,提供给模型后处理的坐标还原使用。
class ResizedImageInfo {
public:
ResizedImageInfo() {}
ResizedImageInfo(uint32_t wResize, uint32_t hResize, uint32_t wOriginal, uint32_t hOriginal, ResizeType rType, float kARScaling) :
widthResize(wResize), heightResize(hResize), widthOriginal(wOriginal), heightOriginal(hOriginal), resizeType(rType),
keepAspectRatioScaling(kARScaling) {}
uint32_t widthResize = 0;
uint32_t heightResize = 0;
uint32_t widthOriginal = 0;
uint32_t heightOriginal = 0;
ResizeType resizeType = RESIZER_STRETCHING;
float keepAspectRatioScaling = 0;
};
| 参数名 | 说明 |
|---|---|
| widthResize | 缩放后图像宽,即模型的输入宽。 |
| heightResize | 缩放后图像高,即模型的输入高。 |
| widthOriginal | 缩放前图像宽。 |
| heightOriginal | 缩放前图像高。 |
| resizeType | 枚举类型ResizeType,代表图像的缩放方式。RESIZER_STRETCHING:拉伸缩放,默认缩放方式。RESIZER_TF_KEEP_ASPECT_RATIO:等比缩放,和TensorFlow框架FastRCNN模型缩放方式对应。RESIZER_MS_KEEP_ASPECT_RATIO:等比缩放,使图片等比缩放至在指定宽高的区域内面积最大化。 |
| keepAspectRatioScaling | 等比例缩放的缩放比例,等比缩放的缩放方式下生效。 |
ResizeType
枚举类型ResizeType,代表图像的缩放方式。
enum ResizeType {
RESIZER_STRETCHING = 0,
RESIZER_TF_KEEP_ASPECT_RATIO,
RESIZER_MS_KEEP_ASPECT_RATIO,
RESIZER_ONLY_PADDING,
RESIZER_KEEP_ASPECT_RATIO_LONG,
RESIZER_KEEP_ASPECT_RATIO_SHORT,
RESIZER_RESCALE,
RESIZER_RESCALE_DOUBLE,
RESIZER_MS_YOLOV4,
};
| 参数名 | 说明 |
|---|---|
| RESIZER_STRETCHING | 拉伸缩放。 |
| RESIZER_TF_KEEP_ASPECT_RATIO | 对应TensorFlow框架FastRCNN模型缩放方式。 |
| RESIZER_MS_KEEP_ASPECT_RATIO | 等比缩放。 |
| RESIZER_ONLY_PADDING | 按原始长宽进行填充。 |
| RESIZER_KEEP_ASPECT_RATIO_LONG | 按长边比例缩放。 |
| RESIZER_KEEP_ASPECT_RATIO_SHORT | 按短边比例缩放。 |
| RESIZER_RESCALE | 按长宽缩放的较小比例拉伸缩放。 |
| RESIZER_RESCALE_DOUBLE | 按长宽缩放的较小比例拉伸缩放两次。 |
| RESIZER_MS_YOLOV4 | 对应YOLOv4模型缩放方式。 |
RoiBox
定义裁剪框。
struct RoiBox {
float x0;
float y0;
float x1;
float y1;
};
| 参数名 | 说明 |
|---|---|
| x0 | 左上角横坐标。 |
| y0 | 左上角纵坐标。 |
| x1 | 右下角横坐标。 |
| y1 | 右下角纵坐标。 |
RotateAngle
用于描述旋转角度的枚举类型。
enum class RotateAngle {
ROTATE_90 = 90,
ROTATE_180 = 180,
ROTATE_270 = 270
};
| 参数名 | 说明 |
|---|---|
| ROTATE_90 | 用于描述旋转90度。 |
| ROTATE_180 | 用于描述旋转180度。 |
| ROTATE_270 | 用于描述旋转270度。 |
SemanticSegInfo
语义分割的信息。
class SemanticSegInfo {
public:
std::vector<std::vector<int>> pixels;
std::vector<std::string> labelMap;
};
| 参数名 | 说明 |
|---|---|
| pixels | 图片中每个像素所属的类别ID。 |
| labelMap | 类别ID与类别名的映射关系。 |
Size
图像大小结构体(缩放),用来保存一个图像的高和宽。
struct Size {
Size()
: width(0), height(0) {};
Size(const uint32_t inputWidth, const uint32_t inputHeight)
: width(inputWidth), height(inputHeight) {};
uint32_t width = 0;
uint32_t height = 0;
};
| 参数名 | 说明 |
|---|---|
| width,inputWidth | 图像宽。 |
| height,inputHeight | 图像高。 |
StreamFormat
视频流数据格式,用于视频解码和视频编码。
enum class StreamFormat {
H265_MAIN_LEVEL = 0,
H264_BASELINE_LEVEL = 1,
H264_MAIN_LEVEL = 2,
H264_HIGH_LEVEL = 3,
};
| 参数名 | 说明 |
|---|---|
| H265_MAIN_LEVEL | H.265 格式视频流,主流画质。 |
| H264_BASELINE_LEVEL | H.264 格式视频流,基本画质。 |
| H264_MAIN_LEVEL | H.264 格式视频流,主流画质。 |
| H264_HIGH_LEVEL | H.264 格式视频流,高级画质。 |
TensorArrangementType
描述张量的组织形式。
enum TensorArrangementType {
TYPE_NHWC = 0,
TYPE_NCHW = 1,
TYPE_NHW = 2,
TYPE_NWH = 3
};
| 参数名 | 说明 |
|---|---|
| TYPE_NHWC | 以NHWC形式组织张量。 |
| TYPE_NCHW | 以NCHW形式组织张量。 |
| TYPE_NHW | 以NHW形式组织张量。 |
| TYPE_NWH | 以NWH形式组织张量。 |
TensorDataType
TensorDataType枚举类。
enum TensorDataType {
TENSOR_DTYPE_UNDEFINED = -1,
TENSOR_DTYPE_FLOAT32 = 0,
TENSOR_DTYPE_FLOAT16 = 1,
TENSOR_DTYPE_INT8 = 2,
TENSOR_DTYPE_INT32 = 3,
TENSOR_DTYPE_UINT8 = 4,
TENSOR_DTYPE_INT16 = 6,
TENSOR_DTYPE_UINT16 = 7,
TENSOR_DTYPE_UINT32 = 8,
TENSOR_DTYPE_INT64 = 9,
TENSOR_DTYPE_UINT64 = 10,
TENSOR_DTYPE_DOUBLE64 = 11,
TENSOR_DTYPE_BOOL = 12
};
| 参数名 | 说明 |
|---|---|
| TENSOR_DTYPE_UNDEFINED | 未定义类型 |
| TENSOR_DTYPE_FLOAT32 | 32位浮点型 |
| TENSOR_DTYPE_FLOAT16 | 16位浮点型 |
| TENSOR_DTYPE_INT8 | 8位整型 |
| TENSOR_DTYPE_INT32 | 32位整型 |
| TENSOR_DTYPE_UINT8 | 8位无符号整型 |
| TENSOR_DTYPE_INT16 | 16位整型 |
| TENSOR_DTYPE_UINT16 | 16位无符号整型 |
| TENSOR_DTYPE_UINT32 | 32位无符号整型 |
| TENSOR_DTYPE_INT64 | 64位整型 |
| TENSOR_DTYPE_UINT64 | 64位无符号整型 |
| TENSOR_DTYPE_DOUBLE64 | 64位双精度浮点型 |
| TENSOR_DTYPE_BOOL | 布尔型 |
TensorDesc
张量描述信息定义。
struct TensorDesc {
size_t tensorSize;
std::string tensorName;
std::vector<int64_t> tensorDims;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensorSize | 输出 | 张量的大小,单位为Byte。 |
| tensorName | 输出 | 张量名称。 |
| tensorDims | 输出 | 张量维度。 |
TensorDType
用于描述Tensor类的数据类型。
enum class TensorDType {
UNDEFINED = -1,
FLOAT32 = 0,
FLOAT16 = 1,
INT8 = 2,
INT32 = 3,
UINT8 = 4,
INT16 = 6,
UINT16 = 7,
UINT32 = 8,
INT64 = 9,
UINT64 = 10,
DOUBLE64 = 11,
BOOL = 12
};
| 参数名 | 说明 |
|---|---|
| UNDEFINED | 未定义类型。 |
| FLOAT32 | 32位浮点型。 |
| FLOAT16 | 16位浮点型。 |
| INT8 | 8位整型。 |
| INT32 | 32位整型。 |
| UINT8 | 8位无符号整型。 |
| INT16 | 16位整型。 |
| UINT16 | 16位无符号整型。 |
| UINT32 | 32位无符号整型。 |
| INT64 | 64位整型。 |
| UINT64 | 64位无符号整型 |
| DOUBLE64 | 64位双精度浮点型。 |
| BOOL | 布尔型。 |
TextObjDetectInfo
定义检测框的四个坐标点和置信度。
struct TextObjDetectInfo {
float x0;
float y0;
float x1;
float y1;
float x2;
float y2;
float x3;
float y3;
float confidence;
};
| 参数名 | 说明 |
|---|---|
| x0 | 检测框左下角横坐标。 |
| y0 | 检测框左下角纵坐标。 |
| x1 | 检测框右下角横坐标。 |
| y1 | 检测框右下角纵坐标。 |
| x2 | 检测框右上角横坐标。 |
| y2 | 检测框右上角纵坐标。 |
| x3 | 检测框左上角横坐标。 |
| y3 | 检测框左上角纵坐标。 |
| confidence | 置信度。 |
TextObjectInfo
文本框目标信息。
class TextObjectInfo {
public:
float x0;
float y0;
float x1;
float y1;
float x2;
float y2;
float x3;
float y3;
float confidence;
std::string result;
};
| 参数名 | 说明 |
|---|---|
| x0 | 文本目标框(四边形)的左下角横坐标。 |
| y0 | 文本目标框(四边形)的左下角纵坐标。 |
| x1 | 文本目标框(四边形)的右下角横坐标。 |
| y1 | 文本目标框(四边形)的右下角纵坐标。 |
| x2 | 文本目标框(四边形)的右上角横坐标。 |
| y2 | 文本目标框(四边形)的右上角纵坐标。 |
| x3 | 文本目标框(四边形)的左上角横坐标。 |
| y3 | 文本目标框(四边形)的左上角纵坐标。 |
| confidence | 文本目标框的置信度。 |
| result | 文本目标框的文字识别结果。 |
TextsInfo
文本信息。
class TextsInfo {
public:
std::vector<std::string> text;
};
| 参数名 | 说明 |
|---|---|
| text | 文本信息。 |
ThresholdType
枚举类型ThresholdType,代表阈值分割的具体规则。
enum class ThresholdType {
THRESHOLD_BINARY = 0,
THRESHOLD_BINARY_INV = 1,
};
| 参数名 | 说明 |
|---|---|
| THRESHOLD_BINARY | 二值化。 |
| THRESHOLD_BINARY_INV | 反二值化。 |
TrackFlag
目标检测跟踪的状态。
enum TrackFlag {
NEW_OBJECT = 0,
TRACKED_OBJECT = 1,
LOST_OBJECT = 2
};
| 参数名 | 说明 |
|---|---|
| NEW_OBJECT | 新目标。 |
| TRACKED_OBJECT | 正在跟踪。 |
| LOST_OBJECT | 遗失目标。 |
VdecConfig
定义视频流解码使用的结构体。
struct VdecConfig {
uint32_t width = 0;
uint32_t height = 0;
MxbaseStreamFormat inputVideoFormat = MXBASE_STREAM_FORMAT_H264_MAIN_LEVEL;
MxbasePixelFormat outputImageFormat = MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_420;
uint32_t channelId = 0;
uint32_t deviceId = 0;
pthread_t threadId = 0;
DecodeCallBackFunction callbackFunc = nullptr;
uint32_t outMode = 0;
uint32_t videoChannel = 0;
uint32_t skipInterval = 0;
uint32_t cscMatrix = 0;
void* userData = nullptr;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| width | 输入 | 图像的宽度。 |
| height | 输入 | 图像的高度。 |
| inputVideoFormat | 输入 | 输入图像的格式。 |
| outputImageFormat | 输入 | 输出图像的格式。 |
| channelId | 输入 | 解码的通道编号。 |
| deviceId | 输入 | 设备编号。 |
| threadId | 输入 | 回调线程编号。 |
| callbackFunc | 输入 | 回调函数。结构为: APP_ERROR (*DecodeCallBackFunction)(std::shared_ptr<void> buffer, DvppDataInfo& dvppDataInfo, void* userData) |
| outMode | 输入 | 选择出帧模式。默认值为0,可取值为0或1。 |
| videoChannel | 输入 | 预留参数。 |
| skipInterval | 输入 | 跳帧参数。 |
| cscMatrix | 输入 | 色域转换选项。当前仅支持Atlas 推理系列产品。详见下方色域转换矩阵。 |
| userData | 输入 | 用户自定义数据。 |
色域转换矩阵
-
HI_CSC_MATRIX_BT601_WIDE = 0,基于BT601 wide标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.0000.0001.4021.000−0.344−0.7141.0001.7720.000]∗[Y−0U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.000 & 0.000 & 1.402 \\ 1.000 & -0.344 & -0.714 \\ 1.000 & 1.772 & 0.000 \end{bmatrix} *\begin{bmatrix} Y-0 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[−0.5127.5127.5]+[0.2990.5870.114−0.168−0.331−0.5000.500−0.419−0.081]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} -0.5 \\127.5 \\127.5 \end{bmatrix} + \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.168 & -0.331 & -0.500 \\ 0.500 & -0.419 & -0.081 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT601_NARROW =1,基于BT601 narrow标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.164380.000001.596021.16438−0.39176−0.812971.164382.017230.00000]∗[Y−16U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.16438 & 0.00000 & 1.59602 \\ 1.16438 & -0.39176 & -0.81297 \\ 1.16438 & 2.01723 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-16 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[16128128]+[0.256790.515640.10014−0.14491−0.290990.439220.42941−0.36779−0.07143]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 16 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.25679 & 0.51564 & 0.10014 \\ -0.14491 & -0.29099 & 0.43922 \\ 0.42941 & -0.36779 & -0.07143 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT709_WIDE =2,基于BT709 wide标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.000000.000001.574801.00000−0.18732−0.468121.000001.855600.00000]∗[Y−0U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.00000 & 0.00000 & 1.57480 \\ 1.00000 & -0.18732 & -0.46812 \\ 1.00000 & 1.85560 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-0 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[0128128]+[0.212600.715200.07220−0.11457−0.385430.500000.50000−0.45415−0.04585]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.21260 & 0.71520 & 0.07220 \\ -0.11457 & -0.38543 & 0.50000 \\ 0.50000 & -0.45415 & -0.04585 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT709_NARROW =3,基于BT709 narrow标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.164380.000001.792741.16438−0.21325−0.532911.164382.112400.00000]∗[Y−16U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.16438 & 0.00000 & 1.79274 \\ 1.16438 & -0.21325 & -0.53291 \\ 1.16438 & 2.11240 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-16 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[16128128]+[0.182590.628250.06342−0.09840−0.338570.439220.42941−0.39894−0.04027]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 16 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.18259 & 0.62825 & 0.06342 \\ -0.09840 & -0.33857 & 0.43922 \\ 0.42941 & -0.39894 & -0.04027 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT2020_WIDE =4,基于BT2020 wide标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.000000.000001.474601.00000−0.16455−0.571351.000001.881400.00000]∗[Y−0U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.00000 & 0.00000 & 1.47460 \\ 1.00000 & -0.16455 & -0.57135 \\ 1.00000 & 1.88140 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-0 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[0128128]+[0.262700.678000.05930−0.13963−0.360370.500000.50000−0.45979−0.04021]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.26270 & 0.67800 & 0.05930 \\ -0.13963 & -0.36037 & 0.50000 \\ 0.50000 & -0.45979 & -0.04021 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT2020_NARROW =5,基于BT2020 narrow标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.164380.000001.678681.16438−0.18733−0.650421.164382.141770.00000]∗[Y−16U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.16438 & 0.00000 & 1.67868 \\ 1.16438 & -0.18733 & -0.65042 \\ 1.16438 & 2.14177 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-16 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[16128128]+[0.225640.595580.05209−0.11992−0.316560.439220.42941−0.40389−0.03533]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 16 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.22564 & 0.59558 & 0.05209 \\ -0.11992 & -0.31656 & 0.43922 \\ 0.42941 & -0.40389 & -0.03533 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
VencConfig
视频编码结构体。
struct VencConfig {
uint32_t maxPicWidth = MAX_VENC_WIDTH;
uint32_t maxPicHeight = MAX_VENC_HEIGHT;
uint32_t width = 0;
uint32_t height = 0;
// stream format reference acldvppStreamFormat
MxbaseStreamFormat outputVideoFormat = MXBASE_STREAM_FORMAT_H264_MAIN_LEVEL;
// output format reference acldvppPixelFormat
MxbasePixelFormat inputImageFormat = MXBASE_PIXEL_FORMAT_YUV_SEMIPLANAR_420;
uint32_t keyFrameInterval = 30;
uint32_t deviceId = 0; // device id
uint32_t channelId = 0;
pthread_t encoderThreadId = 0;
bool stopEncoderThread = false;
uint32_t srcRate = 0;
uint32_t rcMode = 0;
uint32_t shortTermStatsTime = 60;
uint32_t longTermStatsTime = 120;
uint32_t longTermMaxBitRate = 300;
uint32_t longTermMinBitRate = 0;
uint32_t maxBitRate = 0;
uint32_t ipProp = 0;
uint32_t sceneMode = 0;
uint32_t displayRate = 30;
uint32_t statsTime = HI_AENC_CHN_ATTR_STATS_TIME;
uint32_t firstFrameStartQp = FIRST_FRAME_START_QP;
std::vector<uint32_t> thresholdI = {0, 0, 0, 0, 0, 0, 0, 0, THRESHOLD_OF_ENCODE_RATE,
THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE,
THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE};
std::vector<uint32_t> thresholdP = {0, 0, 0, 0, 0, 0, 0, 0, THRESHOLD_OF_ENCODE_RATE,
THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE,
THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE};
std::vector<uint32_t> thresholdB = {0, 0, 0, 0, 0, 0, 0, 0, THRESHOLD_OF_ENCODE_RATE,
THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE,
THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE, THRESHOLD_OF_ENCODE_RATE};
uint32_t direction = 8;
uint32_t rowQpDelta = 1;
std::function<void(std::shared_ptr<uint8_t>, uint32_t)>* userData;
std::function<void(std::shared_ptr<uint8_t>, uint32_t, void**)>* userDataWithInput;
std::function<void(std::shared_ptr<uint8_t>, uint32_t, void**, void*)>* userDataWithInputFor310P;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| maxPicWidth | 输入 | 设置最大预留的编码通道宽度,默认为MAX_VENC_WIDTH = 4096 |
| maxPicHeight | 输入 | 设置最大预留的编码通道高度,默认为MAX_VENC_HEIGHT = 4096 |
| width | 输入 | 输入宽度。 |
| height | 输入 | 输入高度。 |
| outputVideoFormat | 输入 | 输出码流格式。 |
| inputImageFormat | 输入 | 输入图片格式。 |
| keyFrameInterval | 输入 | I帧间隔。 |
| deviceId | 输入 | 设备编号。 |
| channelId | 输入 | 编码通道ID。 |
| encoderThreadId | 输入 | 回调线程编号。 |
| stopEncoderThread | 输入 | 回调线程是否在运行的标记位。 |
| srcRate | 输入 | 输入码流帧率,单位fps。 |
| rcMode | 输入 | 指定码率控制模式。 |
| shortTermStatsTime | 输入 | 码率短期统计时间,单位为秒,默认值为“60”,取值范围:[1, 120]。该参数仅在Atlas 推理系列产品上,且“rcMode”为5时生效。 |
| longTermStatsTime | 输入 | 码率长期统计时间,单位为分钟,默认值为“120”,取值范围:[1, 1440]。该参数仅在Atlas 推理系列产品上,且“rcMode”为5时生效。 |
| longTermMaxBitRate | 输入 | 编码器输出长期最大码率,单位为kbps,默认值为“300”。取值范围:[2, maxBitRate]。该参数仅在Atlas 推理系列产品上,且“rcMode”为5时生效。 |
| longTermMinBitRate | 输入 | 编码器输出长期最小码率,单位为kbps,默认值为“0”。取值范围:[0, longTermMaxBitRate]。该参数仅在Atlas 推理系列产品上,且“rcMode”为5时生效。 |
| maxBitRate | 输入 | 输出码率,单位kbps。 |
| ipProp | 输入 | 一个GOP内单个I帧bit数和单个P帧bit数的比例。 |
| sceneMode | 输入 | 场景模式。默认值为0。 该参数仅在Atlas 推理系列产品上生效。 当输出视频格式设置为H.264并且sceneMode设置为1时,由于H.264不支持高码率下运动场景,sceneMode值将自动切换成0。 |
| displayRate | 输入 | 输出视频的播放帧率,默认值为“30”,取值范围[1, 120]。 该参数仅在Atlas 推理系列产品上生效。 |
| statsTime | 输入 | 码率统计时间,以秒为单位,默认值为“1”,取值范围:[1, 60]。 该参数仅在Atlas 推理系列产品上生效。 |
| firstFrameStartQp | 输入 | 设置第一帧的起始Qp值,默认值为“32”,取值范围:[0, 47]。 该参数仅在Atlas 推理系列产品上生效。 |
| thresholdI | 输入 | I帧宏块级码率控制的Madi(用于度量当前帧的空域纹理复杂度)门限。取值范围:[0,255]。默认值为[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]。 减方向的数值设置为“0”,表示关闭当前级;加方向的数值设置为“255”,表示关闭当前级。 该参数仅在Atlas 推理系列产品上生效。 |
| thresholdP | 输入 | P帧宏块级码率控制的Madi(用于度量当前帧的空域纹理复杂度)门限。取值范围:[0,255]。默认值为:[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]。 减方向的数值设置为“0”,表示关闭当前级;加方向的数值设置为“255”,表示关闭当前级。 该参数仅在Atlas 推理系列产品上生效。 |
| thresholdB | 输入 | B帧宏块级码率控制的Madi(用于度量当前帧的空域纹理复杂度)门限。取值范围:[0,255]。默认值为[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]。 减方向的数值设置为“0”,表示关闭当前级;加方向的数值设置为“255”,表示关闭当前级。 该参数仅在Atlas 推理系列产品上生效。 |
| direction | 输入 | 在基于纹理宏块级码率控制时,用于控制加减方向。默认值为“8”,取值范围:[0, 16]。 该参数仅在Atlas 推理系列产品上生效。 |
| rowQpDelta | 输入 | 行级码率控制调节幅度是一帧内行级调节的最大范围,其中行级以宏块行为单位。调节幅度越大,允许行级调整的QP范围越大,码率越平稳。 对于图像复杂度分布不均匀的场景,行级码率控制调节幅度设置过大会带来图像质量不均匀。 默认值为“1”,取值范围:[0, 10],设置为“0”表示关闭基于行的宏块级码率控制。 该参数仅在Atlas 推理系列产品上生效。 |
| userData | 输入 | 用户自定义数据。 |
| userDataWithInput | 输入 | 用户自定义数据(待输入指针)。 |
| userDataWithInputFor310P | 输入 | Atlas 推理系列产品上使用的用户自定义数据(待输入指针) |
VideoDecodeCallBack
用于定义视频解码输入的回调函数,请勿在回调函数内实现过于复杂的操作,而是单纯使用用户自定义“userData”来接收视频解码回调结果,否则回调线程会发生卡住的现象,导致视频解码速度变慢。
typedef APP_ERROR (*VideoDecodeCallBack)(Image& decodedImage, uint32_t channelId,
uint32_t frameId, void* userData);
| 参数名 | 说明 |
|---|---|
| decodedImage | 解码后输出的图像类。 |
| channelId | 视频流索引,由VideoDecoder类的构造函数来设置。 |
| frameId | 视频帧索引,由VideoDecoder类的Decode函数来设置。 |
| userData | 用户自定义回调输入的数据类型(主要用来获取解码数据)。 |
VideoDecodeConfig
用于保存视频解码的参数。
struct VideoDecodeConfig {
uint32_t width = 1920;
uint32_t height = 1080;
StreamFormat inputVideoFormat = StreamFormat::H264_MAIN_LEVEL;
ImageFormat outputImageFormat = ImageFormat::YUV_SP_420;
VideoDecodeCallBack callbackFunc = nullptr;
uint32_t skipInterval = 0;
uint32_t cscMatrix = 0;
};
| 参数名 | 说明 |
|---|---|
| width | 视频解码缓冲区的宽,取值范围:[128, 4096],默认值:1920,必须为偶数并自动对齐到16的倍数。请用户根据实际的视频帧数据进行适当设置,需大于或等于实际的视频帧数据宽,否则会无解码输出,设置过大将会产生多余的内存资源开销。 |
| height | 视频解码缓冲区的高,取值范围:[128, 4096],默认值:1080,必须为偶数。请用户根据实际的视频帧数据进行设置,需大于或等于实际的视频帧数据高,否则会无解码输出,设置过大将会产生多余的内存资源开销。 |
| inputVideoFormat | 输入的视频格式。 |
| outputImageFormat | 解码后输出的图像格式,默认值:ImageFormat::YUV_SP_420。 |
| callbackFunc | 解码完成后的回调函数,不能为空指针。 |
| skipInterval | 视频解码的跳帧参数,取值范围:[0, 250],默认值:0。 |
| cscMatrix | 色域转换选项,默认值为0,(即HI_CSC_MATRIX_BT601_WIDE)。当前仅支持Atlas 推理系列产品。详见下方色域转换矩阵。 |
色域转换矩阵
-
HI_CSC_MATRIX_BT601_WIDE = 0,基于BT601 wide标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.0000.0001.4021.000−0.344−0.7141.0001.7720.000]∗[Y−0U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.000 & 0.000 & 1.402 \\ 1.000 & -0.344 & -0.714 \\ 1.000 & 1.772 & 0.000 \end{bmatrix} *\begin{bmatrix} Y-0 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[−0.5127.5127.5]+[0.2990.5870.114−0.168−0.331−0.5000.500−0.419−0.081]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} -0.5 \\127.5 \\127.5 \end{bmatrix} + \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.168 & -0.331 & -0.500 \\ 0.500 & -0.419 & -0.081 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT601_NARROW =1,基于BT601 narrow标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.164380.000001.596021.16438−0.39176−0.812971.164382.017230.00000]∗[Y−16U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.16438 & 0.00000 & 1.59602 \\ 1.16438 & -0.39176 & -0.81297 \\ 1.16438 & 2.01723 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-16 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[16128128]+[0.256790.515640.10014−0.14491−0.290990.439220.42941−0.36779−0.07143]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 16 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.25679 & 0.51564 & 0.10014 \\ -0.14491 & -0.29099 & 0.43922 \\ 0.42941 & -0.36779 & -0.07143 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT709_WIDE =2,基于BT709 wide标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.000000.000001.574801.00000−0.18732−0.468121.000001.855600.00000]∗[Y−0U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.00000 & 0.00000 & 1.57480 \\ 1.00000 & -0.18732 & -0.46812 \\ 1.00000 & 1.85560 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-0 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[0128128]+[0.212600.715200.07220−0.11457−0.385430.500000.50000−0.45415−0.04585]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.21260 & 0.71520 & 0.07220 \\ -0.11457 & -0.38543 & 0.50000 \\ 0.50000 & -0.45415 & -0.04585 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT709_NARROW =3,基于BT709 narrow标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.164380.000001.792741.16438−0.21325−0.532911.164382.112400.00000]∗[Y−16U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.16438 & 0.00000 & 1.79274 \\ 1.16438 & -0.21325 & -0.53291 \\ 1.16438 & 2.11240 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-16 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[16128128]+[0.182590.628250.06342−0.09840−0.338570.439220.42941−0.39894−0.04027]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 16 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.18259 & 0.62825 & 0.06342 \\ -0.09840 & -0.33857 & 0.43922 \\ 0.42941 & -0.39894 & -0.04027 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT2020_WIDE =4,基于BT2020 wide标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.000000.000001.474601.00000−0.16455−0.571351.000001.881400.00000]∗[Y−0U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.00000 & 0.00000 & 1.47460 \\ 1.00000 & -0.16455 & -0.57135 \\ 1.00000 & 1.88140 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-0 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[0128128]+[0.262700.678000.05930−0.13963−0.360370.500000.50000−0.45979−0.04021]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.26270 & 0.67800 & 0.05930 \\ -0.13963 & -0.36037 & 0.50000 \\ 0.50000 & -0.45979 & -0.04021 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
-
HI_CSC_MATRIX_BT2020_NARROW =5,基于BT2020 narrow标准的色域转换矩阵,各参数值参考如下。
YUV转RGB:
[RGB]=[1.164380.000001.678681.16438−0.18733−0.650421.164382.141770.00000]∗[Y−16U−128V−128]\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1.16438 & 0.00000 & 1.67868 \\ 1.16438 & -0.18733 & -0.65042 \\ 1.16438 & 2.14177 & 0.00000 \end{bmatrix} *\begin{bmatrix} Y-16 \\ U-128 \\ V-128 \end{bmatrix}
RGB转YUV:
[YUV]=[16128128]+[0.225640.595580.05209−0.11992−0.316560.439220.42941−0.40389−0.03533]∗[RGB]\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 16 \\128 \\128 \end{bmatrix} + \begin{bmatrix} 0.22564 & 0.59558 & 0.05209 \\ -0.11992 & -0.31656 & 0.43922 \\ 0.42941 & -0.40389 & -0.03533 \end{bmatrix} *\begin{bmatrix} R \\ G \\ B \end{bmatrix}
VideoEncodeCallBack
用于定义视频编码输入的回调函数。
请勿在回调函数内实现过于复杂的操作,而是单纯用用户自定义“userData”来接收视频编码回调结果,否则回调线程会发生卡住的现象,导致视频编码速度变慢。
typedef APP_ERROR (*VideoEncodeCallBack)(std::shared_ptr<uint8_t>& outDataPtr, uint32_t& outDataSize,
uint32_t& channelId, uint32_t& frameId, void* userData);
| 参数名 | 说明 |
|---|---|
| outDataPtr | 编码后输出视频帧数据的内存地址。 |
| outDataSize | 编码后输出视频帧数据的内存大小。 |
| channelId | 视频流索引,由VideoEncoder类的构造函数来设置。 |
| frameId | 视频帧索引,由VideoEncoder类的Encode函数来设置。 |
| userData | 用户自定义回调输入的数据类型(主要用来获取编码数据)。 |
VideoEncodeConfig
用于保存视频编码的相关参数。
struct VideoEncodeConfig {
uint32_t maxPicWidth = 4096;
uint32_t maxPicHeight = 4096;
uint32_t width = 1920;
uint32_t height = 1080;
StreamFormat outputVideoFormat = StreamFormat::H264_MAIN_LEVEL;
ImageFormat inputImageFormat = ImageFormat::YUV_SP_420;
VideoEncodeCallBack callbackFunc = nullptr;
uint32_t keyFrameInterval = 30;
uint32_t srcRate = 30;
uint32_t rcMode = 0;
uint32_t shortTermStatsTime = 60;
uint32_t longTermStatsTime = 120;
uint32_t longTermMaxBitRate = 300;
uint32_t longTermMinBitRate = 0;
uint32_t maxBitRate = 300;
uint32_t ipProp = 70;
uint32_t sceneMode = 0;
uint32_t displayRate = 30;
uint32_t statsTime = 1;
uint32_t firstFrameStartQp = 32;
std::vector<uint32_t> thresholdI = {0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255};
std::vector<uint32_t> thresholdP = {0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255};
std::vector<uint32_t> thresholdB = {0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255};
uint32_t direction = 8;
uint32_t rowQpDelta = 1;
};
| 参数名 | 说明 |
|---|---|
| maxPicWidth | 编码通道最大预留宽度,默认值:4096,单位为像素,取值范围:[128, 4096],配置时需大于width,当前仅支持Atlas 推理系列产品。 |
| maxPicHeight | 编码通道最大预留高度,默认值:4096,单位为像素,取值范围:[128, 4096],配置时需大于height,当前仅支持Atlas 推理系列产品。 |
| width | 编码后视频帧数据的宽,默认值:1920,必须与待编码图片的宽(originalSize)一致。 |
| height | 编码后视频帧数据的高,默认值:1080,必须与待编码图片的高(originalSize)一致。 |
| outputVideoFormat | 编码后输出的视频格式,默认值:StreamFormat::H264_MAIN_LEVEL。 |
| inputImageFormat | 输入的图像格式,默认值:ImageFormat::YUV_SP_420。 |
| callbackFunc | 编码完成后的回调函数,不能为空指针。 |
| keyFrameInterval | 视频I帧间隔大小,默认为30。 |
| srcRate | 输入码流帧率,单位fps,默认为30。 |
| rcMode | 指定码率控制模式。 对于Atlas 200I/500 A2 推理产品: 对于Atlas 推理系列产品: |
| shortTermStatsTime | 码率短期统计时间,单位为秒,默认值为60,取值范围:[1, 120]。该参数仅在Atlas 推理系列产品上,且rcMode为5时生效。 |
| longTermStatsTime | 码率长期统计时间,单位为分钟,默认值为120,取值范围:[1, 1440]。该参数仅在Atlas 推理系列产品上,且rcMode为5时生效。 |
| longTermMaxBitRate | 编码器输出长期最大码率,单位为kbps,默认值为300。取值范围:[2, maxBitRate]。该参数仅在Atlas 推理系列产品上,且rcMode为5时生效。 |
| longTermMinBitRate | 编码器输出长期最小码率,单位为kbps,默认值为0。取值范围:[0, longTermMaxBitRate]。该参数仅在Atlas 推理系列产品上,且rcMode为5时生效。 |
| maxBitRate | 输出码率,单位kbps,默认值为300。 |
| ipProp | 一个GOP内单个I帧bit数和单个P帧bit数的比例,默认值为70,取值范围[1, 100]。 |
| sceneMode | 场景模式。默认值为0。 该参数仅在Atlas 推理系列产品上生效。 当输出视频格式设置为H.264并且sceneMode设置为1时,由于H.264不支持高码率下运动场景,sceneMode值将自动切换成0。 |
| displayRate | 输出视频的播放帧率,默认值为30,取值范围[1, 120]。该参数仅在Atlas 推理系列产品上生效。 |
| statsTime | 码率统计时间,以秒为单位,默认值为1,取值范围:[1, 60]。该参数仅在Atlas 推理系列产品上生效。 |
| firstFrameStartQp | 设置第一帧的起始Qp值,默认值为32,取值范围: 该参数仅在Atlas 推理系列产品上生效。 |
| thresholdI | I帧宏块级码率控制的Madi(用于度量当前帧的空域纹理复杂度)门限。取值范围:[0,255]。默认值为[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]。 减方向的数值设置为0,表示关闭当前级;加方向的数值设置为255,表示关闭当前级。 该参数仅在Atlas 推理系列产品上生效。 |
| thresholdP | P帧宏块级码率控制的Madi(用于度量当前帧的空域纹理复杂度)门限。取值范围:[0,255]。默认值为:[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]。 减方向的数值设置为0,表示关闭当前级;加方向的数值设置为255,表示关闭当前级。 该参数仅在Atlas 推理系列产品上生效。 |
| thresholdB | B帧宏块级码率控制的Madi(用于度量当前帧的空域纹理复杂度)门限。取值范围:[0,255]。默认值为[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255]。 减方向的数值设置为0,表示关闭当前级;加方向的数值设置为255,表示关闭当前级。 该参数仅在Atlas 推理系列产品上生效。 |
| direction | 在基于纹理宏块级码率控制时,用于控制加减方向。默认值为8,取值范围:[0, 16]。该参数仅在Atlas 推理系列产品上生效。 |
| rowQpDelta | 行级码率控制调节幅度是一帧内行级调节的最大范围,其中行级以宏块行为单位。调节幅度越大,允许行级调整的QP范围越大,码率越平稳。 对于图像复杂度分布不均匀的场景,行级码率控制调节幅度设置过大会带来图像质量不均匀。 默认值为1,取值范围:[0, 10],设置为0表示关闭基于行的宏块级码率控制。 该参数仅在Atlas 推理系列产品上生效。 |
以下为视频采集场景下推荐的参数配置,可以保证较好的视频编码质量,其他场景下请根据实际应用对应调整。
| 画质/分辨率 | srcRate | keyFrameInterval | maxBitRate |
|---|---|---|---|
| 4K3840 * 2160/4096 * 2160 | 25或30 | 50或60 | H.264: 8000 ~ 12000 H.265: 8000 ~ 12000 |
| 2K2560 * 1440 | 25或30 | 50或60 | H.264: 6000 ~ 10000 H.265: 6000 ~ 10000 |
| 1080P(蓝光)1920 * 1080 | 25或30 | 50或60 | H.264: 2000~6000 H.265: 1000~4000 |
| 720P(高清)1280 * 720 | 25或30 | 50或60 | H.264: 1000~3000 H.265: 800~2000 |
| 480P/D1_N(标清)854 * 480/720 * 480 | 25或30 | 50或60 | H.264: 600~1400 H.265: 300~700 |
| 576P/D1 (标清)720 * 576 | 25或30 | 50或60 | H.264: 600~1400 H.265: 300~700 |
| 270P(流畅)480 * 270 | 25或30 | 50或60 | - |
| CIF P/N352 * 288/320 * 240 | 25或30 | 50或60 | H.264: 250 H.265: 250 |
VisionDataFormat
图像数据格式排布形式。
enum class VisionDataFormat {
NCHW = 0,
NHWC = 1
};
| 参数名 | 说明 |
|---|---|
| NCHW | 图像数据按NCHW格式排布。 |
| NHWC | 图像数据按NHWC格式排布。 |
WarpAffineMode
仿射变换的插值方式,当前仅支持线性插值。
enum class WarpAffineMode {
INTER_LINEAR = 0
};
| 参数名 | 说明 |
|---|---|
| INTER_LINEAR | 线性插值方式 |
WarpPerspectiveMode
透射变换的插值方式,当前仅支持线性插值。
enum class WarpPerspectiveMode {
INTER_LINEAR = 0
};
| 参数名 | 说明 |
|---|---|
| INTER_LINEAR | 线性插值方式 |
流程编排数据结构
CropRoiBox
裁剪框的定义。
struct CropRoiBox {
float x0;
float y0;
float x1;
float y1;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x0 | 输入 | 左上角横坐标。 |
| y0 | 输入 | 左上角纵坐标。 |
| x1 | 输入 | 右下角横坐标。 |
| y1 | 输入 | 右下角纵坐标。 |
ElementProperty
插件配置参数模板,用户可通过重写插件DefineProperties接口来定义插件配置参数。
template<class T>
struct ElementProperty {
PropertyType type;
std::string name;
std::string nickName;
std::string desc;
T defaultValue;
T min;
T max;
}
| 参数名 | 说明 |
|---|---|
| type | 数据类型,参考PropertyType。typedef enum { STRING = 0, INT, UINT, FLOAT, DOUBLE, LONG, ULONG} PropertyType; |
| name | 配置选项名字。 |
| nickname | 配置选项昵称。 |
| desc | 配置选项描述。 |
| defaultValue | 默认值。 |
| min | 最小值。 |
| max | 最大值。 |
ImageInfo
模型及图片宽高信息。
struct ImageInfo {
int modelWidth;
int modelHeight;
int imgWidth;
int imgHeight;
};
| 参数名 | 说明 |
|---|---|
| modelWidth | 模型宽度。 |
| modelHeight | 模型高度。 |
| imgWidth | 图片宽度。 |
| imgHeight | 图片高度。 |
InputParam
Buffer接口定义的数据结构,用于创建Buffer。
struct InputParam {
std::string key;
int deviceId;
int dataSize;
void* ptrData;
MxpiFrameInfo mxpiFrameInfo;
MxpiVisionInfo mxpiVisionInfo;
MxpiMemoryType mxpiMemoryType;
uint32_t dataType;
}
| 参数名 | 说明 |
|---|---|
| key | 在构建Buffer时,系统自动将ptrData和mxpiVisionInfo组装成一个MxpiVisionList,用key作为该MxpiVisionList的索引。下游插件可以通过该索引找到MxpiVisionList。通常情况下,插件名即为这个key值。 |
| deviceId | 设备编号。 |
| dataSize | Buffer的内存大小,单位为Byte。内存大小需要和实际内存大小保持一致,否则可能会导致coredump。 |
| ptrData | Buffer的内存地址。 |
| mxpiFrameInfo | 视频、图像帧信息,例如通道编号、帧编号等。 |
| mxpiVisionInfo | 视频、图像描述信息,例如图像格式、宽、高等。 |
| mxpiMemoryType | Device内存类型。 |
| dataType | 数据类型。 |
Metadata
Metadata为插件生成的结构化数据,例如分类信息、目标信息。元数据依附在插件缓存上实现传递。
Metadata通过protobuf定义(对应MxpiDataType.pb.h、MxpiDumpData.pb.h以及MxpiOSDType.pb.h文件中的接口,该文件为protobuf自动生成文件,其中包含部分protobuf内部自定义的类,请用户不要使用。详细的proto文件参考Metadata proto文件),目前已经定义的数据结构如下:
表 1 MxpiDataType Metadata数据结构
| 名称 | 功能 | 成员 |
|---|---|---|
| MxpiFrame | 存放视频/图像帧的描述信息和数据。 | |
| MxpiFrameInfo | 存放视频/图像帧的描述信息,例如通道编号、帧序。 | |
| MxpiVisionList | 视频/图像数据列表。 | |
| MxpiVision | 视频/图像数据,包括视频/图像内存和描述信息。 | |
| MxpiMetaHeader | 信息头,用于指示当前数据的依赖数据。通过dataSource找到依赖数据列表,通过memberId找到依赖数据在列表中的编号。 | |
| MxpiMemoryType | 数据类型枚举,类型包括Host内存、Device内存和DVPP内存。 | |
| MxpiDataType | 数据类型,包括8位无符号整型类型和32位浮点类型。 | |
| MxpiVisionInfo | 视频/图像数据描述信息。例如图像格式、宽高。 | |
| MxpiVisionPreProcess | 图像前处理信息。例如图像宽高、抠图坐标、贴图坐标。 | |
| MxpiVisionData | 视频/图像数据内容,其中dataPtr和freeFunc为指针的uint64数值,需将指针强转成该类型。 | |
| MxpiObjectList | 检测目标列表。 | |
| MxpiObject | 检测目标数据结构。 | |
| MxpiImageMaskList | 图像语义分割数据列表。 | |
| MxpiImageMask | 图像语义分割数据信息。例如数据的类别、形状、数据类型。 | |
| MxpiClass | 图像类别数据结构。 | |
| MxpiClassList | 图像类别列表。 | |
| MxpiAttributeList | 目标属性列表。 | |
| MxpiAttribute | 目标属性。 | |
| MxpiTrackLetList | 路径记录目标信息列表。 | |
| MxpiTrackLet | 路径记录目标信息。 | |
| MxpiTensorPackageList | 模型Tensor组合列表。 | |
| MxpiTensorPackage | 模型Tensor组合数据结构。 | |
| MxpiTensor | 模型Tensor数据结构。 | |
| MxpiFeatureVectorList | 特征数据列表。 | |
| MxpiFeatureVector | 特征数据结构。 | |
| MxpiPoseList | 人体姿态估计数据列表。 | |
| MxpiPose | 人体姿态估计数据信息。 | |
| MxpiKeyPoint | 人体关键点数据信息。 | |
| MxpiKeyPointAndAngleList | 目标关键点和角度列表。 | |
| MxpiKeyPointAndAngle | 目标关键点和角度。 | |
| MxpiTextObjectList | 文本目标数据列表。 | |
| MxpiTextObject | 文本目标数据信息。例如文本目标框坐标、置信度、检测文本。 | |
| MxpiTextsInfoList | 文本生成数据列表。 | |
| MxpiTextsInfo | 文本生成数据信息。 | |
| MxpiCustomDataList | 自定义数据列表。 | |
| MxpiCustomData | 自定义数据。 |
表 2 MxpiDumpData Metadata数据结构
| 名称 | 功能 | 成员 |
|---|---|---|
| MxpiDumpData | 保存MxpiBuffer的内容。 | |
| Buffer | MxpiBuffer中的buffer数据。 | |
| MetaData | MxpiBuffer中的metaData数据。 |
| 名称 | 功能 | 成员 |
|---|---|---|
| MxpiOsdInstancesList | 存放目标或者分类信息Osd列表。 | |
| MxpiOsdInstances | 存放Osd属性描述信息。 | |
| MxpiOsdText | 存放文字属性描述信息。 | |
| MxpiOsdLine | 存放线条属性描述信息。 | |
| MxpiOsdRect | 存放矩形框属性描述信息。 | |
| MxpiOsdCircle | 存放画圆属性描述信息。 | |
| MxpiOsdParams | 存放Osd公有属性描述信息。 |
Note
表 MxpiOSDType Metadata数据结构中的线条类型与字体类型,具体请参见插件参考表 mxpi_object2osdInstances插件的属性。
MxGstBase
GStreamer插件类声明,用于存放类的属性信息。
struct MxGstBase {
GstElement element;
guint padIdx;
guint flushStartNum;
guint flushStopNum;
std::vector<GstPad *> sinkPadVec;
std::vector<GstPad *> srcPadVec;
MxPluginBase* pluginInstance;
std::unique_ptr<std::map<std::string, std::shared_ptr<void>>> configParam;
std::vector<MxpiBuffer *> input;
std::vector<MxpiBuffer *> inputQueue;
std::mutex inputMutex_;
std::mutex eventMutex_;
std::condition_variable condition_;
};
| 参数名 | 说明 |
|---|---|
| element | 保存插件element数据。 |
| padIdx | 请求索引。 |
| flushStartNum | flush开始次数。 |
| flushStopNum | flush结束次数。 |
| sinkPadVec | 数组,用于保存插件输出pad。 |
| srcPadVec | 数组,用于保存插件输入pad。 |
| pluginInstance | 保存插件基类实例。 |
| configParam | 用于存储属性配置信息,在插件初始化时传入。 |
| input | buffer数组。 |
| inputQueue | 输入队列。 |
| inputMutex_ | input操作锁。 |
| eventMutex_ | event操作锁。 |
| condition_ | input操作条件变量。 |
MxGstBaseClass
GStreamer插件类的结构声明,用于存放类的继承关系以及类的方法。
struct MxGstBaseClass {
GstElementClass parentClass;
MxPluginBase* (* CreatePluginInstance)();
};
| 参数名 | 说明 |
|---|---|
| parentClass | 保存GstElementClass parentClass父类类型变量。 |
| CreatePluginInstance | 函数指针,用于获取插件实例。 |
MxpiBuffer
插件之间传递的数据结构。
struct MxpiBuffer {
void* buffer;
void* reservedData;
}
| 参数名 | 说明 |
|---|---|
| buffer | 内存地址。数据由上游插件进行输入,请勿手动设置内存数据。 |
| reservedData | 保留内存地址。 |
MxpiErrorInfo
插件错误信息的结构声明,用于存放插件的错误码和描述信息。
struct MxpiErrorInfo {
APP_ERROR ret;
std::string errorInfo;
};
| 参数名 | 说明 |
|---|---|
| ret | 错误码信息,请参考APP_ERROR说明。 |
| errorInfo | 错误码对应的描述信息,请参考APP_ERROR说明。 |
MxpiPortInfo
插件配置端口定义模板,用户可通过重写插件DefineInputPorts和DefineOutputPorts接口来定义输入/输出端口,默认的输入/输出端口相同。
typedef struct {
int portNum = 0;
std::vector<std::vector<std::string>> portDesc;
PortDirection direction;
std::vector<PortTypeDesc> types;
} MxpiPortInfo;
| 参数名 | 说明 |
|---|---|
| portNum | 插件的端口数量,默认值为0。 |
| portDesc | 端口描述,详情请参考表 端口格式。 |
| direction | 定义端口输入或输出方向,枚举值:INPUT_PORT, OUTPUT_PORT。 |
| types | 端口类型PortTypeDesc,当前仅支持STATIC。 |
MX_PLUGIN_GENERATE宏定义
GstMxBaseClass类的具体实现以及插件初始化函数、插件类注册等框架类函数实现。
实现插件开发,需在cpp文件最后使用该宏向GStreamer框架注册插件。
MxClass
Stream流中插件之间流转的分类数据信息。
struct MxClass {
std::vector<MxMetaHeader> headers;
int32_t classId;
std::string className;
float confidence;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 分类数据头信息。 |
| classId | 输入 | 分类数据的类别ID。 |
| className | 输入 | 分类数据的类别名称。 |
| confidence | 输入 | 类别的置信度。 |
MxClassList
Stream流中插件之间流转的分类数据列表信息。
struct MxClassList {
std::vector<MxClass> classList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| classList | 输入 | 分类数据列表。 |
MxDataType
Stream流中插件之间流转数据的数据类型。
enum MxDataType {
UINT8 = 0,
FLOAT32 = 1,
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| UINT8 | 输入 | 8位无符号整型类型。 |
| FLOAT32 | 输入 | 32位浮点类型。 |
MxImageMask
Stream流中插件之间流转的图像语义分割数据信息。
struct MxImageMask {
std::vector<MxMetaHeader> headers;
std::vector<std::string> className;
std::vector<int32_t> shape;
int32_t dataType;
std::string dataStr;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 语义分割数据信息头。 |
| className | 输入 | 语义分割数据的类别信息。 |
| shape | 输入 | 语义分割数据的形状信息。 |
| dataType | 输入 | 语义分割数据类型,参考MxDataType。 |
| dataStr | 输入 | 语义分割数据的实际内存数据。 |
MxImageMaskList
Stream流中插件之间流转的语义分割数据列表信息。
struct MxImageMaskList{
std::vector<MxImageMask> imageMaskList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| imageMaskList | 输入 | 语义分割数据列表。 |
MxKeyPoint
人体关键点数据信息。
struct MxKeyPoint{
float x;
float y;
int32_t name;
float score;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 关键点横坐标。 |
| y | 输入 | 关键点纵坐标。 |
| name | 输入 | 关键点名称。 |
| score | 输入 | 关键点置信度。 |
MxMetaHeader
Stream流中插件之间流转数据的数据头的信息。
struct MxMetaHeader {
std::string parentName;
int32_t memberId;
std::string dataSource;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| parentName | 输入 | 数据的信息来源。 |
| memberId | 输入 | 数据的编号索引。 |
| dataSource | 输入 | 数据的信息来源,意同parentName,推荐使用。 |
MxObject
Stream流中插件之间流转的目标检测数据信息。
struct MxObject{
std::vector<MxMetaHeader> headers;
float x0;
float y0;
float x1;
float y1;
std::vector<MxClass> classList;
MxImageMask imageMask;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 语义分割数据信息头。 |
| x0 | 输入 | 目标框左上角横坐标。 |
| y0 | 输入 | 目标框左上角纵坐标。 |
| x1 | 输入 | 目标框右下角横坐标。 |
| y1 | 输入 | 目标框右下角纵坐标。 |
| classList | 输入 | 目标框的所有目标信息。 |
| imageMask | 输入 | 目标框内的语义分割信息。 |
MxObjectList
Stream流中插件之间流转的目标检测数据列表信息。
struct MxObjectList{
std::vector<MxObject> objectList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| objectList | 输入 | 目标检测列表信息。 |
MxPose
人体姿态估计数据信息。
struct MxPose{
std::vector<MxMetaHeader> headers;
std::vector<MxKeyPoint> keyPoints;
float score;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 姿态估计数据头信息。 |
| keyPoints | 输入 | 人体所有关键点数据集合。 |
| score | 输入 | 姿态估计置信度。 |
MxPoseList
Stream流中插件之间流转的人体姿态估计数据列表信息。
struct MxPoseList{
std::vector<MxPose> poseList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| poseList | 输入 | 人体姿态估计信息列表。 |
MxstBufferAndMetadata
推理业务输出给外部的多个键对应的protobuf信息及保留指针。
struct MxstBufferAndMetadata {
std::map<std::string, std::shared_ptr<google::protobuf::Message>> mxpiProtobufMap;
MxstBufferOutput *bufferOutput;
void *reservedPtr = nullptr;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiProtobufMap | 输入 | 对应键输出的protobuf信息。 |
| bufferOutput | 输入 | Stream接收的buffer数据结构定义。 |
| reservedPtr | 输入 | 保留指针数据。 |
MxstBufferAndMetadataOutput
Stream接收的buffer和元数据结构定义。
struct MxstBufferAndMetadataOutput {
APP_ERROR errorCode = APP_ERR_OK;
std::string errorMsg;
std::shared_ptr<MxstBufferOutput> bufferOutput;
std::vector<MxstMetadataOutput> metadataVec;
void *reservedPtr = nullptr;
MxstBufferAndMetadataOutput() = default;
explicit MxstBufferAndMetadataOutput(APP_ERROR errorCode, const std::string& errorMsg = "")
: errorCode(errorCode), errorMsg(std::move(errorMsg)) {}
void SetErrorInfo(APP_ERROR errorCodeIn, const std::string& errorMsgIn)
{
errorCode = errorCodeIn;
errorMsg = errorMsgIn;
}
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| errorCode | 输入 | 错误码。 |
| errorMsg | 输入 | 错误信息。 |
| bufferOutput | 输入 | 输出buffer对应的智能指针,内部数据结构为MxstBufferOutput。 |
| metadataVec | 输入 | 输出元数据的vector。 |
| reservedPtr | 输入 | 预留指针。 |
MxstBufferInput
Stream接收的数据结构定义。
struct MxstBufferInput {
MxTools::MxpiFrameInfo mxpiFrameInfo;
MxTools::MxpiVisionInfo mxpiVisionInfo;
int dataSize = 0;
uint32_t *dataPtr = nullptr;
void *reservedPtr = nullptr;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiFrameInfo | 输入 | 输入Frame数据。 |
| mxpiVisionInfo | 输入 | 输入图片数据。 |
| dataSize | 输入 | 图像数据大小。dataSize大小需要和图像实际大小一致,否则可能会导致coredump。 |
| dataPtr | 输入 | 图像数据指针。 |
| reservedPtr | 输入 | 预留指针。 |
MxstBufferOutput
Stream接收的buffer数据结构定义。
struct MxstBufferOutput {
APP_ERROR errorCode = APP_ERR_OK;
std::string errorMsg;
int dataSize = 0;
uint32_t *dataPtr = nullptr;
void *reservedPtr = nullptr;
MxTools::MxpiFrameInfo mxpiFrameInfo;
MxstBufferOutput() = default;
explicit MxstBufferOutput(APP_ERROR errorCode, const std::string& errorMsg = "")
: errorCode(errorCode), errorMsg(std::move(errorMsg)) {}
MxstBufferOutput(const MxstBufferOutput&) = delete;
MxstBufferOutput& operator=(const MxstBufferOutput&) = delete;
void SetErrorInfo(APP_ERROR errorCodeIn, const std::string& errorMsgIn)
{
errorCode = errorCodeIn;
errorMsg = errorMsgIn;
}
~MxstBufferOutput()
{
if (dataPtr != nullptr) {
free(dataPtr);
dataPtr = nullptr;
}
}
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| errorCode | 输入 | 错误码。 |
| errorMsg | 输入 | 错误信息。 |
| dataSize | 输入 | 输出buffer的数据大小。大小应与buffer实际的数据大小一致,否则可能导致coredump。 |
| dataPtr | 输入 | 输出buffer的数据指针。 |
| mxpiFrameInfo | 输入 | 输出buffer的基础信息。 |
| reservedPtr | 输入 | 预留指针。 |
MxstDataInput
Stream接收的数据结构定义。
struct MxstDataInput {
MxstServiceInfo serviceInfo;
int dataSize = 0;
uint32_t* dataPtr = nullptr;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| serviceInfo | 输入 | 推理服务数据。 |
| dataSize | 输入 | 图像数据大小。该值需要和图像实际大小一致,否则可能导致coredump。 |
| dataPtr | 输入 | 图像数据指针。 |
MxstDataOutput
推理业务输出数据定义。
struct MxstDataOutput {
APP_ERROR errorCode = APP_ERR_OK;
int dataSize = 0;
uint32_t *dataPtr = nullptr;
MxstDataOutput() = default;
MxstDataOutput(const MxstDataOutput&) = delete;
MxstDataOutput& operator=(const MxstDataOutput&) = delete;
~MxstDataOutput()
{
if (dataPtr != nullptr) {
free(dataPtr);
dataPtr = nullptr;
}
}
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| errorCode | 输出 | 输出错误码。 |
| dataSize | 输出 | 输出结果数据大小,单位为Byte。大小应与实际结果数据大小一致,否则可能导致coredump。 |
| dataPtr | 输出 | 输出结果数据指针。 |
MxstFrameExternalInfo
推理业务接收的外部信息。
struct MxstFrameExternalInfo {
uint64_t uniqueId;
int fragmentId;
std::string customParam;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| uniqueId | 输入 | 数据唯一标识。 |
| fragmentId | 输入 | 分块ID。 |
| customParam | 输入 | 输出结果数据指针。 |
MxstMetadataInput
Stream接收的元数据结构定义。
struct MxstMetadataInput {
std::string dataSource;
std::shared_ptr<google::protobuf::Message> messagePtr;
void *reservedPtr = nullptr;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dataSource | 输入 | 挂载元数据时使用的dataSource,用于下游插件获取元数据。 |
| messagePtr | 输入 | 元数据对应的智能指针。 |
| reservedPtr | 输入 | 预留指针。 |
MxstMetadataOutput
Stream接收的buffer和元数据结构定义。
struct MxstMetadataOutput {
APP_ERROR errorCode = APP_ERR_OK;
std::string errorMsg;
std::string dataType;
std::shared_ptr<google::protobuf::Message> dataPtr;
void *reservedPtr = nullptr;
MxstMetadataOutput() = default;
explicit MxstMetadataOutput(const std::string& dataType)
: dataType(std::move(dataType)) {}
explicit MxstMetadataOutput(APP_ERROR errorCode, const std::string& errorMsg = "")
: errorCode(errorCode), errorMsg(std::move(errorMsg)) {}
void SetErrorInfo(APP_ERROR errorCodeIn, const std::string& errorMsgIn)
{
errorCode = errorCodeIn;
errorMsg = errorMsgIn;
}
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| errorCode | 输入 | 错误码。 |
| errorMsg | 输入 | 错误信息。 |
| dataType | 输入 | 元数据类型,即protobuf定义的message名称。 |
| dataPtr | 输入 | 输出元数据的智能指针。 |
| reservedPtr | 输入 | 预留指针。 |
MxstProtobufAndBuffer
推理业务输出给外部的多个键对应的protobuf信息。
struct MxstProtobufAndBuffer {
std::map<std::string, std::shared_ptr<google::protobuf::Message>> mxpiProtobufMap;
MxstDataOutput *dataOutput;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiProtobufMap | 输入 | 对应键输出的protobuf信息。 |
| dataOutput | 输入 | 推理业务输出数据定义。 |
MxstProtobufIn
推理业务接收的外部protobuf信息。
struct MxstProtobufIn {
std::string key;
std::shared_ptr<google::protobuf::Message> messagePtr;
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| key | 输入 | protobuf数据的key。 |
| messagePtr | 输入 | 输入protobuf数据智能指针。 |
MxstProtobufOut
推理业务输出给外部的protobuf信息。
struct MxstProtobufOut {
APP_ERROR errorCode = APP_ERR_OK;
std::string messageName;
std::shared_ptr<google::protobuf::Message> messagePtr;
MxstProtobufOut() = default;
explicit MxstProtobufOut(APP_ERROR errorCode, const std::string& messageName = "")
: errorCode(errorCode), messageName(std::move(messageName)) {}
};
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| errorCode | 输入 | 输出错误码。 |
| messageName | 输入 | 输出结果protobuf数据的key。 |
| messagePtr | 输入 | 输出结果protobuf数据智能指针。 |
MxstServiceInfo
推理服务发送请求。
struct MxstServiceInfo {
int fragmentId;
std::string customParam;
std::vector<CropRoiBox> roiBoxs;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| fragmentId | 输入 | 分块ID。 |
| customParam | 输入 | 自定义的参数。 |
| roiBoxs | 输入 | 裁剪框坐标数组。 |
MxTensor
Stream流中插件之间流转的张量数据信息。
struct MxTensor{
uint64_t tensorDataPtr;
int32_t tensorDataSize;
uint32_t deviceId;
MxBase::MemoryData::MemoryType memType;
uint64_t freeFunc;
std::vector<int32_t> tensorShape;
std::string dataStr;
int32_t tensorDataType;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensorDataPtr | 输入 | 张量信息的数据指针。 |
| tensorDataSize | 输入 | 张量信息的数据量(以字节为单位)。 |
| deviceId | 输入 | 张量所在的设备号。 |
| memType | 输入 | 数据的内存类型,参考MemoryData。 |
| freeFunc | 输入 | Tensor数据的释放函数的指针。 |
| tensorShape | 输入 | 张量的shape信息。 |
| dataStr | 输入 | 张量的实际内存数据。 |
| tensorDataType | 输入 | 张量的数据类型,参考MxDataType。 |
MxTensorPackage
Stream流中插件之间流转的MxTensor包数据信息。(以batch维度组装MxTensor信息。)
struct MxTensorPackage{
std::vector<MxMetaHeader> headers;
std::vector<MxTensor> tensors;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | MxTensor张量包数据的数据头信息。 |
| tensors | 输入 | MxTensor列表信息。 |
MxTensorPackageList
Stream流中插件之间流转的张量包数据列表信息。
struct MxTensorPackageList{
std::vector<MxTensorPackage> tensorPackageList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensorPackageList | 输入 | 张量包数据列表。 |
MxTextObject
文本目标数据信息。
struct MxTextObject{
std::vector<MxMetaHeader> headers;
float x0;
float y0;
float x1;
float y1;
float x2;
float y2;
float x3;
float y3;
float confidence;
std::string text;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 文本目标数据头信息。 |
| x0 | 输入 | 文本目标框的左下角横坐标。 |
| y0 | 输入 | 文本目标框的左下角纵坐标。 |
| x1 | 输入 | 文本目标框的右下角横坐标。 |
| y1 | 输入 | 文本目标框的右下角纵坐标。 |
| x2 | 输入 | 文本目标框的右上角横坐标。 |
| y2 | 输入 | 文本目标框的右上角纵坐标。 |
| x3 | 输入 | 文本目标框的左上角横坐标。 |
| y3 | 输入 | 文本目标框的左上角纵坐标。 |
| confidence | 输入 | 文本目标框的置信度。 |
| text | 输入 | 文本目标框的检测文本的信息。 |
MxTextObjectList
Stream流中插件之间流转的文本目标数据列表信息。
struct MxTextObjectList {
std::vector<MxTextObject> textObjectList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| textObjectList | 输入 | 文本目标数据列表信息。 |
MxTextsInfo
文本生成数据信息。
struct MxTextsInfo{
std::vector<MxMetaHeader> headers;
std::vector<std::string> text;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 文本生成数据头信息。 |
| text | 输入 | 文本生成的数据字符串。 |
MxTextsInfoList
Stream流中插件之间流转的文本生成数据列表信息。
struct MxTextsInfoList{
std::vector<MxTextsInfo> textsInfoList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| textsInfoList | 输入 | 文本生成数据列表信息。 |
MxVision
Stream流中插件之间流转的视觉数据信息。
struct MxVision {
std::vector<MxMetaHeader> headers;
MxVisionInfo visionInfo;
MxVisionData visionData;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| headers | 输入 | 视觉数据头信息。 |
| visionInfo | 输入 | 视觉数据的形态信息。 |
| visionData | 输入 | 视觉数据的实际数据信息。 |
MxVisionData
Stream流中插件之间流转的视觉数据的数据信息。
struct MxVisionData {
uint64_t dataPtr;
int32_t dataSize;
uint32_t deviceId;
MxBase::MemoryData::MemoryType memType;
uint32_t freeFunc;
std::string dataStr;
MxDataType dataType;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dataPtr | 输入 | 视频/图像数据内容。dataPtr需由视频/图像数据内容指针转换成uint64类型,不可直接构造。 |
| dataSize | 输入 | 数据量大小(以字节为单位)。 |
| deviceId | 输入 | 数据所在的设备号。 |
| memType | 输入 | 数据的内存类型,参考MemoryData。 |
| freeFunc | 输入 | 数据的对应释放函数。freeFunc需由数据的对应释放函数指针转换成uint32类型,不可直接构造。 |
| dataStr | 输入 | 视觉数据。 |
| dataType | 输入 | 数据类型。 |
MxVisionInfo
Stream流中插件之间流转的视觉数据的形态信息。
struct MxVisionInfo {
uint32_t format;
uint32_t width;
uint32_t height;
uint32_t widthAligned;
uint32_t heightAligned;
uint32_t resizeType;
float keepAspectRatioScaling;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| format | 输入 | 视觉数据的类型,参考MxbasePixelFormat。 |
| width | 输入 | 数据的宽。 |
| height | 输入 | 数据的高。 |
| widthAligned | 输入 | 数据对齐后的宽。 |
| heightAligned | 输入 | 数据对齐后的高。 |
| resizeType | 输入 | 缩放类型,参考ResizedImageInfo中的resizeType字段。 |
| keepAspectRatioScaling | 输入 | 缩放比率。 |
MxVisionList
Stream流中插件之间流转的视觉数据列表。
struct MxVisionList {
std::vector<MxVision> visionList;
}
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| visionList | 输入 | 视觉数据列表。 |
NetInfo
整个YOLOv3网络的属性。
struct NetInfo {
int anchorDim;
int classNum;
int bboxDim;
int netWidth;
int netHeight;
std::vector<OutputLayer> outputLayers;
};
struct NetInfo {
int anchorDim;
int classNum;
int bboxDim;
int netWidth;
int netHeight;
};
| 参数名 | 说明 |
|---|---|
| anchorDim | 先验框的个数。 |
| classNum | 模型可预测的类别数。 |
| bboxDim | 目标框的维度,一般为4。 |
| netWidth | 模型输入的宽。 |
| netHeight | 模型输入的高。 |
| outputLayers | YOLOv3每个输出池所对应的信息(先验框的属性)。 |
ObjDetectInfo
图片目标检测信息。
struct ObjDetectInfo {
float x0 = 0;
float y0 = 0;
float x1 = 0;
float y1 = 0;
float confidence = 0;
float classId = 0;
void *maskPtr;
};
struct ObjDetectInfo {
float x0;
float y0;
float x1;
float y1;
float confidence;
float classId;
};
| 参数名 | 说明 |
|---|---|
| x0 | 左上角横坐标。 |
| y0 | 左上角纵坐标。 |
| x1 | 右下角横坐标。 |
| y1 | 右下角纵坐标。 |
| confidence | 置信度。 |
| classId | 类ID。 |
| maskPtr | 实例分割需要使用的掩码。 |
OutputLayer
YOLOv3每个输出池所对应的信息。包括宽高维度的网格数和先验框的大小。
struct OutputLayer {
int layerIdx;
int width;
int height;
float anchors[6];
};
struct OutputLayer {
size_t width;
size_t height;
float anchors[ANCHOR_NUM]; // ANCHOR_NUM = 6
};
| 参数名 | 说明 |
|---|---|
| layerIdx | YOLOv3每个输出池的索引。 |
| width | 先验框在宽维度的网格数。 |
| height | 先验框在高维度的网格数。 |
| anchors | 先验框的大小。 |
StreamState
定义Stream的生命周期状态枚举类型,内部使用。
enum StreamState {
STREAM_STATE_NORMAL = 0,
STREAM_STATE_NEW,
STREAM_STATE_BUILD_INPROGRESS,
STREAM_STATE_BUILD_FAILED,
STREAM_STATE_DESTROY,
};
| 参数名 | 说明 |
|---|---|
| STREAM_STATE_NORMAL | stream正常运行中。 |
| STREAM_STATE_NEW | stream初始化。 |
| STREAM_STATE_BUILD_INPROGRESS | stream构建中。 |
| STREAM_STATE_BUILD_FAILED | stream构建失败。 |
| STREAM_STATE_DESTROY | stream销毁。 |
插件状态枚举
定义插件状态为同步模式或异步模式。
enum {
ASYNC = 0,
SYNC = 1,
};
| 参数名 | 说明 |
|---|---|
| ASYNC | 插件状态为异步模式。 |
| SYNC | 插件状态为同步模式。 |
基础组件层
MemoryHelper
类说明
该类负责Host侧和Device侧内存的管理:分配、初始化、移动和释放。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
CheckDataSize
检测MemoryData对象内存大小是否符合要求。内存大小不允许为0字节。
static APP_ERROR MemoryHelper::CheckDataSize(long size);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| size | 输入 | MemoryData对象内存大小,检查范围为[1, 4294967296],单位:字节。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CheckDataSizeAllowZero
检测MemoryData对象内存大小是否符合要求。内存大小允许为0字节。
static APP_ERROR MemoryHelper::CheckDataSizeAllowZero(long size);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| size | 输入 | MemoryData对象内存大小,检查范围为[0, 4294967296],单位:字节。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MakeShared
使用std::make_shared创建对象,创建失败时返回空指针。
template<typename T, typename... Args>
static std::shared_ptr<T> MakeShared(Args && ... args);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| T | 输入 | 对象类名。 |
| args | 输入 | 创建的T对象构造函数参数。 |
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr | 创建的指针对象。 |
MxbsFree
[!NOTICE] 当采用该API进行内存销毁时,需要确保待销毁的内存未被手动执行free等销毁函数,否则可能出现double free的情况。
释放指定内存。
static APP_ERROR MemoryHelper::MxbsFree(MemoryData& data);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| data | 输入 | 待释放的内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxbsMalloc
内存分配函数,通过给MemoryData结构体type赋值,确定内存是Host、Device或者DVPP。通过MemoryData中的size,指定内存大小。通过MemoryData中的deviceId,指定Device内存ID。需要销毁申请的内存时,用户自行搭配MxbsFree函数进行销毁。
static APP_ERROR MemoryHelper::MxbsMalloc(MemoryData& data);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| data | 输入 | 待分配的内存数据。其输入是内存的类型和大小,分别赋值到data.type , data.size,输出是分配的内存指针,赋值到data.ptrData。data.size取值范围为[1, 4294967296]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxbsMallocAndCopy
内存复制函数,根据MemoryData中指定的内存位置在Host侧和Device侧之间进行dest内存申请及复制。
static APP_ERROR MemoryHelper::MxbsMallocAndCopy(MemoryData& dest, const MemoryData& src);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dest | 输入 | 待复制的目标内存。 |
| src | 输入 | 待复制的源内存。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxbsMemcpy
内存复制函数,根据MemoryData中指定的内存位置在Host侧和Device侧之间进行复制。
Note
由于Memcpy和系统函数重名,建议优先使用MxbsMemcpy函数。
static APP_ERROR MemoryHelper::MxbsMemcpy (MemoryData& dest, const MemoryData& src, size_t count);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dest | 输入 | 待复制的目标内存。dest.ptrData不能为空指针。 |
| src | 输入 | 待复制的源内存。src.ptrData不能为空指针。 |
| count | 输入 | 复制的数据长度。长度的设置应参考目标内存及源内存长度,错误的设置可能会导致出现coredump情况。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxbsMemset
内存设置函数。
Note
由于Memset和系统函数重名,建议优先使用MxbsMemset函数。
static APP_ERROR MemoryHelper::MxbsMemset(MemoryData& data, int32_t value, size_t count);
static APP_ERROR MemoryHelper::MxbsMemset(MemoryData& data, int32_t value, size_t count, AscendStream &stream);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| data | 输入 | 待设置的内存数据。data.size取值范围为[1, 4294967296]。 |
| value | 输入 | 设置的值。 |
| count | 输入 | 设置的数据长度。长度不可大于内存实际长度,否则可能会导致出现coredump情况。 |
| stream | 输入 | AscendStream类型,当参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetMaxDataSize
设置MemoryData对象所允许的最大内存大小。
static APP_ERROR MemoryHelper::SetMaxDataSize(long size);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| size | 输入 | 最大内存大小,单位:字节。(限制范围:1 ≤ size ≤ 4294967296) |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppWrapper
类说明
该类封装DVPP基本的编码、解码、抠图和缩放功能,Atlas 推理系列产品支持异步推理。
预计2025年12月正式删除,该类为内部类,不再对外开放。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
DVPP去初始化函数,用于完成相关资源的释放,必须与Init接口搭配使用。
适用于除了视频解码、视频编码以外的其他功能(视频解码的去初始化须使用DeInitVdec,视频编码的去初始化须使用DeInitVenc)。
APP_ERROR DvppWrapper::DeInit(void);
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeInitVdec
DVPP视频解码去初始化函数,用于完成相关资源的释放,必须与InitVdec接口搭配使用。
APP_ERROR DvppWrapper::DeInitVdec();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeInitVenc
DVPP视频编码去初始化函数,用于完成相关资源的释放,必须与InitVenc接口搭配使用。
APP_ERROR DvppWrapper::DeInitVenc();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppPngDecode
用于实现DVPP对PNG格式的解码,调用该接口前必须调用Init接口来实现该功能的初始化。
该函数的输入参数约束请参见Decode。
APP_ERROR DvppWrapper::DvppPngDecode(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo);
APP_ERROR DvppWrapper::DvppPngDecode(const std::string& inputPicPath, DvppDataInfo& outputDataInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 被解码的数据。 |
| inputPicPath | 输入 | 被解码的图片路径。 |
| outputDataInfo | 输出 | 解码后的输出数据。outputDataInfo.dataSize取值范围为[1, 4294967296]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppJpegEncode
用于实现DVPP对JPEG格式的编码,调用该接口前必须调用Init接口来实现该功能的初始化。
- 输入数据的最大分辨率:8192 * 8192。
- 输入数据的最小分辨率:32 * 32。
- 输入数据格式:
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
APP_ERROR DvppWrapper::DvppJpegEncode(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, uint32_t encodeLevel);
APP_ERROR DvppWrapper::DvppJpegEncode(DvppDataInfo& inputDataInfo, std::string outputPicPath, std::string outputPicName, uint32_t encodeLevel);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 输入的待编码数据。 |
| outputDataInfo | 输出 | 编码后的输出。 |
| outputPicPath | 输入 | 生成的图片路径。 |
| outputPicName | 输入 | 生成的图片名称。最终生成的图片会自动生成.jpg后缀,若目标路径中已存在同名的.jpg格式的文件,生成的图片将覆盖原文件。 |
| encodeLevel | 输入 | 编码质量范围[0, 100],其中level 0编码质量与level 100差不多,而在[1, 100]内数值越小输出图片质量越差。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppJpegDecode
用于实现DVPP对JPEG格式的解码,调用该接口前必须调用Init接口来实现该功能的初始化。
APP_ERROR DvppWrapper::DvppJpegDecode(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo);
APP_ERROR DvppWrapper::DvppJpegDecode(const std::string& inputPicPath, DvppDataInfo& outputDataInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 被解码的数据。 |
| inputPicPath | 输入 | 被解码的图片路径。 |
| outputDataInfo | 输出 | 解码后的输出数据。outputDataInfo.dataSize取值范围为[1, 4294967296]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppJpegDecodeWithAdaptation
用于Atlas 推理系列产品实现DVPP对JPEG格式的解码,调用该接口前必须调用Init接口来实现该功能的初始化。像素格式为“HI_PIXEL_FORMAT_UNKNOWN”。
APP_ERROR DvppWrapper::DvppJpegDecodeWithAdaptation(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 被解码的数据。 |
| outputDataInfo | 输出 | 解码后的输出数据。outputDataInfo.dataSize取值范围为[1, 4294967296]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppJpegConvertColor
用于Atlas 推理系列产品实现DVPP对JPEG的bgr色域转换,调用该接口前必须调用Init接口来实现该功能的初始化。
- 当前支持的输入数据的格式支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888。
- 输入数据的原图宽高大小范围:32 * 6 ~ 4096 * 4096。
- 输出数据的宽自动与16对齐,高与2对齐,因此宽高范围为:32 * 6 ~ 4096 * 4096。
- 输出数据宽高保持与输入数据一致。
- 请确保转换前的格式与转换后的格式不同。
APP_ERROR DvppWrapper::DvppJpegConvertColor(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 被解码的数据。 |
| outputDataInfo | 输出 | 解码后的输出数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppJpegPredictDecSize
根据存放JPEG图片数据的内存预估JPEG图片解码后所需的输出内存的大小。
APP_ERROR DvppWrapper::DvppJpegPredictDecSize(const void *imageData, uint32_t dataSize, MxbasePixelFormat outputPixelFormat, uint32_t &decSize);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| imageData | 输入 | Host上存放JPEG图片数据的内存地址,不能为Device侧内存地址。 |
| dataSize | 输入 | 内存大小,单位为Byte。 |
| outputPixelFormat | 输入 | 解码后的输出图片的格式。 |
| decSize | 输出 | 预估JPEG图片解码后所需的输出内存的大小,单位Byte。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppVdec
用于实现DVPP对H.264/H.265格式视频的解码,调用该接口前必须调用InitVdec接口来实现视频解码功能的初始化。
APP_ERROR DvppWrapper::DvppVdec(DvppDataInfo& inputDataInfo, void* userData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 被解码的数据。 |
| userData | 输入 | 用户自定义数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppVdecFlush
发送完所有码流后,获取缓存数据并清空缓存队列,接口调用完成后将结束解码过程。
APP_ERROR DvppWrapper::DvppVdecFlush();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppVenc
用于实现DVPP对H.264/H.265格式视频的编码,调用该接口前必须调用InitVenc接口来实现视频编码功能的初始化。
APP_ERROR DvppWrapper::DvppVenc(DvppDataInfo& inputDataInfo,std::function<void(std::shared_ptr<uint8_t>, uint32_t)>* handleFunc);
APP_ERROR DvppWrapper::DvppVenc(DvppDataInfo& inputDataInfo,std::function<void(std::shared_ptr<uint8_t>, uint32_t, void**)>* handleFunc);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 被编码的数据。 |
| handleFunc | 输入 | 回调函数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DvppWrapper
[!NOTICE] 如出现因内存耗尽或设备不支持(设备为非Atlas 推理服务器系列产品、Atlas 200I/500 A2 推理产品、Atlas 推理系列产品),导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
类构造函数,创建DvppWrapper对象(数字视觉预处理)。
DvppWrapper::DvppWrapper();
~DvppWrapper
DvppWrapper类的默认析构函数。
virtual DvppWrapper::~DvppWrapper(){}
GetPictureDec
获取输入图像的宽、高和颜色通道个数。
APP_ERROR DvppWrapper::GetPictureDec(DvppImageInfo& imageInfo, DvppImageOutput& imageOutput);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| imageInfo | 输入 | 输入图片的格式、存放JPEG图片数据的内存的地址和内存大小(单位为Byte)。JPEG图片数据的内存地址要求为Host侧地址,不能为DVPP侧内存。 |
| imageOutput | 输出 | 图像的宽、高以及颜色通道个数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
DVPP初始化函数,必须与DeInit接口搭配使用。
适用于除了视频解码、视频编码以外的其他功能(视频解码的初始化须使用InitVdec,视频编码的初始化必须使用InitVenc)。初始化后必须调用对应功能的去初始化函数来释放资源。
APP_ERROR DvppWrapper::Init(void); //Atlas 200I/500 A2 推理产品环境下使用
APP_ERROR DvppWrapper::Init(MxbaseDvppChannelMode dvppChannelMode); // Atlas 200I/500 A2 推理产品、Atlas 推理系列产品环境下通用
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dvppChannelMode | 输入 | 通道模式。 MXBASE_DVPP_CHNMODE_VPC = 1 // 抠图、缩放 MXBASE_DVPP_CHNMODE_JPEGD = 2 // 图像解码 MXBASE_DVPP_CHNMODE_JPEGE = 3 // 图像编码 MXBASE_DVPP_CHNMODE_PNGD = 4 // PNG解码 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitJpegDecodeChannel
初始化JPEG图像通道,用于JPEG解码。
APP_ERROR DvppWrapper::InitJpegDecodeChannel(const JpegDecodeChnConfig& config);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数。 对应数据结构参见如下(当前预留)。 struct JpegDecodeChnConfig {}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitJpegEncodeChannel
初始化JPEG图像通道,用于JPEG编码。
APP_ERROR DvppWrapper::InitJpegEncodeChannel(const JpegEncodeChnConfig& config);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数,取值范围为[32, 8192],(即图像最大宽高为8192 * 8192)。仅对Atlas 推理系列产品生效。对于Atlas 200I/500 A2 推理产品,该配置无效。 当前仅支持配置图片编码的通道宽高(maxPicWidth、maxPicHeight),内部自动16对齐,当高小于宽时,高自动向上对齐到宽的长度,请根据实际编码场景图片预留适当的宽高。 对应数据结构参见如下。 struct JpegEncodeChnConfig { uint32_t maxPicWidth = MAX_HIMPI_VENC_PIC_WIDTH; uint32_t maxPicHeight = MAX_HIMPI_VENC_PIC_HEIGHT;}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitPngDecodeChannel
初始化PNGD图像通道,用于PNG图片解码。
APP_ERROR DvppWrapper::InitPngDecodeChannel(const PngDecodeChnConfig& config);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数。 对应数据结构参见如下(当前预留)。 struct PngDecodeChnConfig {}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitVdec
DVPP视频解码初始化函数,用于完成相关资源的申请,必须与DeInitVdec接口搭配使用。
Note
该接口会注册视频解码相关线程:
- 对于Atlas 200I/500 A2 推理产品,线程命名为:“mx_vdec_acl”。
- 对于Atlas 推理系列产品,线程命名为:“mx_vdec_himpi”。
APP_ERROR DvppWrapper::InitVdec(VdecConfig& vdecConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| vdecConfig | 输入 | 视频解码的配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitVenc
DVPP视频编码初始化函数,用于完成相关资源的申请,必须与DeInitVenc接口搭配使用。
Note
该接口会注册视频编码相关线程:
- 对于Atlas 200I/500 A2 推理产品,线程命名为:“mx_venc_acl”。
- 对于Atlas 推理系列产品,线程命名为:“mx_venc_himpi”。
APP_ERROR DvppWrapper::InitVenc(VencConfig vencConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| vencConfig | 输入 | 视频编码的配置参数。vencConfig.keyFrameInterval参数不能为0。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitVpcChannel
初始化VPC图像通道,用于图像处理功能(抠图、缩放、补边、抠图缩放、抠图贴图、色域转换)。
APP_ERROR DvppWrapper::InitVpcChannel(const VpcChnConfig& config);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数。对应数据结构参见如下(当前预留)。struct VpcChnConfig {}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcBatchCrop
用于实现批量抠图功能,调用该接口前必须调用Init接口来实现该功能的初始化。
-
输入输出数据支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
“inputDataInfo”的真实图片分辨率范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的分辨率为18 * 6 ~ 8192 * 8192。
-
抠图区域不超出输入图像区域,输入抠图坐标框“cropConfig”的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
抠图区域的最大分辨率为4096 * 4096,最小分辨率为18 * 6。例如:cropConfig{1, 1, 1287, 1287},实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
APP_ERROR DvppWrapper::VpcBatchCrop(DvppDataInfo& inputDataInfo, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, AscendStream& stream);
APP_ERROR DvppWrapper::VpcBatchCrop(DvppDataInfo& inputDataInfo, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec);
APP_ERROR DvppWrapper::VpcBatchCrop(std::vector<DvppDataInfo>& inputDataInfoVec, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, AscendStream& stream);
APP_ERROR DvppWrapper::VpcBatchCrop(std::vector<DvppDataInfo>& inputDataInfoVec, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 待抠图的数据。 |
| inputDataInfoVec | 输入 | 待抠图的一组数据。 |
| outputDataInfoVec | 输出 | 抠图后输出的一组数据。长度不为0。 |
| cropConfigVec | 输入 | 抠图配置组。长度要求与outputDataInfoVec一致。数组中单个配置要求和VpcCrop方法的cropConfig一致。具体请参见CropRoiConfig。 |
| stream | 输入 | AscendStream类型,当不输入AscendStream& stream或者参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcBatchCropMN
用于实现图像处理批量抠图功能,调用该接口前必须调用Init接口来实现该功能的初始化。
-
输入输出数据支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
每一个输入数据的真实分辨率范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的分辨率为18 * 6 ~ 8192 * 8192。
-
抠图区域不超出输入图像区域,每个输入抠图坐标框的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
抠图区域的最大分辨率为4096 * 4096,最小分辨率为18 * 6。例如:cropConfig{1, 1, 1287, 1287},实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
APP_ERROR DvppWrapper::VpcBatchCropMN(std::vector<DvppDataInfo>& inputDataInfoVec, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, AscendStream& stream);
APP_ERROR DvppWrapper::VpcBatchCropMN(std::vector<DvppDataInfo>& inputDataInfoVec, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfoVec | 输入 | 待抠图的一组数据。数组长度不超过12。 |
| outputDataInfoVec | 输出 | 抠图后输出的一组数据。长度不为0,长度为inputDataInfoVec与cropConfigVec的乘积。数组长度不超过256。 |
| cropConfigVec | 输入 | 抠图配置组。数组长度不超过256。具体请参见CropRoiConfig。 |
| stream | 输入 | AscendStream类型,当不输入AscendStream& stream或者参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcBatchCropResize
用于完成批量抠图和大小缩放,调用该接口前必须调用Init接口来实现该功能的初始化。
-
输入输出数据支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
输入数据的真实图片宽高大小范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
-
抠图区域的最小为10 * 6,抠图区域不能超出输入数据的真实图像宽高,每个输入抠图坐标框的四个值推荐均为偶数。
除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。例如:cropRect{1, 1, 1287, 1287} ,实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
-
缩放的范围为18 * 6 ~ 4096 * 4096,不能超出抠图区域的[1/32, 16]倍数区间。
APP_ERROR DvppWrapper::VpcBatchCropResize(DvppDataInfo& inputDataInfo, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, ResizeConfig& resizeConfig, AscendStream& stream);
APP_ERROR DvppWrapper::VpcBatchCropResize(DvppDataInfo& inputDataInfo, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, ResizeConfig& resizeConfig);
APP_ERROR DvppWrapper::VpcBatchCropResize(DvppDataInfo& inputDataInfo, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, std::vector<ResizeConfig>& resizeConfigVec, AscendStream& stream);
APP_ERROR DvppWrapper::VpcBatchCropResize(DvppDataInfo& inputDataInfo, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, std::vector<ResizeConfig>& resizeConfigVec);
APP_ERROR DvppWrapper::VpcBatchCropResize(std::vector<DvppDataInfo>& inputDataInfoVec, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, std::vector<ResizeConfig>& resizeConfigVec, AscendStream& stream);
APP_ERROR DvppWrapper::VpcBatchCropResize(std::vector<DvppDataInfo>& inputDataInfoVec, std::vector<DvppDataInfo>& outputDataInfoVec, std::vector<CropRoiConfig>& cropConfigVec, std::vector<ResizeConfig>& resizeConfigVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 待抠图缩放的数据。 |
| inputDataInfoVec | 输入 | 待抠图缩放的一组数据。长度要求与cropConfigVec一致。 |
| cropConfigVec | 输入 | 抠图配置组。长度不能为0。具体请参见CropRoiConfig。 |
| resizeConfigVec | 输入 | 缩放配置组。长度要求与cropConfigVec一致。 |
| outputDataInfoVec | 输出 | 抠图后的输出数据组。长度要求与cropConfigVec一致。数组中单个配置要求和VpcCrop方法的cropConfig一致。 |
| stream | 输入 | AscendStream类型,当不输入AscendStream& stream或者参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcCrop
用于实现抠图功能,调用该接口前必须调用Init接口来实现该功能的初始化。
-
输入输出数据支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
“inputDataInfo”的真实图片分辨率范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的分辨率为18 * 6 ~ 8192 * 8192。
-
抠图区域不超出输入图像区域,输入抠图坐标框“cropConfig”的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
抠图区域的最大分辨率为4096 * 4096,最小分辨率为18 * 6。例如:cropConfig{1, 1, 1287, 1287},实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
APP_ERROR DvppWrapper::VpcCrop(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, CropRoiConfig& cropConfig, AscendStream& stream);
APP_ERROR DvppWrapper::VpcCrop(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, CropRoiConfig& cropConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 待抠图的数据。 |
| outputDataInfo | 输出 | 抠图后的数据。 |
| cropConfig | 输入 | 抠图配置。抠图配置约束:cropConfig.x1要大于cropConfig.x0,且不能超过图片宽度。抠图宽度最小为10,最大为图片宽度。cropConfig.y1要大于cropConfig.y0,且不能超过图片高度。抠图高度最小为6,最大为图片高度。 |
| stream | 输入 | AscendStream类型,当不输入AscendStream& stream或者参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcCropAndPaste
用于实现抠图并贴图功能,调用该接口前必须调用Init接口来实现该功能的初始化。
-
输入输出数据支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
输入数据的真实图片宽高大小范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
-
抠图宽高范围不能超过“inputDataInfo”的真实图片宽高,抠图区域的范围最小为:10 * 6。输入抠图参数的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。例如:cropRoi{1, 1, 1287, 1287} ,实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288。
-
贴图区域的宽高范围不能超过“outputDataInfo”的真实图片宽高,贴图区域的范围最小为: 10 * 6 ,最大为:4096 * 4096。
-
输入贴图参数的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
在Atlas 200I/500 A2 推理产品环境下,贴图宽高不能超过抠图宽高的[1/32, 16]倍数区间。
-
输出的“outputDataInfo”宽自动与16对齐,高与2对齐,因此宽高范围为:32 * 6 ~ 4096 * 4096。
APP_ERROR DvppWrapper::VpcCropAndPaste(const DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, CropRoiConfig& pasteRoi, CropRoiConfig& cropRoi, AscendStream& stream)
APP_ERROR DvppWrapper::VpcCropAndPaste(const DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, CropRoiConfig& pasteRoi, CropRoiConfig& cropRoi);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 原始图片相关信息。 |
| outputDataInfo | 输出 | 返回贴图相关信息。 |
| pasteRoi | 输入 | 贴图区域。 |
| cropRoi | 输入 | 原始图片抠图区域。 |
| stream | 输入 | AscendStream类型,当不输入AscendStream& stream或者参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcPadding
用于实现图像处理补边功能,调用该接口前必须调用Init接口来实现该功能的初始化。
- 输入输出Image类支持的图像格式为YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
- “inputImage”的真实图片分辨率范围:18 * 6 ~ 4096 * 4096。
- 当前接口仅支持“BORDER_CONSTANT”补边方式,其余补边方式预留接口。YUV_SP_420和YVU_SP_420格式,补边尺寸建议为偶数,当补边尺寸为奇数时,会自动进行向上对齐。例如,用户输入补边尺寸为(1, 1, 1, 1),将自动对齐到(2, 2, 2, 2),上下左右各补2个像素点。当输入图片分辨率为4095 * 4095,补边尺寸为(1, 0, 1, 0)时,由于自动对齐后的补边尺寸为4097 * 4097,超出范围,因此会补边失败。
- “outputImage”分辨率为18 * 6 ~ 4096 * 4096,宽自动与16对齐,高与2对齐,范围为[32 * 6 , 4096 * 4096]。
APP_ERROR DvppWrapper::VpcPadding(DvppDataInfo &inputDataInfo, DvppDataInfo &outputDataInfo, MakeBorderConfig &makeBorderConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 待补边的数据。 |
| outputDataInfo | 输出 | 补边后的数据。 |
| makeBorderConfig | 输入 | 补边配置。YUV_SP_420和YVU_SP_420补边尺寸建议为偶数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcPictureConstrainInfoCheck
校验图片约束信息。
static APP_ERROR DvppWrapper::VpcPictureConstrainInfoCheck(const DvppDataInfo& inputDataInfo, AscendStream& stream);
static APP_ERROR DvppWrapper::VpcPictureConstrainInfoCheck(const DvppDataInfo& inputDataInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 待校验的数据。 |
| stream | 输入 | AscendStream类型,用于记录任务中产生的错误码。当输入AscendStream& stream时,错误码记录到指定的stream中;当不输入AscendStream& stream时,错误码记录到defaultstream中。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VpcResize
用于完成图片的缩放,调用该接口前必须调用Init接口来实现该功能的初始化。
-
输入输出数据支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
“inputDataInfo”的真实图像分辨率范围:[18 * 6 , 4096 * 4096],其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
-
参数“resize”的最大分辨率:4096 * 4096,最小分辨率:32 * 6。
-
“outputImage”宽自动与16对齐,高与2对齐,因此宽高范围为:[32 * 6 , 4096 * 4096]。
-
缩放后图片的宽高不能超出真实图片的[1/32 ,16]倍数区间。
APP_ERROR DvppWrapper::VpcResize(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, ResizeConfig& resizeConfig, AscendStream& stream);
APP_ERROR DvppWrapper::VpcResize(DvppDataInfo& inputDataInfo, DvppDataInfo& outputDataInfo, ResizeConfig& resizeConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputDataInfo | 输入 | 原始图片相关信息。 |
| outputDataInfo | 输出 | 缩放后的数据。 |
| resizeConfig | 输入 | 缩放配置。 |
| stream | 输入 | AscendStream类型,当不输入AscendStream& stream或者参数值为AscendStream::DefaultStream()时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ModelInferenceProcessor
类说明
该类完成模型推理功能的处理。
该接口将于2025年12月退出,请使用Model类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
用于模型推理的去初始化,完成资源释放。与Init配套使用。
APP_ERROR ModelInferenceProcessor::DeInit (void);
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetDataFormat
用于获得数据格式。
DataFormat ModelInferenceProcessor::GetDataFormat() const;
| 数据结构 | 说明 |
|---|---|
| DataFormat | 具体请参考DataFormat。 |
GetDynamicBatch
获取动态Batch。
std::vector<int64_t> ModelInferenceProcessor::GetDynamicBatch() const;
GetDynamicGearInfo
获得模型支持的动态输入档位信息,支持动态Batch、动态分辨率和分档动态维度模型。
std::vector<std::vector<uint64_t>> ModelInferenceProcessor::GetDynamicGearInfo();
| 数据结构 | 说明 |
|---|---|
| std::vector<std::vector<uint64_t>> | 模型支持的输入Tensor档位信息。 返回数据结构为空,表示获取分档信息失败或者模型不属于函数功能中描述的三种模型之一,具体的原因可查看报错信息确认。 例如,模型为动态分辨率模型,std::vector<uint64_t>为某一档的高、宽值。 |
GetDynamicImageSizes
获取动态分辨率。
const std::vector<ImageSize>& ModelInferenceProcessor::GetDynamicImageSizes() const;
| 数据结构 | 说明 |
|---|---|
| ImageSize | 具体请参考ImageSize。 |
GetDynamicType
用于获得数据动态类型,包括静态BatchSize,动态BatchSize以及ImageSize(分辨率)。
DynamicType ModelInferenceProcessor::GetDynamicType() const;
| 数据结构 | 说明 |
|---|---|
| DynamicType | 具体请参考DynamicType。 |
GetInputDataType
用于获得输入数据的类型。
std::vector<TensorDataType> ModelInferenceProcessor::GetInputDataType() const;
| 数据结构 | 说明 |
|---|---|
| std::vector<TensorDataType> | 具体请参考TensorDataType。 |
GetInputFormat
用于获得输入数据的格式。
std::vector<size_t> ModelInferenceProcessor::GetInputFormat() const;
GetInputShape
获得输入张量的形状。
std::vector<std::vector<int64_t>> ModelInferenceProcessor::GetInputShape() const;
GetModelDesc
用于获得模型描述信息。
const ModelDesc& ModelInferenceProcessor::GetModelDesc() const;
| 数据结构 | 说明 |
|---|---|
| ModelDesc | 具体请参考ModelDesc。 |
GetOutputDataType
用于获得输出数据的类型。
std::vector<TensorDataType> ModelInferenceProcessor::GetOutputDataType() const;
| 数据结构 | 说明 |
|---|---|
| std::vector<TensorDataType> | 具体请参考TensorDataType。 |
GetOutputFormat
用于获得输出数据的格式。
std::vector<size_t> ModelInferenceProcessor::GetOutputFormat() const;
GetOutputShape
获得输出张量的形状。
std::vector<std::vector<int64_t>> ModelInferenceProcessor::GetOutputShape() const;
Init
用于完成模型推理初始化。与DeInit配套使用
APP_ERROR ModelInferenceProcessor::Init (std::string modelPath, ModelDesc& modelDesc);
APP_ERROR ModelInferenceProcessor::Init (const std::string& modelPath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| modelPath | 输入 | 模型文件路径。路径上的模型要求属主为当前用户,权限不大于640。最大只支持至4GB大小的模型。 |
| modelDesc | 输出 | 模型描述信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ModelInference
用于执行模型推理。需要先执行Init方法初始化模型。
APP_ERROR ModelInferenceProcessor::ModelInference(std::vector<BaseTensor>& inputTensors, std::vector<BaseTensor>& outputTensors, size_t dynamicBatchSize = 0);
APP_ERROR ModelInferenceProcessor::ModelInference(std::vector<BaseTensor>& inputTensors, std::vector<BaseTensor>& outputTensors, DynamicInfo dynamicInfo);
APP_ERROR ModelInferenceProcessor::ModelInference(const std::vector<TensorBase>& inputTensors, std::vector<TensorBase>& outputTensors, DynamicInfo dynamicInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensors | 输入 | 输入张量,模型推理的输入数据。 |
| outputTensors | 输出 | 输出张量,模型推理的输出数据。 |
| dynamicBatchSize | 输入 | 指定模型推理时的批量大小Batch。 |
| dynamicInfo | 输入 | 动态Batch的信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ModelInferenceProcessor
[!NOTICE] 如果使用堆申请内存方式创建ModelInferenceProcessor对象,在使用结束后,请务必释放ModelInferenceProcessor对象,防止出现不可预知的错误。 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
类构造函数,创建模型推理对象。
ModelInferenceProcessor::ModelInferenceProcessor();
~ModelInferenceProcessor
ModelInferenceProcessor类的默认析构函数。
~ModelInferenceProcessor() = default;
Nms
总体说明
该类实现极大值抑制算法。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CalcIou
计算IOU值。
float CalcIou(DetectBox a, DetectBox b, IOUMethod method = UNION);
float CalcIou(ObjectInfo a, ObjectInfo b, IOUMethod method = UNION);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| a | 输入 | DetectBox(中心点) / ObjectInfo(边角点)。 |
| b | 输入 | DetectBox(中心点) / ObjectInfo(边角点)。 |
| method | 输入 | IOU计算方式: |
| 数据结构 | 说明 |
|---|---|
| float | IOU值。 |
FilterByIou
根据 IOU 值过滤目标。
void FilterByIou(std::vector<DetectBox> dets, std::vector<DetectBox>& sortBoxes, float iouThresh, IOUMethod method = UNION);
void FilterByIou(std::vector<ObjectInfo> dets, std::vector<ObjectInfo>& sortBoxes, float iouThresh, IOUMethod method = UNION);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dets | 输入 | 待过滤 DetectBox(中心点) / ObjectInfo(边角点)。 |
| sortBoxes | 输出 | 排序过的数组。 |
| iouThresh | 输入 | 过滤阈值。 |
| method | 输入 | IOU计算方式: |
NmsSort
根据置信度大小过滤重复目标。
void NmsSort(std::vector<DetectBox>& detBoxes, float iouThresh, IOUMethod method = UNION);
void NmsSort(std::vector<ObjectInfo>& detBoxes, float iouThresh, IOUMethod method = UNION);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| detBoxes | 输出 | 待过滤DetectBox(中心点) / ObjectInfo(边角点)。输出过滤后的目标信息。 |
| iouThresh | 输入 | 过滤阈值。 |
| method | 输入 | IOU计算方式: |
NmsSortByArea
根据面积大小过滤重复目标。
void NmsSortByArea(std::vector<DetectBox>& detBoxes, const float iouThresh, const IOUMethod method = UNION);
void NmsSortByArea(std::vector<ObjectInfo>& detBoxes, const float iouThresh, const IOUMethod method = UNION);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| detBoxes | 输入/输出 | 待过滤DetectBox(中心点) / ObjectInfo(边角点)。输出过滤后的目标信息。 |
| iouThresh | 输入 | 过滤阈值。 |
| method | 输入 | IOU计算方式: |
SimilarityTransform
类说明
该类实现相似变换算法。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
SimilarityTransform
类构造函数,创建相似变换类对象(图像变换的一种)。
SimilarityTransform::SimilarityTransform();
~SimilarityTransform
SimilarityTransform类的默认析构函数。
SimilarityTransform::~SimilarityTransform();
Transform
计算仿射变换矩阵。
cv::Mat SimilarityTransform::Transform(const std::vector<cv::Point2f> &srcPoint, const std::vector<cv::Point2f> &dstPoint) const
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| srcPoint | 输入 | 转换前数组。向量中point个数不超过10000,坐标范围为[0,8192]。 |
| dstPoint | 输入 | 转换后数组。长度需要与srcPoint一致。向量中point个数不超过10000,坐标范围为[0,8192]。 |
| 数据结构 | 说明 |
|---|---|
| cv::Mat | 返回仿射变换矩阵。 |
WarpAffine
类说明
该类实现仿射变换算法。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Process
进行仿射变换。
APP_ERROR WarpAffine::Process(std::vector<MxBase::DvppDataInfo> &warpAffineDataInfoInputVec, std::vector<MxBase::DvppDataInfo> &warpAffineDataInfoOutputVec, std::vector<KeyPointInfo> &keyPointInfoVec, int picHeight, int picWidth);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| warpAffineDataInfoInputVec | 输入 | 变换前图片信息列表。 |
| warpAffineDataInfoOutputVec | 输出 | 变换后图片信息列表。需要与warpAffineDataInfoInputVec元素个数一致。warpAffineDataInfoOutputVec中的数据需要由用户自行释放。 |
| keyPointInfoVec | 输入 | 关键点参数列表,用于生成目标图片尺寸的坐标位置。需要与warpAffineDataInfoInputVec元素个数一致。 |
| picHeight | 输入 | 图片高度。取值范围[32, 8192]。 |
| picWidth | 输入 | 图片宽度。取值范围[32, 8192]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
WarpAffine
类构造函数,创建仿射变换类对象(图像变换的一种)。
WarpAffine::WarpAffine();
~WarpAffine
WarpAffine类的默认析构函数。
WarpAffine::~WarpAffine();
Hungarian
总体说明
该类实现匈牙利算法。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
HungarianHandleInit
初始化匈牙利算法匹配矩阵图。
APP_ERROR HungarianHandleInit(HungarianHandle &handle, int row, int cols);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 匈牙利算法专用结构体。 |
| row | 输入 | 匈牙利算法匹配矩阵行数。限定范围(0, 8192]。 |
| cols | 输入 | 匈牙利算法匹配矩阵列数。限定范围(0, 8192]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
HungarianSolve
[!NOTICE] 在调用HungarianSolve函数时,用户需保证已经使用HungarianHandleInit函数对相关参数进行了初始化,否则HungarianSolve函数无法正确执行。
执行匈牙利算法,解决二部图最小权值匹配问题,需要先执行HungarianHandleInit方法。
APP_ERROR HungarianSolve(HungarianHandle &handle, const std::vector<std::vector<int>> &cost, const int rows, const int cols);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 匈牙利算法专用结构体。 |
| cost | 输入 | 权值矩阵。 |
| rows | 输入 | 匈牙利算法匹配矩阵行数。 |
| cols | 输入 | 匈牙利算法匹配矩阵列数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
KalmanTracker
类说明
该类实现基于卡尔曼滤波算法的目标跟踪。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CvKalmanInit
初始化卡尔曼滤波器。
void KalmanTracker::CvKalmanInit(const MxBase::DetectBox &initRect);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| initRect | 输入 | 坐标框。 |
KalmanTracker
类构造函数,创建卡尔曼滤波器对象。
KalmanTracker();
~KalmanTracker
KalmanTracker类的默认析构函数。
~KalmanTracker();
Predict
[!NOTICE] 在调用Predict函数时,用户需保证已经使用CvKalmanInit函数对相关参数进行了初始化,否则Predict函数无法正确执行。
使用卡尔曼滤波器对运动目标坐标框进行预测。需要先执行CvKalmanInit方法。
MxBase::DetectBox KalmanTracker::Predict();
| 数据结构 | 说明 |
|---|---|
| MxBase::DetectBox | 坐标框。 |
Update
[!NOTICE] 在调用Update函数时,用户需保证已经使用CvKalmanInit函数对相关参数进行了初始化,否则Update函数无法正确执行。
更新卡尔曼滤波器。需要先执行CvKalmanInit方法。
void KalmanTracker::Update(const MxBase::DetectBox &stateMat)
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| stateMat | 输入 | 坐标框。 |
FastMath
类说明
FastMath类在FastMath.h定义。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
exp
快速幂运算,单例模式。
inline float fastmath::exp(const float x);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 指数。 |
| 数据结构 | 说明 |
|---|---|
| float | 运算结果。 |
FastMath
类构造函数,创建数学函数类对象。
FastMath::FastMath();
~FastMath
FastMath类的默认析构函数。
FastMath::~FastMath();
FExp
快速幂运算。
inline float FastMath::FExp(const float x);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 指数。 |
| 数据结构 | 说明 |
|---|---|
| float | 运算结果。 |
sigmoid
快速sigmoid函数运算,单例模式。
inline float fastmath::sigmoid(float x);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 指数。 |
| 数据结构 | 说明 |
|---|---|
| float | 运算结果。 |
Sigmoid
快速Sigmoid函数运算。
inline float FastMath::Sigmoid(float x);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 指数。 |
| 数据结构 | 说明 |
|---|---|
| float | 运算结果。 |
sign
符号函数,单例模式,根据输入数字的符号返回1或-1。
inline float fastmath::sign(float x);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 待判断符号的数字。 |
sign
快速符号函数运算。
inline float FastMath::sign(float x);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | float型。 |
| 数据结构 | 运算说明 |
|---|---|
| float | 运算结果。 |
softmax
快速softmax函数运算,单例模式。
inline void fastmath::softmax(std::vector<float>& digits);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| digits | 输入/输出 | float型的vector,原位进行softmax。 |
Softmax
快速归一化指数函数运算。
void FastMath::Softmax(std::vector<float> &digits);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| digits | 输入/输出 | float类型的vector,原位进行softmax。 |
ConfigData
类说明
ConfigData接口在ConfigUtil.h中定义,当前为内部使用类,请用户不要使用。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
ConfigData
用于存储配置文件数据。
ConfigData::ConfigData();
ConfigData::ConfigData(const ConfigData &other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入 | 复制传入的ConfigData(指针)。 |
~ConfigData
ConfigData类的默认析构函数。
ConfigData::~ConfigData();
GetCfgJson
返回JSON数据。
std::string ConfigData::GetCfgJson();
| 数据结构 | 说明 |
|---|---|
| std::string | 返回JSON数据字符串。 |
GetClassName
根据类别ID获取类别名。
std::string ConfigData::GetClassName(const size_t classId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| classId | 输入 | 类别ID。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 返回类别名。 |
GetFileValue
根据输入的key获取对应的value。
template<typename T> APP_ERROR ConfigData::GetFileValue(const std::string &key, T &value) const;
template<typename T> APP_ERROR ConfigData::GetFileValue(const std::string &key, T &value, const T &min, const T &max) const;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| key | 输入 | 关键字。 |
| value | 输出 | 关键字对应的值。 |
| min | 输入 | 限定的最小值(低于最小值取最小值)。 |
| max | 输入 | 限定的最大值(高于最大值取最大值)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetFileValueWarn
函数在GetFileValue基础上不返回错误码。
template<typename T> void ConfigData::GetFileValueWarn(const std::string &key, T &value) const;
template<typename T> void ConfigData::GetFileValueWarn(const std::string &key, T &value, const T &min, const T &max) const;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| key | 输入 | 关键字。 |
| value | 输出 | 关键字对应的值。 |
| min | 输入 | 限定的最小值(低于最小值取最小值)。 |
| max | 输入 | 限定的最大值(高于最大值取最大值)。 |
InitContent
初始化Content。
APP_ERROR ConfigData::InitContent(const std::string &content);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| content | 输入 | string类型,配置信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitFile
初始化File。
APP_ERROR ConfigData::InitFile(std::ifstream &inFile);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inFile | 输入 | 读取的文件。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitJson
初始化JSON。
APP_ERROR ConfigData::InitJson(std::ifstream &inFile);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inFile | 输入 | 读取的文件。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
LoadLabels
根据路径读取Labels数据。
APP_ERROR ConfigData::LoadLabels(const std::string &labelPath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| labelPath | 输入 | Label数据文件的路径。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator=
复制数据。
ConfigData &operator = (const ConfigData &other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入 | 深度复制传入的ConfigData(非指针)。 |
SetFileValue
根据传入的key赋值对应的value(保存数据至File)。
template<typename T> APP_ERROR ConfigData::SetFileValue(const std::string &key, const T &value);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| key | 输入 | 关键字。 |
| value | 输入 | 关键字对应的值。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetJsonValue
根据传入的key赋值对应的value(保存数据)。
APP_ERROR ConfigData::SetJsonValue(const std::string &key, const std::string &value, int pos = -1);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| key | 输入 | 关键字。 |
| value | 输入 | 关键字对应的值。 |
| pos | 输入 | int型。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ConfigUtil
类说明
ConfigUtil接口在ConfigUtil.h中定义,当前为内部使用类,请用户不要使用。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
LoadConfiguration
读取配置文件数据。
APP_ERROR ConfigUtil::LoadConfiguration(const std::string &config, ConfigData &data, ConfigMode mode = CONFIGJSON);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 配置文件路径。 |
| data | 输出 | 从配置文件中获取参数数据。 |
| mode | 输入 | 文件类型,详见ConfigMode。 |
| 数据结构 | 运算说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeviceManager
类说明
DeviceManager接口在DeviceManager.h中定义,当前为内部使用类,请用户不要使用。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
CheckDeviceId
检查设备ID是否合法。
APP_ERROR DeviceManager::CheckDeviceId(int32_t deviceId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 设备ID。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
~DeviceManager
DeviceManager类的默认析构函数。
virtual DeviceManager::~DeviceManager();
DestroyDevices
释放所有设备资源。
APP_ERROR DeviceManager::DestroyDevices();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetCurrentDevice
获取最近使用的设备。
APP_ERROR DeviceManager::GetCurrentDevice(DeviceContext& device);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| device | 输出 | 获取最近运行的设备。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetDevicesCount
获取设备数目。
APP_ERROR DeviceManager::GetDevicesCount(uint32_t& deviceCount);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceCount | 输出 | 设备数目。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetInstance
单例模式获取设备管理器。
static DeviceManager *DeviceManager::GetInstance();
| 数据结构 | 说明 |
|---|---|
| DeviceManager | 设备管理器。 |
GetSocName
查询当前运行环境的芯片版本。
static std::string DeviceManager::GetSocName();
| 数据结构 | 说明 |
|---|---|
| string | 返回芯片版本信息。 |
InitDevices
初始化所有设备。
APP_ERROR DeviceManager::InitDevices(std::string configFilePath = "");
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configFilePath | 输入 | 配置文件路径。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
IsAscend310B
判断是否使用Atlas 200I/500 A2 推理产品。
static bool DeviceManager::IsAscend310B();
| 数据结构 | 说明 |
|---|---|
| bool | 判断是否使用Atlas 200I/500 A2 推理产品。 |
IsAscend310P
判断是否使用Atlas 推理系列产品。
static bool DeviceManager::IsAscend310P();
| 数据结构 | 说明 |
|---|---|
| bool | 判断是否使用Atlas 推理系列产品。 |
IsAtlas800IA2
判断是否使用Atlas 800I A2推理产品。
static bool DeviceManager::IsAtlas800IA2();
| 数据结构 | 说明 |
|---|---|
| bool | 判断是否使用Atlas 800I A2推理产品。 |
IsInitDevices
所有设备是否初始化。
bool DeviceManager::IsInitDevices() const;
| 数据结构 | 说明 |
|---|---|
| bool | 所有设备是否初始化。 |
SetDevice
指定待使用的设备。
APP_ERROR DeviceManager::SetDevice(DeviceContext device);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| device | 输入 | 待使用的设备。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
LineRegressionFit
类说明
线性拟合类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
公共参数
| 参数名 | 数据类型 | 参数说明 |
|---|---|---|
| alpha_ | double | 斜率,默认值为0.0。 |
| beta_ | double | 截距,默认值为0.0。 |
LineRegressionFit
类构造函数,创建线性拟合类对象。
LineRegressionFit::LineRegressionFit();
~LineRegressionFit
LineRegressionFit类的默认析构函数。
LineRegressionFit::~LineRegressionFit();
LRFunction
计算x横坐标值在拟合线性后斜率和截距条件下的纵坐标值。
double LineRegressionFit::LRFunction(const float &x) const;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入 | 横坐标值。 |
SetAlphaAndBeta
计算斜率和截距。
void LineRegressionFit::SetAlphaAndBeta(const std::vector<float> &xVec, const std::vector<float> &yVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| xVec | 输入 | 横坐标数组。 |
| yVec | 输入 | 纵坐标数组。 |
NpySort
类说明
numpy排序算法C++实现类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
GetSortIdx
排序后的索引数组。
std::vector<int> NpySort::GetSortIdx();
NpyArgHeapSort
numpy堆排序。
void NpySort::NpyArgHeapSort(int tosort, int n);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tosort | 输入 | 待排序数组起始索引。 |
| n | 输入 | 待排序的元素个数。 |
NpyArgQuickSort
numpy快速排序。
void NpySort::NpyArgQuickSort(bool reverse);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| reverse | 输入 | 是否倒序。 |
NpySort
numpy排序算法构造函数。
explicit NpySort::NpySort() = default;
NpySort::NpySort(std::vector<float> preSortVec, std::vector<int> sortIdx);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| preSortVec | 输入 | 待排序数组,长度大于0。 |
| sortIdx | 输入 | 待排序索引数组。单个索引最小为0,最大为该数组长度-1。长度与待排序数组相同。 |
~NpySort
NpySort类的默认析构函数。
NpySort::~NpySort();
TensorBase
类说明
该类主要有TensorBase数据结构的构造方法和相关的功能接口。
该类即将废弃,预计2025年12月正式删除,请使用Tensor类。
[!NOTICE] 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
BatchConcat
将多batch的Tensor组合成一个Tensor。
static APP_ERROR TensorBase::BatchConcat(const std::vector<TensorBase> &inputs, TensorBase &output);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputs | 输入 | Tensor列表,列表大小不超过1024。 |
| output | 输出 | 组合后的Tensor对象。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BatchStack
将多batch的Tensor组合成一个Tensor,相比于BatchConcat拓展了Tensor的维度。
static APP_ERROR TensorBase::BatchStack(const std::vector<TensorBase> &inputs, TensorBase &output);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputs | 输入 | Tensor列表,列表大小不超过1024。 |
| output | 输出 | 组合后的Tensor对象。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BatchVector
合并batch组合成一个Tensor。该函数实际调用BatchConcat和BatchStack,实现组batch操作,通过keepDims参数控制具体调用函数。
static APP_ERROR TensorBase::BatchVector(const std::vector<TensorBase> &inputs, TensorBase &output, const bool &keepDims = false);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputs | 输入 | 多batch模型,将TensorBase对象列表作为输入。列表大小不超过1024。 |
| output | 输出 | 组batch后输出一个TensorBase对象。 |
| keepDims | 输入 | 保持其多维特性的参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CheckTensorValid
用于查看Tensor对象是否合法。
APP_ERROR TensorBase::CheckTensorValid() const;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CreateTensorBase
用来创建TensorBase对象,并根据传入参数不同,调用不同的构造函数。
template<typename... Param>
static APP_ERROR TensorBase::CreateTensorBase(TensorBase &tensor, Param... params);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensor | 输出 | TensorBase对象,用于接收构造的TensorBase对象。 |
| params | 输入 | 用于构造TensorBase的参数,具体参数可参考构造函数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetTensorType
用于获取Tensor的内存类型。
MemoryData::MemoryType TensorBase::GetTensorType() const;
| 数据结构 | 说明 |
|---|---|
| MemoryType | 申请的内存类型: ● MEMORY_HOST:对应Host侧。 ● MEMORY_DEVICE:对应Device侧。 ● MEMORY_DVPP:对应DVPP侧。 ● MEMORY_HOST_MALLOC:对应malloc申请内存。 ● MEMORY_HOST_NEW:对应new申请内存。 |
GetBuffer
用于获取Tensor指针。
void* TensorBase::GetBuffer() const;
APP_ERROR TensorBase::GetBuffer(void *&ptr, const std::vector<uint32_t> &indices) const;
template<typename T, typename... Ix>
APP_ERROR TensorBase::GetBuffer(T* &value, Ix... index) const;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| ptr | 输出 | 获取到的buffer指针。 |
| indices | 输入 | 传入的索引列表,待复制的源内存。 |
| value | 输出 | 获取到的buffer。 |
| index | 输入 | 传入的索引值。 |
| 数据结构 | 说明 |
|---|---|
| void* | 指针的首地址,即buffer指针。 |
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetByteSize
用于获取buffer字节数据量。
size_t TensorBase::GetByteSize() const;
| 数据结构 | 说明 |
|---|---|
| size_t | 返回具体数值。 |
GetDataType
用于获取内存中张量的数据类型。
TensorDataType TensorBase::GetDataType() const;
| 数据结构 | 说明 |
|---|---|
| TensorDataType | 请参考TensorDataType枚举说明。 |
GetDataTypeSize
用于获取Tensor的数据类型。根据TensorDataType的具体类型返回该类型字节长度。
uint32_t TensorBase::GetDataTypeSize() const;
| 数据结构 | 说明 |
|---|---|
| uint32_t | Tensor的数据类型对应的字节长度。 |
GetDesc
用于获取详细信息。
std::string TensorBase::GetDesc();
| 数据结构 | 说明 |
|---|---|
| std::string | 返回详情信息。 |
GetDeviceId
用于获取Tensor的设备号。
int32_t TensorBase::GetDeviceId() const;
| 数据结构 | 说明 |
|---|---|
| int32_t | 返回设备号。 |
GetIndices
将一个新的元素加到向量的最后面。
void TensorBase::GetIndices (std::vector<T>& indices, U value);
void TensorBase::GetIndices (std::vector<T>& indices, U value, Ix ... idxs);
void TensorBase::GetIndices (std::vector<T>& indices, std::vector<U> values);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| indices | 输入/输出 | 输入的向量。 |
| value | 输入 | 被添加到向量的值。 |
| idxs | 输入 | 被添加到向量的值。 |
GetShape
用于获取Tensor的形状。
std::vector<uint32_t> TensorBase::GetShape() const;
| 数据结构 | 说明 |
|---|---|
| std::vector<uint32_t> | shape数组。 |
GetSize
用于获取张量数据对应内存大小。
size大小应与实际内存大小一致,否则可能会导致程序出现coredump情况。
size_t TensorBase::GetSize() const;
| 数据结构 | 说明 |
|---|---|
| size_t | 返回具体数值。 |
GetStrides
用于获取Tensor的步长。
std::vector<uint32_t> TensorBase::GetStrides() const;
| 参数名 | 说明 |
|---|---|
| std::vector<uint32_t> | Tensor的步长数组。 |
GetValidRoi
支持查询TensorBase的有效数据区域。
Rect TensorBase::GetValidRoi() const;
| 数据结构 | 说明 |
|---|---|
| Rect | 返回TensorBase对象的有效数据区域,数据类型请参见Rect。 |
GetValue
获取Host侧的Tensor的buffer,首先判断Tensor是否在Host侧,然后在其中调用GetBuffer函数实现获取buffer的功能。
template<typename T, typename... Ix>
APP_ERROR TensorBase::GetValue(T &value, Ix... index) const;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| value | 输出 | 获取到对应Tensor的buffer。 |
| index | 输入 | 待获取Tensor的索引。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
IsDevice
用于判断Tensor对象是否在Device侧。
bool TensorBase::IsDevice() const;
| 数据结构 | 说明 |
|---|---|
| bool | true:在Device侧。false:不在Device侧。 |
IsHost
用于判断Tensor对象是否在Host侧。
bool TensorBase::IsHost() const;
| 数据结构 | 说明 |
|---|---|
| bool | true:在Host侧。false:不在Host侧。 |
operator=
等号运算符重载,用于TensorBase对象之间的赋值。
TensorBase& TensorBase::operator = (const TensorBase& other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | TensorBase对象。 |
SetShape
设置TensorBase的形状。
APP_ERROR TensorBase::SetShape(std::vector<uint32_t> shape);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| shape | 输入 | shape向量中各维度要求为正整数且单个或各项乘积需小于536,870,912(512 * 1024 * 1024),否则函数将抛出异常。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetValidRoi
支持设置TensorBase的有效区域,仅支持NHWC(N=1)、HWC与HW维度的TensorBase对象设置,有效区域的宽高不能超过原始图片。
APP_ERROR TensorBase::SetValidRoi(Rect rect);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| rect | 输入 | 表示TensorBase对象的数据有效区域,数据类型请参见Rect。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
TensorBase
TensorBase的构造函数,用来创建TensorBase对象,根据传入的不同参数可选用不同的构造函数。
[!NOTICE] 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
原型1:
TensorBase::TensorBase();
原型2:
TensorBase::TensorBase(const MemoryData &memoryData, const bool &isBorrowed, const std::vector<uint32_t> &shape, const TensorDataType &type);
原型3:
TensorBase::TensorBase(const std::vector<uint32_t> &shape, const TensorDataType &type, const MemoryData::MemoryType &bufferType, const int32_t &deviceId);
原型4:
TensorBase::TensorBase(const std::vector<uint32_t> &shape, const TensorDataType &type, const int32_t &deviceId);
原型5:
TensorBase::TensorBase(const std::vector<uint32_t> &shape, const TensorDataType &type);
原型6:
TensorBase::TensorBase(const std::vector<uint32_t> &shape);
原型7:
TensorBase::TensorBase(const TensorBase& tensor) = default;
Note
- 函数原型3、4、5、6只是预先设置了shape,但不会申请内存空间,需要调用TensorBaseMalloc才能申请对应内存空间。
- 函数原型2使用场景:用户已在外部申请内存空间,构造Tensor对象的时候直接引用已申请的内存,需确保内存空间大小与Tensor对象的shape一致,同时可以选择外部申请的空间是Tensor对象内部自行释放还是用户外部释放。
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| memoryData | 输入 | 用于构造TensorBase对象的参数,内存管理结构体,具体请参见MemoryData。 |
| isBorrowed | 输入 | 表示传入的MemoryData数据是否要Tensor主动释放。若为true,表示不需要主动释放,用户自行释放。若为false,用户不需要手动释放,Tensor析构时自动释放。 |
| shape | 输入 | 用于构造TensorBase对象的参数,张量的形状。 |
| type | 输入 | 用于构造TensorBase对象的参数,TensorDataType类型数据,具体请参见TensorDataType枚举说明。 |
| bufferType | 输入 | 用于构造TensorBase对象的参数,张量数据的内存类型。 |
| deviceId | 输入 | 用于构造TensorBase对象的参数,int类型数据,设备编号。 |
| tensor | 输入 | TensorBase对象,用于构造TensorBase对象的参数。 |
~TensorBase
TensorBase类的默认析构函数。
virtual TensorBase::~TensorBase() = default;
TensorBaseCopy
内存复制函数,根据MemoryData中指定的内存位置在Host侧和Device侧之间进行复制。
static APP_ERROR TensorBase::TensorBaseCopy(TensorBase &dst, const TensorBase &src);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dst | 输出 | 复制后的目标内存。 |
| src | 输入 | 待复制的源内存。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
TensorBaseMalloc
用于获取TensorBase对象的内存。
Tensor对象在析构时会自动释放内存,因此无需通过函数释放内存。
static APP_ERROR TensorBase::TensorBaseMalloc(TensorBase &tensor);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensor | 输入 | 用来获取对应内存的Tensor数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToDevice
将Tensor对象部署到Device侧内存。
APP_ERROR TensorBase::ToDevice(int32_t deviceId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 设备号。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToDvpp
将Tensor对象部署到DVPP内存中。
APP_ERROR TensorBase::ToDvpp(int32_t deviceId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 设备号。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToHost
将Tensor对象部署到Host侧内存。
APP_ERROR TensorBase::ToHost();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Version
总体说明
获取Vision SDK的版本号。
| 参数 | 说明 |
|---|---|
| MINDX_SDK_VERSION | 获取Vision SDK的版本号(uint64型)。调用后处理插件的GetCurrentVersion接口获得该插件的版本号。 |
| MINDX_SDK_MAJOR_VERSION | 获取Vision SDK的大版本号(uint32型)。 |
| MINDX_SDK_MINOR_VERSION | 获取Vision SDK的中版本号(uint32型)。 |
| MINDX_SDK_MICRO_VERSION | 获取Vision SDK的小版本号(uint32型)。 |
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
GetSDKVersion
获取Vision SDK的版本号。
std::string GetSDKVersion();
| 数据结构 | 说明 |
|---|---|
| std::string | 返回Vision SDK的版本号,字符串类型保存。 |
Log
类说明
Log接口在“Log.h”中定义。该接口预计2025年12月正式删除,当前为内部使用接口,请用户不要使用。
Note
在多进程场景中,单个进程的日志转储个数默认为50,总的转储个数限制为1000个。在进程数超过1000时,转储的日志会有丢失。 关于日志配置的相关信息可参考日志配置文件。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
以下宏定义可以用于打印错误日志:
表 1 宏定义表格
| 宏定义 | 说明 |
|---|---|
| #define LogDebug VLOG_EVERY_N(MxBase::LOG_LEVEL_DEBUG, MxBase::Log::logFlowControlFrequency_) | LogDebug打印调试信息。 |
| #define LogInfo LOG_EVERY_N(INFO, MxBase::Log::logFlowControlFrequency_) | LogInfo打印提示信息,打印关键步骤(例如初始化)的信息,与数据无关。 |
| #define LogWarn LOG_EVERY_N(WARNING, MxBase::Log::logFlowControlFrequency_) | LogWarn打印警告信息,打印处理数据时的告警信息。 |
| #define LogError LOG_EVERY_N(ERROR, MxBase::Log::logFlowControlFrequency_) | LogError打印错误信息,打印处理数据时的错误信息。 |
| #define LogFatal LOG_EVERY_N(FATAL, MxBase::Log::logFlowControlFrequency_) | LogFatal打印致命信息,打印关键步骤(例如初始化)的错误信息。 |
| #define FILELINE FILE, FUNCTION, LINE | 描述当前文件,当前函数以及当前所在代码行。 |
LogDebug << "Begin to process MpDataSerialize(" << elementName_ << ").";
LogInfo << "Begin to initialize MpDataSerialize(" << elementName_ << ").";
LogWarn << "Input data is invalid, element (" << elementName_ <<") will not run normally.";
LogError << GetErrorInfo(ret, elementName_) << "Fail to initialize dvppWrapper_ object.";
LogFatal << GetErrorInfo(ret, elementName_) << "Invalid transfer mode.";
公共参数
| 参数名 | 数据类型 | 参数说明 |
|---|---|---|
| rotateDay_ | int | 日志转储时间。 |
| rotateFileNumber_ | int | 日志转储数量。 |
| logConfigPath_ | string | 日志配置文件路径。 |
| logFlowControlFrequency_ | int | 日志打印频率,默认值为1。 |
| showLog_ | bool | 日志屏显打印开关,默认值为true。 |
Debug
输出调试类信息。
void Log::Debug(const std::string& file, const std::string& function, const int& line, std::string& msg);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| file | 输入 | 信息对应的文件。 |
| function | 输入 | 信息对应的函数。 |
| line | 输入 | 信息所在的行数。 |
| msg | 输入 | 信息内容。 |
Deinit
对已初始化的Log进行去初始化处理。与Init配套使用。
static APP_ERROR Log::Deinit();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Error
输出错误类信息。
void Log::Error (const std::string& file, const std::string& function, const int& line, std::string& msg);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| file | 输入 | 信息对应的文件。 |
| function | 输入 | 信息对应的函数。 |
| line | 输入 | 信息所在的行数。 |
| msg | 输入 | 信息内容。 |
Fatal
[!NOTICE] 在输出Fatal级别的日志后,会终止程序的运行,请谨慎使用。
输出致命类信息。
void Log::Fatal(const std::string& file, const std::string& function, const int& line, std::string& msg);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| file | 输入 | 信息对应的文件。 |
| function | 输入 | 信息对应的函数。 |
| line | 输入 | 信息所在的行数。 |
| msg | 输入 | 信息内容。 |
Flush
清空显示的Log信息。
void Log::Flush();
getLogger
根据LoggerName获取Log,若不存在,则创建。
执行Log::Deinit后,创建的Log将会释放。
static Log& Log::getLogger(const std::string loggerName = DEFAULT_LOGGER); //DEFAULT_LOGGER = "DEFAULT_LOGGER"
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| loggerName | 输入 | Log的名字。 |
| 数据结构 | 说明 |
|---|---|
| Log | 返回Log。 |
Info
输出消息类信息。
void Log::Info (const std::string& file, const std::string& function, const int& line, std::string& msg);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| file | 输入 | 信息对应的文件。 |
| function | 输入 | 信息对应的函数。 |
| line | 输入 | 信息所在的行数。 |
| msg | 输入 | 信息内容。 |
Init
初始化Log。与Init配套使用。
static APP_ERROR Log::Init();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitWithoutCfg
初始化Log时,不读取配置文件。
static APP_ERROR Log::InitWithoutCfg();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
LogRotateByNumbers
记录一定个数的数据。
static void Log::LogRotateByNumbers(int fileNumbers);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| fileNumbers | 输入 | 设置记录文件数量,取值范围为大于0的整数。 |
LogRotateByTime
记录一定时间内的数据。
static void Log::LogRotateByTime(int rotateDay);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| rotateDay | 输入 | 设置记录文件时长。 |
SetLogParameters
设置日志配置数据。
static void Log::SetLogParameters(const ConfigData& configData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configData | 输出 | 配置数据。 |
UpdateFileMode
更新文件的模式。
static void Log::UpdateFileMode();
Warn
输出警告类信息。
void Log::Warn (const std::string& file, const std::string& function, const int& line, std::string& msg);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| file | 输入 | 信息对应的文件。 |
| function | 输入 | 信息对应的函数。 |
| line | 输入 | 信息所在的行数。 |
| msg | 输入 | 信息内容。 |
ErrorCode
类说明
根据错误码获取错误信息。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
ConvertReturnCodeToLocal
函数内部使用,将三方库返回错误码转换到本地错误码。
APP_ERROR ConvertReturnCodeToLocal(ReturnCodeType type, int errorCode)
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| type | 输入 | 返回码类型,类型参见如下。enum ReturnCodeType { GST_FLOW_TYPE = 0,}; |
| errorCode | 输入 | 错误码。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 本地错误码。 |
GetAppErrCodeInfo
根据错误码获取对应错误信息。
std::string GetAppErrCodeInfo(APP_ERROR err);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| err | 输入 | 错误码。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 错误码对应错误信息。 |
GetErrorInfo
根据错误码获取对应错误信息。
std::string GetErrorInfo(const APP_ERROR err, std::string callingFuncName = "")
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| err | 输入 | APP_ERROR类型,错误码。 |
| callingFuncName | 输入 | std::string类型,指定产生错误码的函数名。仅当错误码为CANN错误码时,才需要传入该参数,用于记录产生该错误码的CANN函数名,从而方便后续进行错误定位。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 错误码对应的错误相关信息,便于用户进行错误定位。错误码的说明请参见APP_ERROR说明。 |
APP_ERROR说明
using APP_ERROR = int;
APP_ERROR类用于表示程序执行的返回码,其包括Vision SDK返回码、三方软件的错误码及部分CANN返回码。Vision SDK返回码用于表示Vision SDK接口执行的情况,常与GetErrorInfo接口配合使用、用于记录日志;CANN返回码用于表示CANN接口执行的情况,不推荐用户使用,其返回码含义详见《CANN 应用开发接口》的“返回码列表”章节。
全量APP_ERROR返回码请参考“MxBase/ErrorCode/ErrorCode.h”文件。为了方便用户查阅Vision SDK返回码,下表展示了Vision SDK返回码,更多三方软件和CANN返回码请参见Vision SDK 7.3.0 APP_ERROR返回码.xlsx。其中,返回信息用于解释返回码的具体含义。
表 1 Vision SDK返回码列表
| 返回码 | 返回码值 | 返回信息 |
|---|---|---|
| APP_ERR_OK | 0 | "Success" |
| APP_ERR_ACL_FAILURE | -1 | "ACL: general failure" |
| APP_ERR_ACL_ERR_BASE | 0 | "Success" |
| APP_ERR_ACL_INVALID_PARAM | 1 | "ACL: invalid parameter" |
| APP_ERR_ACL_BAD_ALLOC | 2 | "ACL: memory allocation fail" |
| APP_ERR_ACL_RT_FAILURE | 3 | "ACL: runtime failure" |
| APP_ERR_ACL_GE_FAILURE | 4 | "ACL: Graph Engine failure" |
| APP_ERR_ACL_OP_NOT_FOUND | 5 | "ACL: operator not found" |
| APP_ERR_ACL_OP_LOAD_FAILED | 6 | "ACL: fail to load operator" |
| APP_ERR_ACL_READ_MODEL_FAILURE | 7 | "ACL: fail to read model" |
| APP_ERR_ACL_PARSE_MODEL | 8 | "ACL: parse model failure" |
| APP_ERR_ACL_MODEL_MISSING_ATTR | 9 | "ACL: model missing attribute" |
| APP_ERR_ACL_DESERIALIZE_MODEL | 10 | "ACL: deserialize model failure" |
| APP_ERR_ACL_EVENT_NOT_READY | 12 | "ACL: event not ready" |
| APP_ERR_ACL_EVENT_COMPLETE | 13 | "ACL: event complete" |
| APP_ERR_ACL_UNSUPPORTED_DATA_TYPE | 14 | "ACL: unsupported data type" |
| APP_ERR_ACL_REPEAT_INITIALIZE | 15 | "ACL: repeat initialize" |
| APP_ERR_ACL_COMPILER_NOT_REGISTERED | 16 | "ACL: compiler not registered" |
| APP_ERR_ACL_IO | 17 | "ACL: IO failed" |
| APP_ERR_ACL_INVALID_FILE | 18 | "ACL: invalid file" |
| APP_ERR_ACL_INVALID_DUMP_CONFIG | 19 | "ACL: invalid dump config" |
| APP_ERR_ACL_INVALID_PROFILING_CONFIG | 20 | "ACL: invalid profiling config" |
| APP_ERR_ACL_OP_TYPE_NOT_MATCH | 21 | "ACL: operator type not match" |
| APP_ERR_ACL_OP_INPUT_NOT_MATCH | 22 | "ACL: operator input not match" |
| APP_ERR_ACL_OP_OUTPUT_NOT_MATCH | 23 | "ACL: operator output not match" |
| APP_ERR_ACL_OP_ATTR_NOT_MATCH | 24 | "ACL: operator attribute not match" |
| APP_ERR_ACL_API_NOT_SUPPORT | 25 | "ACL: API not supported" |
| APP_ERR_ACL_BAD_COPY | 26 | "ACL: memory copy fail" |
| APP_ERR_ACL_BAD_FREE | 27 | "ACL: memory free fail" |
| APP_ERR_COMM_BASE | 1000 | "Success" |
| APP_ERR_COMM_FAILURE | 1001 | "General Failed" |
| APP_ERR_COMM_INNER | 1002 | "Internal error" |
| APP_ERR_COMM_INVALID_POINTER | 1003 | "Invalid Pointer" |
| APP_ERR_COMM_INVALID_PARAM | 1004 | "Invalid parameter" |
| APP_ERR_COMM_UNREALIZED | 1005 | "Not implemented" |
| APP_ERR_COMM_OUT_OF_MEM | 1006 | "Out of memory" |
| APP_ERR_COMM_ALLOC_MEM | 1007 | "memory allocation error" |
| APP_ERR_COMM_FREE_MEM | 1008 | "free memory error" |
| APP_ERR_COMM_OUT_OF_RANGE | 1009 | "out of range" |
| APP_ERR_COMM_NO_PERMISSION | 1010 | "NO Permission " |
| APP_ERR_COMM_TIMEOUT | 1011 | "Timed out" |
| APP_ERR_COMM_NOT_INIT | 1012 | "Not initialized" |
| APP_ERR_COMM_INIT_FAIL | 1013 | "initialize failed" |
| APP_ERR_COMM_INPROGRESS | 1014 | "Operation now in progress " |
| APP_ERR_COMM_EXIST | 1015 | "Object, file or other resource already exist" |
| APP_ERR_COMM_NO_EXIST | 1016 | "Object, file or other resource doesn't exist" |
| APP_ERR_COMM_BUSY | 1017 | "Object, file or other resource is in use" |
| APP_ERR_COMM_FULL | 1018 | "No available Device or resource" |
| APP_ERR_COMM_OPEN_FAIL | 1019 | "Device, file or resource open failed" |
| APP_ERR_COMM_READ_FAIL | 1020 | "Device, file or resource read failed" |
| APP_ERR_COMM_WRITE_FAIL | 1021 | "Device, file or resource write failed" |
| APP_ERR_COMM_DESTORY_FAIL | 1022 | "Device, file or resource destroy failed" |
| APP_ERR_COMM_EXIT | 1023 | "Fail to exit" |
| APP_ERR_COMM_CONNECTION_CLOSE | 1024 | "Out of connection, Communication shutdown" |
| APP_ERR_COMM_CONNECTION_FAILURE | 1025 | "connection fail" |
| APP_ERR_COMM_STREAM_INVALID | 1026 | "ACL stream is null pointer" |
| APP_ERR_COMM_LOGGING_CONFIG_OPEN_FAIL | 1027 | "Logging config loading failed" |
| APP_ERR_COMM_SDK_HOME_NOSET | 1028 | "SDK_HOME not set" |
| APP_ERR_COMM_INVALID_PATH | 1029 | "Invalid path" |
| APP_ERR_COMM_REPEAT_INITIALIZE | 1030 | "Repeat initialize" |
| APP_ERR_DVPP_BASE | 2000 | "Success" |
| APP_ERR_DVPP_CROP_FAIL | 2001 | "DVPP: crop fail" |
| APP_ERR_DVPP_RESIZE_FAIL | 2002 | "DVPP: resize fail" |
| APP_ERR_DVPP_CROP_RESIZE_FAIL | 2003 | "DVPP: crop and resize fail" |
| APP_ERR_DVPP_CONVERT_FROMAT_FAIL | 2004 | "DVPP: convert image format fail" |
| APP_ERR_DVPP_VPC_FAIL | 2005 | "DVPP: VPC(crop, resize, convert format) fail" |
| APP_ERR_DVPP_JPEG_DECODE_FAIL | 2006 | "DVPP: decode jpeg or jpg fail" |
| APP_ERR_DVPP_JPEG_ENCODE_FAIL | 2007 | "DVPP: encode jpeg or jpg fail" |
| APP_ERR_DVPP_PNG_DECODE_FAIL | 2008 | "DVPP: decode png fail" |
| APP_ERR_DVPP_H26X_DECODE_FAIL | 2009 | "DVPP: decode H264 or H265 fail" |
| APP_ERR_DVPP_H26X_ENCODE_FAIL | 2010 | "DVPP: encode H264 or H265 fail" |
| APP_ERR_DVPP_HANDLE_NULL | 2011 | "DVPP: acldvppChannelDesc is nullptr" |
| APP_ERR_DVPP_PICDESC_FAIL | 2012 | "DVPP: fail to create or set acldvppCreatePicDesc" |
| APP_ERR_DVPP_CONFIG_FAIL | 2013 | "DVPP: fail to set dvpp configuration" |
| APP_ERR_DVPP_OBJ_FUNC_MISMATCH | 2014 | "DVPP: DvppCommon object mismatch the function" |
| APP_ERR_DEVICE_ID_MISMATCH | 2015 | "DVPP: DvppCommon object mismatch the function" |
| APP_ERR_MEMEROY_TYPE_MISMATCH | 2016 | "DVPP: mismatch the memory type" |
| APP_ERR_METADATA_IS_NULL | 2017 | "DVPP: metadata is null" |
| APP_ERR_PROTOBUF_NAME_MISMATCH | 2018 | "DVPP: VpcReSize mismatch the protobuf name" |
| APP_ERR_DVPP_INVALID_FORMAT | 2019 | "DVPP: mismatch the image format" |
| APP_ERR_DVPP_INVALID_IMAGE_WIDTH | 2020 | "DVPP: image width out of range" |
| APP_ERR_DVPP_INVALID_IMAGE_HEIGHT | 2021 | "DVPP: image height out of range" |
| APP_ERR_VDEC_CHANNEL_NUM_OUT_OF_RANGE | 2022 | "DVPP: vdec channel num out of range" |
| APP_ERR_DVPP_CROP_RESIZE_PASTE_FAIL | 2023 | "DVPP: resize and paste fail" |
| APP_ERR_INFER_BASE | 3000 | "Success" |
| APP_ERR_INFER_SET_INPUT_FAIL | 3001 | "Infer: set input fail" |
| APP_ERR_INFER_SET_OUTPUT_FAIL | 3002 | "Infer: set output fail" |
| APP_ERR_INFER_CREATE_OUTPUT_FAIL | 3003 | "Infer: create output fail" |
| APP_ERR_INFER_OP_SET_ATTR_FAIL | 3004 | "Infer: set op attribute fail" |
| APP_ERR_INFER_GET_OUTPUT_FAIL | 3005 | "Infer: get model output fail" |
| APP_ERR_INFER_FIND_MODEL_ID_FAIL | 3006 | "Infer: find model id fail" |
| APP_ERR_INFER_FIND_MODEL_DESC_FAIL | 3007 | "Infer: find model description fail" |
| APP_ERR_INFER_FIND_MODEL_MEM_FAIL | 3008 | "Infer: find model memory fail" |
| APP_ERR_INFER_FIND_MODEL_WEIGHT_FAIL | 3009 | "Infer: find model weight fail" |
| APP_ERR_INFER_DYNAMIC_IMAGE_SIZE_FAIL | 3010 | "Infer: In DYNAMIC_HW mode, only batchSize=1 is supported." |
| APP_ERR_COMMANDER_BASE | 4000 | "Success" |
| APP_ERR_COMMANDER_SPLIT_PARA_ERROR | 4001 | "Commander Splitter parameter error" |
| APP_ERR_COMMANDER_SPLIT_CONVERT_ERROR | 4002 | "Commander Splitter coordinate conversion error" |
| APP_ERR_COMMANDER_NO_AVAIL_SERVER_ERROR | 4003 | "Commander Splitter server is not available" |
| APP_ERR_COMMANDER_INFER_RESULT_ERROR | 4004 | "Commander subtask inference result error." |
| APP_ERR_QUEUE_BASE | 5000 | "Success" |
| APP_ERR_QUEUE_EMPTY | 5001 | "empty queue" |
| APP_ERR_QUEUE_STOPED | 5002 | "queue stopped" |
| APP_ERR_QUEUE_FULL | 5003 | "full queue" |
| APP_ERR_STREAM_BASE | 6000 | "Success" |
| APP_ERR_STREAM_EXIST | 6001 | "stream is exist" |
| APP_ERR_STREAM_NOT_EXIST | 6002 | "stream is not exist" |
| APP_ERR_STREAM_CHANGE_STATE_FAILED | 6003 | "stream change state fail" |
| APP_ERR_STREAM_CREATE_FAILED | 6004 | "stream create fail" |
| APP_ERR_STREAM_INVALID_CONFIG | 6005 | "stream invalid config" |
| APP_ERR_STREAM_INVALID_LINK | 6006 | "stream invalid link" |
| APP_ERR_STREAM_LINK_FAILED | 6007 | "stream link fail" |
| APP_ERR_STREAM_TRANS_MODE_NOT_MATCHED | 6008 | "stream trans mode not match" |
| APP_ERR_STREAM_TRANS_MODE_INVALID | 6009 | "stream trans mode invalid" |
| APP_ERR_STREAM_TIMEOUT | 6010 | "stream timeout" |
| APP_ERR_STREAM_ELEMENT_INVALID | 6011 | "stream element invalid" |
| APP_ERR_STREAM_ELEMENT_EXIST | 6012 | "stream element exist" |
| APP_ERR_STREAM_ELEMENT_NOT_EXIST | 6013 | "stream element not exist" |
| APP_ERR_ELEMENT_INVALID_FACTORY | 6014 | "element invalid factory" |
| APP_ERR_ELEMENT_INVALID_PROPERTIES | 6015 | "element invalid properties" |
| APP_ERR_ELEMENT_PAD_UNLINKED | 6016 | "element pad unlinked" |
| APP_ERR_PIPELINE_PROPERTY_CONFIG_ERROR | 6017 | "pipeline property config error" |
| APP_ERR_PLUGIN_TOOLKIT_BASE | 7000 | "Success" |
| APP_ERR_PLUGIN_TOOLKIT_CREATE_NODE_FAILED | 7001 | "plugin toolkit create node fail" |
| APP_ERR_PLUGIN_TOOLKIT_NODE_ALREADY_EXIST | 7002 | "plugin toolkit node already exist" |
| APP_ERR_PLUGIN_TOOLKIT_MESSAGE_NOT_MATCH | 7003 | "plugin toolkit message not match" |
| APP_ERR_PLUGIN_TOOLKIT_PARENT_NOT_MATCH | 7004 | "plugin toolkit parent not match" |
| APP_ERR_PLUGIN_TOOLKIT_NOT_INITIALIZED | 7005 | "plugin toolkit not initialized" |
| APP_ERR_PLUGIN_TOOLKIT_NODELIST_NOT_EXIST | 7006 | "plugin toolkit nodelist not exist" |
| APP_ERR_PLUGIN_TOOLKIT_NODE_NOT_EXIST | 7007 | "plugin toolkit node not exist" |
| APP_ERR_PLUGIN_TOOLKIT_INVALID_MEMBERID | 7008 | "plugin toolkit invalid memberid" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_BUFFER_IS_NULL | 7009 | "plugin toolkit metadata buffer is null" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_KEY_ALREADY_EXIST | 7010 | "plugin toolkit metadata key already exist" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_KEY_NOEXIST | 7011 | "plugin toolkit metadata key not exist" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_KEY_ERASE_FAIL | 7012 | "plugin toolkit metadata key erase fail" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_IS_NULL | 7013 | "plugin toolkit metadata is null" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_ADD_ERROR_INFO_FAIL | 7014 | "plugin toolkit metadata add error info fail" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_PLUGIN_NAME_KEY_ALREADY_EXIST | 7015 | "plugin toolkit metadata plugin name key is exist" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_ERROR_INFO_MAP_IS_NULL | 7016 | "plugin toolkit metadata error info map is null" |
| APP_ERR_PLUGIN_TOOLKIT_MESSAGE_TO_STRING_FAILED | 7017 | "plugin toolkit metadata failed to convert message to string" |
| APP_ERR_PLUGIN_TOOLKIT_FLOW_NOT_LINKED | 7018 | "plugin toolkit pad is not linked" |
| APP_ERR_PLUGIN_TOOLKIT_FLOW_FLUSHING | 7019 | "plugin toolkit pad is flushing" |
| APP_ERR_PLUGIN_TOOLKIT_FLOW_EOS | 7020 | "plugin toolkit pad is EOS" |
| APP_ERR_PLUGIN_TOOLKIT_FLOW_NOT_NEGOTIATED | 7021 | "plugin toolkit pad is not negotiated" |
| APP_ERR_PLUGIN_TOOLKIT_FLOW_ERROR | 7022 | "plugin toolkit some error occurred. Element generating this error should post an error message" |
| APP_ERR_PLUGIN_TOOLKIT_FLOW_NOT_SUPPORTED | 7023 | "plugin toolkit operation is not supported" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_KEY_EMPTY | 7024 | "the key cannot be empty" |
| APP_ERR_PLUGIN_TOOLKIT_METADATA_PLUGINNAME_EMPTY | 7025 | "the plugin name cannot be empty" |
| APP_ERR_DEVICE_MANAGER_BASE | 9000 | "Success" |
| APP_ERR_DEVICE_MANAGER_QUERY_DEVICE_ERROR | 9001 | "DeviceManager:query device count error" |
| APP_ERR_DEVICE_MANAGER_DESTROY_DEVICE_CHECK_ERROR | 9002 | "DeviceManager:all devices have been released,init or release again fail" |
| APP_ERR_OP_BASE | 10000 | "Success" |
| APP_ERR_OP_CREATE_TENSOR_FAIL | 10001 | "Fail to create tensor in operator" |
| APP_ERR_OP_BAD_FREE | 10002 | "Bad free in operator" |
| APP_ERR_OP_EXECUTE_FAIL | 10003 | "Fail to execute operator" |
| APP_ERR_OP_SYNACHRONIZE_STREAM_FAIL | 10004 | "Fail to synchronize stream in operator" |
| APP_ERR_SIZE_NOT_MATCH | 10005 | "Mismatched size in operator" |
| APP_ERR_MXPLUGINS_BASE | 11000 | "Success" |
| APP_ERR_MXPLUGINS_DEVICE_ID_MISMATCH | 11001 | "MxPlugins: mismatch the device id" |
| APP_ERR_MXPLUGINS_MEMEROY_TYPE_MISMATCH | 11002 | "MxPlugins: mismatch the memory type" |
| APP_ERR_MXPLUGINS_METADATA_IS_NULL | 11003 | "MxPlugins: metadata is null" |
| APP_ERR_MXPLUGINS_PROTOBUF_NAME_MISMATCH | 11004 | "MxPlugins: protobuf descriptor name mismatch" |
基础函数
DvppAlignDown
对内使用函数,外部不可用。
inline uint32_t DvppAlignDown(uint32_t x, uint32_t align);
GetTensorDataTypeDesc
获取张量的数据类型。
std::string GetTensorDataTypeDesc(TensorDataType type);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| type | 输入 | 枚举值,范围在[-1, 12],参考TensorDataType。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 返回的张量的数据。 |
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
初始化和去初始化
总体说明
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
MxInit
全局初始化,申请Device资源与日志资源,Vision SDK接口全部执行完毕后,用户需调用MxDeInit()接口对初始化的全局资源进行去初始化操作。相关使用流程请参考初始化与去初始化。
- 对于Atlas 200I/500 A2 推理产品:使用MxInit()。
- 对于Atlas 推理系列产品:可以使用MxInit的全部函数原型。调用MxInit()后,在初次调用ImageProcessor类图像处理接口和TensorOperations的部分接口会初始化DVPP资源池,再次调用接口时不会进行初始化,会直接使用DVPP通道资源池,其中DVPP资源池大小可通过“globalCfg”或“globalCfgExtra”进行设置。第一次调用ImageProcessor和TensorOperations的部分接口时间会包含DVPP资源池初始化的时间,导致接口调用的总体时间增长。
- 对于Atlas 800I A2 推理服务器:可以使用MxInit的全部函数原型。调用MxInit()后,可直接使用DVPP通道资源池,其中DVPP通道资源池大小可通过“globalCfg”或“globalCfgExtra”进行设置。
Note
- 一个进程内只能调用一次MxInit接口。
- DVPP资源池所申请的底层通道资源为进程共享,多进程场景可能导致资源耗尽,请谨慎使用。
- DVPP资源池与VideoEncoder及VideoDecoder共享底层通道资源,极端场景可能导致资源耗尽,建议根据实际场景的需要进行资源池大小的初始化。
- 该接口会注册监测日志数量和监测日志时间的线程,线程命名分别为“log_filenum”和“log_time”。
APP_ERROR MxInit();
APP_ERROR MxInit(const AppGlobalCfg &globalCfg);
APP_ERROR MxInit(const AppGlobalCfgExtra &globalCfgExtra);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| globalCfg | 输入 | AppGlobalCfg类型,应用全局配置。 |
| globalCfgExtra | 输入 | AppGlobalCfgExtra类型,应用全局配置。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxInitFromConfig
全局初始化,申请设备资源与日志资源并通过输入的预加载配置JSON文件进行算子预加载操作,配置文件编写规则参考如下,完整配置文件示例请参见初始化算子预加载文件示例。Vision SDK接口全部执行完毕后,用户需调用MxDeInit()接口对初始化的全局资源进行去初始化操作。相关使用流程请参考初始化与去初始化。
该接口不支持Atlas 800I A2推理产品。
-
预加载的算子配置,需包含以下字段。
- 算子名称(name)
- 算子预加载列表(preload_list)
- 算子类型(type),预留字段,暂不建议使用。
-
预加载列表中,需包含以下字段。
-
算子输入形状(input_shape)
-
输入类型(input_type)
-
输出形状(output_shape)
-
输出类型(output_type)
若算子预加载时需要设置属性,还需包含以下字段。
- 属性名称(attr_name)
- 属性数据类型(attr_type)
- 属性值(attr_val)
-
-
各算子输入输出形状及数据类型限制条件参照TensorOperations中对应算子限制条件,各Tensor的形状与对应的类型数量应保持一致并用分号分割,Tensor中的各个维度用逗号分割。
-
调用MxInitFromConfig后,在初次调用ImageProcessor类图像处理接口和TensorOperations的部分接口会初始化DVPP资源池,再次调用接口时不会进行初始化,会直接使用DVPP通道资源池,其中DVPP资源池大小可通过“globalCfg”或“globalCfgExtra”进行设置。第一次调用ImageProcessor和TensorOperations的部分接口时间会包含DVPP资源池初始化的时间,导致接口调用的总体时间增长。
Note
- 一个进程内只能调用一次MxInitFromConfig接口。
- DVPP资源池所申请的底层通道资源为进程共享,多进程场景可能导致资源耗尽,请谨慎使用。
- DVPP资源池与VideoEncoder及VideoDecoder共享底层通道资源,极端场景可能导致资源耗尽,建议根据实际场景的需要进行资源池大小的初始化。
- 该接口会注册监测日志数量和监测日志时间的线程,线程命名分别为“log_filenum”和“log_time”。
APP_ERROR MxInitFromConfig(const std::string &configFile);
APP_ERROR MxInitFromConfig(const std::string &configFile, const AppGlobalCfg &globalCfg);
APP_ERROR MxInitFromConfig(const std::string &configFile, const AppGlobalCfgExtra &globalCfgExtra);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configFile | 输入 | std::string类型,预加载配置JSON文件路径,JSON要求属主为当前用户且权限不大于640。 |
| globalCfg | 输入 | AppGlobalCfg类型,应用全局配置。 |
| globalCfgExtra | 输入 | AppGlobalCfgExtra类型,应用全局配置。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxDeInit
全局去初始化,释放Log、Device等相关资源,需与全局初始化接口(MxInit或MxInitFromConfig)配套使用。相关使用流程请参考初始化与去初始化。
Note
- 涉及申请Device侧资源的类(Tensor、Model、Image、ImageProcessor、VideoEncoder和VideoDecoder)与MxDeInit的作用域冲突,因此,这些类的作用域不能大于或等于MxDeInit的作用域。
- 执行完MxDeInit后,日志级别将会失效,且日志无法落盘。
APP_ERROR MxDeInit();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
自定义内存资源池管理
总体说明
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeviceFreeFuncHookReg
注册自定义内存管理接口-Device内存释放。需与DeviceMallocFuncHookReg接口成对使用,若不匹配,或只注册了其一,会使用默认方式,直接申请/释放内存。该功能仅支持Atlas 推理系列产品。
相关使用流程请参考自定义内存资源池管理。
APP_ERROR DeviceFreeFuncHookReg(g_deviceFreeFuncType pFun);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pFun | 输入 | Device内存释放的函数类型。传入的函数需和以下函数类型保持一致: APP_ERROR (*)(void*); 需要输入的参数依次为:dev_ptr:待释放内存的指针。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeviceMallocFuncHookReg
注册自定义内存管理接口-Device内存申请。需与DeviceFreeFuncHookReg接口成对使用,若不匹配,或只注册了其一,会使用默认方式,直接申请/释放内存。该功能仅支持Atlas 推理系列产品。
相关使用流程请参考自定义内存资源池管理。
APP_ERROR DeviceMallocFuncHookReg(g_deviceMallocFuncType pFun);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pFun | 输入 | Device内存申请的函数类型。传入的函数需和以下函数类型保持一致: APP_ERROR (*)(void**, unsigned int, MxMemMallocPolicy); 需要输入的参数依次为: MxMemMallocPolicy结构定义请见MxMemMallocPolicy。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DVPPFreeFuncHookReg
注册自定义内存管理接口-DVPP内存释放。需与DVPPMallocFuncHookReg接口成对使用,若不匹配,或只注册了其一,会使用默认方式,直接申请/释放内存。该功能仅支持Atlas 推理系列产品。
相关使用流程请参考自定义内存资源池管理。
APP_ERROR DVPPFreeFuncHookReg(g_dvppFreeFuncType pFun);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pFun | 输入 | DVPP内存释放的函数类型。传入的函数需和以下函数类型保持一致: APP_ERROR ()(void); 需要输入的参数为:dev_ptr:待释放内存的指针 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DVPPMallocFuncHookReg
注册自定义内存管理接口DVPP内存申请。需与DVPPFreeFuncHookReg接口成对使用,若不匹配或只注册了其一,会使用默认方式,直接申请/释放内存。该功能仅支持Atlas 推理系列产品。
相关使用流程请参考自定义内存资源池管理。
APP_ERROR DVPPMallocFuncHookReg(g_dvppMallocFuncType pFun);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pFun | 输入 | DVPP内存分配的函数类型。传入的函数需和以下函数类型保持一致: APP_ERROR (*)(unsigned int, void**, unsigned long long); 需要输入的参数依次为: |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
异步调用
AscendStream
[!NOTICE] 通过AscendStream创建的Stream,不能直接通过AscendCL接口进行操作,否则会导致异常。
类说明
该类用于异步流程控制。
相关使用流程请参考异步调用。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
- 对于Atlas 推理系列产品,同一设备(deviceId)Stream最大支持创建1020个。具体请参见《CANN 应用开发指南 (C&C++)》。
- 对于Atlas 200I/500 A2 推理产品,同一设备(deviceId),Stream创建个数推荐不超过256个。
- 对于Atlas 800I A2推理产品,同一设备(deviceId),Stream创建个数推荐不超过1024个。
- AscendStream需显式调用DestroyAscendStream()接口销毁资源,因此在右值使用场景下可能会存在未调用DestroyAscendStream接口所导致的资源泄漏,请用户谨慎使用该场景。
- 请勿使用赋值运算符。
公共参数
| 参数名 | 数据类型 | 参数说明 |
|---|---|---|
| stream | void* | Stream对应的指针,默认值为nullptr。 |
| isDefault_ | bool | 声明当前创建的Stream是否为默认Stream,默认值为false(即非默认)。 |
AddTensorRefPtr
将输入Tensor挂载到AscendStream对象上,延长输入Tensor的生命周期。当调用Synchronize或者DestroyAscendStream时,AscendStream对象会释放被挂载的Tensor。
APP_ERROR AscendStream::AddTensorRefPtr(const Tensor& inputTensor);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensor | 输入 | Tensor类,需要挂载到AscendStream对象上的张量。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
AscendStream
AscendStream类的构造函数。
原型1:
explicit AscendStream::AscendStream(int32_t deviceId = 0);
原型2:
explicit AscendStream::AscendStream(int32_t deviceId, AscendStream::FlagType flag); // 支持用户传入FlagType,构造快速流和异步流。构造失败时,会抛出std::runtime_error异常。
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 指定Stream对应的设备ID。 |
| flag | 输入 | 当前创建Stream的flag类型,数据结构如下:enum FlagType { DEFAULT = 0, FAST_LAUNCH = 1, FAST_SYNC = 2, LAUNCH_SYNC = 3,};数据结构说明: 对于Atlas 200I/500 A2 推理产品,只支持“DEFAULT”模式。 |
~AscendStream
AscendStream类的默认析构函数。
AscendStream::~AscendStream();
CreateAscendStream
在当前进程或线程中创建一个Stream,同步接口。
Note
该接口会注册处理Stream上回调函数的线程,线程统一命名为“mx_stream”。
APP_ERROR AscendStream::CreateAscendStream();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CreateChannel
创建一个Stream的通道,最多仅支持创建255个,如超出该限制将会出现异常。
APP_ERROR AscendStream::CreateChannel();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DestroyAscendStream
销毁一个Stream。
用户在创建Stream之后,必须在调用MxDeInit()接口进行去初始化之前调用此接口,否则会有资源泄漏的风险。具体使用流程可参考异步调用。
APP_ERROR AscendStream::DestroyAscendStream();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DefaultStream
在当前进程创建一个默认Stream,静态对象,不支持异步调用。使用前需初始化设备并调用SetDevice指定具体设备ID。
static AscendStream &AscendStream::DefaultStream();
| 数据结构 | 说明 |
|---|---|
| AscendStream | 返回AscendStream类。 |
GetChannel
获取指定Stream的通道号。
APP_ERROR AscendStream::GetChannel(int* channelId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| channelId | 输出 | Stream对应的通道号指针。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetDeviceId
获取Stream所在设备ID(deviceId)。
int32_t AscendStream::GetDeviceId() const;
| 数据结构 | 说明 |
|---|---|
| int32_t | Stream所在的设备ID。 |
GetErrorCode
获取并返回已记录的错误码,以pair(对)形式返回。
与SetErrorCode配合使用,需在调用Synchronize之后使用。
std::pair<APP_ERROR, APP_ERROR> AscendStream::GetErrorCode();
| 数据结构 | 说明 |
|---|---|
| std::pair<APP_ERROR, APP_ERROR> | 返回已记录的错误码对,其中第一个字段为第一次记录的错误码,第二个字段为最后记录的错误码。 |
LaunchCallBack
提供异步回调功能。
需在调用CreateAscendStream之后使用。
APP_ERROR AscendStream::LaunchCallBack(aclrtCallback fn, void* userData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| fn | 输入 | 指定要增加的回调函数。回调函数的函数原型参见如下。typedef void (*aclrtCallback)(void *userData) |
| userData | 输入 | 回调函数所需的参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetErrorCode
记录异步任务中产生的错误码。
接口将会记录第一次以及最后一次产生的错误码,可通过GetErrorCode接口获取。
void AscendStream::SetErrorCode(APP_ERROR errCode);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| errCode | 输入 | 错误码,记录单次产生的错误码。 |
Synchronize
阻塞应用程序运行,直到指定Stream中的所有任务都完成,同步接口。
APP_ERROR AscendStream::Synchronize() const;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
媒体数据处理
Image
类说明
Image数据类,作为图像处理(包含图片编解码)的输入与输出的数据结构。默认情况下,用户在Host侧构造输入数据,数据在设备间的转移由ImageProcessor类来进行管理,用户无需进行内存数据的转移操作。图像类的校验会在ImageProcessor类进行。
Note
Image类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
ConvertToTensor
将DVPP侧Image类转换为Device侧Tensor类,或将Host侧Image转换为Host侧Tensor,转换后的Tensor类对象的数据类型为uint8。
- 若转换失败,则会返回空的Tensor实例。
- 若因内存不足或无法识别芯片等异常场景,导致Tensor类构造失败的话,则会抛出异常。
Note
- “withStride”参数为“true”时,Tensor对象会保留Image对象的补边信息。为减少内存拷贝,提高运行效率,此时返回的Tensor对象与Image对象共享数据内存,同时在该场景下,Image对象的数据内存会与Tensor对象的数据内存相互影响,例如:在Image对象释放后,对应的Tensor对象中的数据将变为无效内存数据。
- ConvertToTensor()为无参数接口时,返回的Tensor对象会保留Image对象的补边信息并存在batch维度(即NHWC,其中batch维度N = 1)。
Tensor Image::ConvertToTensor(bool withStride, bool formatNHWC);
Tensor Image::ConvertToTensor();
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| withStride | 输入 | bool类型,指定是否保留补边信息。若为true,则表示保留补边信息,与Image对象共享数据内存。若为false,表示不保留补边信息,不与Image对象共享数据内存。 |
| formatNHWC | 输入 | bool类型,指定转换得到的Tensor是否有batch维度。若为true,则指定返回Tensor中存在batch维度。若为false,则指定返回Tensor中没有batch维度。 |
| 数据结构 | 说明 |
|---|---|
| Tensor | Tensor类,具体请参见Tensor。 |
DumpBuffer
将图像内存数据落盘到二进制文件,需要指定文件名称及具体路径。
APP_ERROR Image::DumpBuffer(const std::string& filePath, bool forceOverwrite = false);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| filePath | 输入 | 落盘数据文件路径(包含文件名称),不支持软链接。 |
| forceOverwrite | 输入 | 保存时是否强制覆盖已有文件,默认为false,不覆盖。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetData
获取Image对象的内存数据指针。
std::shared_ptr<uint8_t> Image::GetData() const;
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr<uint8_t> | 返回内存数据的智能指针。 |
GetDataSize
获取Image对象的内存数据大小。
uint32_t Image::GetDataSize() const;
| 数据结构 | 说明 |
|---|---|
| uint32_t | 返回内存数据的大小。 |
GetDeviceId
获取Image对象的deviceId。
int32_t Image::GetDeviceId() const;
| 数据结构 | 说明 |
|---|---|
| int32_t | Image的设备号。 |
GetFormat
获取Image对象的图片类型。
ImageFormat Image::GetFormat() const;
| 数据结构 | 说明 |
|---|---|
| ImageFormat | 返回图片的类型,具体请参见ImageFormat。 |
GetOriginalData
用于获取有效图片内存数据。
当前支持以下图像类型。
YUV_400 = 0,
RGB_888 = 12,
BGR_888 = 13,
ARGB_8888 = 14,
ABGR_8888 = 15,
RGBA_8888 = 16,
BGRA_8888 = 17,
std::shared_ptr<uint8_t> Image::GetOriginalData() const;
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr<uint8_t> | 返回内存地址(智能指针)。 |
GetOriginalSize
获取Image对象的原始图片宽高。
Size Image::GetOriginalSize() const;
| 数据结构 | 说明 |
|---|---|
| Size | 返回图片的原始宽高。 |
GetSize
获取Image对象的图片对齐后的宽高(实际内存大小的宽高)。
Size Image::GetSize() const;
| 数据结构 | 说明 |
|---|---|
| Size | 返回图片对齐后的宽高,实际内存大小的宽高。 |
Image
Image类的构造函数,可支持以下方式进行创建。若因内存不足,或无法识别芯片等构造失败的场景,则会抛出异常。
- 创建空Image对象。
- 创建自定义内存数据的图片,图片格式类型默认为ImageFormat::YUV_SP_420,设备ID默认为Host侧(deviceId = -1)。
- 创建带对齐高、宽和有效高、宽,自定义内存数据的图片,使用时需满足以下条件。
-
“deviceId”(设备ID)需为有效值,取值范围为[-1, 识别到的Device数-1],否则接口会调用失败。
-
“format”支持以下图片格式类型。
YUV_400 = 0, RGB_888 = 12, BGR_888 = 13, ARGB_8888 = 14, ABGR_8888 = 15, RGBA_8888 = 16, BGRA_8888 = 17, -
“dataSize”需要与有效宽高或对齐后宽高一致,计算公式可参考:dataSize = 宽 * 高 * 通道数。
-
Note
用户申请Host内存后,如需在Device侧构造Image对象,请参考如下操作进行。
- 在Host侧构造Image对象,“deviceId”为“-1”(与“imageData”内存位置一致,设置为Host侧)。
- 构造后的Image对象使用ToDevice(deviceId)方法,将内存迁移至Device侧。
Image::Image();
Image::Image(const std::shared_ptr<uint8_t> imageData, const uint32_t dataSize, const int32_t deviceId = -1, const Size imageSize = DEFAULT_IMAGE_SIZE, const ImageFormat format = ImageFormat::YUV_SP_420);
Image::Image(const std::shared_ptr<uint8_t> imageData, const uint32_t dataSize, const int32_t deviceId, const std::pair<Size, Size> imageSizeInfo, const ImageFormat format);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| imageData | 输入 | 用户构造的输入内存,该内存由用户管理申请和释放,不能为空指针(nullptr)。 |
| dataSize | 输入 | 用户输入内存的大小,需要与实际内存数据大小一致。 |
| imageSize | 输入 | 图像的宽高,默认为(0, 0)。若用户自申请Device侧的内存,请设置实际内存数据对应的图像高宽数据。 |
| imageSizeInfo | 输入 | 图像有效宽高与对齐后宽高的组合,有效宽、高应不超过对齐后的宽、高,输入方式参见如下。std::pair<Size, Size> imageSizeInfo(有效宽高,对齐后的宽高)有效宽、高取值范围为[6, 8192]。对齐后宽、高取值范围为[16, 8192],其中宽为16的倍数、高为2的倍数。 |
| format | 输入 | 图片格式类型。 |
| deviceId | 输入 | 用户输入内存的设备ID。若用户自申请Device侧的内存,请输入对应的deviceId。取值范围:[-1, 识别到的Device数-1]。该值需要与imageData为同一侧内存(Host侧为-1,Device侧为具体设备ID),否则后续业务存在风险和异常。 |
~Image
Image类的默认析构函数。
Image::~Image();
operator =
Image类重载等号运算符,对成员变量进行深拷贝,对内存数据进行浅拷贝,引用计数加一。
Image &operator = (const Image &img);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| img | 输入 | 输入的Image类。 |
Serialize
将图像内存数据及元数据序列化后落盘保存为文件。
APP_ERROR Image::Serialize(const std::string& filePath, bool forceOverwrite = false);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| filePath | 输入 | 序列化后的数据文件保存路径(包括文件名称),不支持软链接。 |
| forceOverwrite | 输入 | 保存时是否强制覆盖已有文件,默认为false,不覆盖。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetImageAlignedSize
设置对齐后的图片宽高。
-
需根据Image实际输入的图像数据进行设置,图像数据不可为空。
-
当前支持以下图像类型。
YUV_400 = 0, RGB_888 = 12, BGR_888 = 13, ARGB_8888 = 14, ABGR_8888 = 15, RGBA_8888 = 16, BGRA_8888 = 17,
APP_ERROR Image::SetImageAlignedSize(const Size whSize);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| whSize | 输入 | 对齐后的图片宽高,单位为像素,对齐后的宽、高取值范围为[16, 8192]且大于或等于有效宽、高。其中宽需为16的倍数,高需为2的倍数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetImageOriginalSize
设置有效图片数据的宽高。
需根据Image实际输入的图像数据进行设置,图像数据不可为空。
APP_ERROR Image::SetImageOriginalSize(const Size whSize);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| whSize | 输入 | 有效宽高,单位为像素,有效宽、高取值范围为[6, 8192]且不超过对齐后的宽、高。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
TensorToImage
将Host侧Tensor类转换为Host侧Image类,或将Device侧Tensor类转换为DVPP侧Image类。
在转换过程中,会对Image的宽进行16向上对齐、对Image的高进行2向上对齐,转换后的Image类对象将存在补边区域。
转换后的Image类可调用成员函数GetSize()返回Size类对象查看补边后的宽、高,调用成员函数GetOriginalSize()返回Size类对象查看图片原始宽、高。
例如:
- Tensor类对象对应的图片宽、高为500、499时,转换得到的Image类对象在补边后,通过GetOriginalSize()可获得宽、高分别为500、499,通过GetSize()可获得宽、高分别为512、500。
- Tensor类对象对应的图片宽、高为512、500时,转换得到的Image类对象不需要补边,即转换后的Image类对象宽、高仍为512、500。
static APP_ERROR Image::TensorToImage(const Tensor& inputTensor, Image& Image, const ImageFormat& imageFormat);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensor | 输入 | Tensor类,输入张量。输入需满足以下要求。 |
| Image | 输出 | Image类,输出图片,其内存分配在DVPP侧。 |
| imageFormat | 输入 | ImageFormat类,指定图片的格式,需与inputTensor数据所对应的图片格式相匹配。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToDevice
将Image类内保存的图像内存数据转移到Device侧。
APP_ERROR Image::ToDevice(const int32_t devId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| devId | 输入 | 要转移到的设备ID。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToHost
将Image类内保存的图像内存数据转移到Host侧。
APP_ERROR Image::ToHost();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Unserialize
将Serialize中保存的落盘数据文件加载到内存中,需指定文件名称及具体路径。
APP_ERROR Image::Unserialize(const std::string& filePath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| filePath | 输入 | 落盘数据文件保存路径,输入文件大小支持范围为(0, 4GB]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ImageProcessor
类说明
ImageProcessor类,作为图像处理类,主要开放图像编解码、缩放和抠图等接口。
ImageProcessor对象不支持在多线程中并发使用,如需多线程使用同一个ImageProcessor对象,用户需自行保证加锁互斥。
Note
ImageProcessor类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
如图1所示,由于硬件限制,ImageProcessor使用过程中存在部分限制,为了加快读写速度,图片长宽需要对齐到指定大小,但不影响有效区域(采用向右、向下填充无效数据的方式,对齐到指定大小)。
在对图片进行缩放等操作时,ImageProcessor将会以图片原始的高宽进行处理。
ConvertFormat
ImageProcessor类的色域转换接口,使用该接口申请的Image内存无需用户管理,由内部管理释放。当前接口仅能够在Atlas 推理系列产品和Atlas 800I A2推理产品环境上调用。
相关使用流程请参考色域转换。
APP_ERROR ImageProcessor::ConvertFormat(const Image& inputImage, const ImageFormat outputFormat, Image& outputImage);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入转换前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。 |
| outputFormat | 输入 | 色域转换的目标格式,支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888。 |
| outputImage | 输出 | 转换输出Image图像。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Crop
ImageProcessor类的图像抠图接口,Atlas 推理系列产品和Atlas 800I A2推理产品支持异步执行,使用该接口申请的Image内存无需用户管理,由内部管理释放,抠图效果示意图请参见图1。
相关使用流程请参考抠图。
-
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品和Atlas 800I A2推理产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
“inputImage”的真实图片分辨率范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的分辨率为18 * 6 ~ 8192 * 8192。
-
抠图区域不超出输入图片区域,输入抠图坐标框“cropRect”的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
抠图区域的最大分辨率为4096 * 4096,最小分辨率为18 * 6。例如:cropRect{1, 1, 1287, 1287},实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
-
输出“outputImageVec”中,各项图片的宽自动与16对齐,高与2对齐,范围为[32 * 6 , 4096 * 4096]。
-
批量输入图片的抠图场景,输入图片数量不超过12张,抠图配置参数“cropRectVec”长度不超过256,输出图片张数不超过256且应满足输出图片张数 = 输入图片张数 * 抠图配置参数“cropRectVec”长度。
原型1:
APP_ERROR ImageProcessor::Crop(const Image& inputImage, const Rect& cropRect, Image& outputImage, AscendStream& stream = AscendStream::DefaultStream());
原型2:
APP_ERROR ImageProcessor::Crop(const Image& inputImage, const std::vector<Rect>& cropRectVec, std::vector<Image>& outputImageVec, AscendStream& stream = AscendStream::DefaultStream());
原型3:
APP_ERROR ImageProcessor::Crop(const std::vector<Image>& inputImageVec, const std::vector<Rect>& cropRectVec, std::vector<Image>& outputImageVec, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入抠图前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高。 |
| inputImageVec | 输入 | 输入抠图前的Image类列表(针对批量抠图场景)。 |
| cropRect | 输入 | 输入图像的抠图坐标框。 |
| cropRectVec | 输入 | 输入图像的抠图坐标框列表(针对批量抠图场景)。 |
| outputImage | 输出 | 输出抠图后的Image类。 |
| outputImageVec | 输出 | 输出抠图后的Image类列表(针对批量抠图场景)。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CropAndPaste
ImageProcessor类的图像抠图并贴图接口,Atlas 推理系列产品和Atlas 800I A2推理产品支持异步执行,抠图贴图效果示意图请参见图1。
相关使用流程请参考抠图贴图。
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品和Atlas 800I A2推理产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
从“inputImage”中抠取一块图像。
- 输入Image类的真实图片宽高大小范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
- 抠图宽高范围不能超过“inputImage”的真实图片宽高,抠图区域的范围最小为:10 * 6。
- 输入抠图参数的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。例如:cropRect{1, 1, 1287, 1287},实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288。
-
缩放至指定贴图区域的大小。
-
将缩放后的图片贴到“pastedImage”的指定贴图区域。
-
贴图宽高范围不能超过“pastedImage”的真实图片宽高,贴图区域的范围最小为: 10 * 6 ,最大为:4096 * 4096。
-
输入贴图参数的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
贴图参数左上角坐标的x会自动对齐到16的倍数。例如:
- pasteRect{17, 17, 1287, 1287} ,实际贴图宽高为:((1287 + 1) - (17 - 1))= 1272,对应的分辨率为1272 * 1272。
- pasteRect{18, 18, 1287, 1287} ,实际贴图宽为:((1287 + 1) - 32) = 1256,高为:((1287 + 1) - 18) = 1270,对应的分辨率为1256 * 1270。
-
在Atlas 200I/500 A2 推理产品环境下,贴图宽高不能超过抠图宽高的[1/32, 16]倍数区间。
-
在Atlas 推理系列产品和Atlas 800I A2推理产品环境下,贴图“rect”的实际宽需要与“16”对齐,否则会有无效数据做填充。在Atlas 200I/500 A2 推理产品环境下,贴图“rect”的右下角的“x”值推荐与“16”对齐。
-
-
输出的“pastedImage”宽自动与16对齐,高与2对齐,因此宽高范围为:32 * 6 ~ 4096 * 4096。
APP_ERROR ImageProcessor::CropAndPaste(const Image& inputImage, const std::pair<Rect, Rect>& cropPasteRect, Image& pastedImage, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入抠图缩放前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| cropPasteRect | 输入 | 输入图像的抠图缩放贴图参数。第一个Rect对应抠图参数,第二个Rect对应缩放贴图参数。 |
| pastedImage | 输入/输出 | 输出抠图后的Image类。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CropResize
ImageProcessor类的图像抠图并缩放接口,Atlas 推理系列产品和Atlas 800I A2推理产品支持异步执行,使用该接口申请的Image内存无需用户管理,由内部管理释放,抠图缩放效果示意图请参见图1。
相关使用流程请参考抠图缩放。
-
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品和Atlas 800I A2推理产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
“inputImage”的真实图片宽高大小范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
-
抠图区域的最小为10 * 6,抠图区域不能超出输入图片的真实图片宽高,输入“cropRect”的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
-
输出Image类的最大分辨率为4096 * 4096,最小分辨率为18 * 6。例如:cropRect{1, 1, 1287, 1287} ,实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
-
缩放的范围为18 * 6 ~ 4096 * 4096,不能超出抠图区域的[1/32, 16]倍数区间。
-
输出“outputImageVec”中,各项图片的宽自动与16对齐,高与2对齐,范围为[32 * 6 , 4096 * 4096]。
原型1:
APP_ERROR ImageProcessor::CropResize(const Image& inputImage, const std::vector<Rect>& cropRectVec, const Size& resize, std::vector<Image>& outputImageVec, AscendStream& stream = AscendStream::DefaultStream());
原型2:
APP_ERROR ImageProcessor::CropResize(const Image& inputImage, const std::vector<std::pair<Rect, Size>>& cropResizeVec, std::vector<Image>& outputImageVec, AscendStream& stream = AscendStream::DefaultStream());
原型3:
APP_ERROR ImageProcessor::CropResize(const std::vector<Image>& inputImageVec, const std::vector<std::pair<Rect, Size>>& cropResizeVec, std::vector<Image>& outputImageVec, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入抠图缩放前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| inputImageVec | 输入 | 输入抠图缩放前的Image类列表(针对批量抠图缩放场景)。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| cropRectVec | 输入 | 输入抠图参数列表,需要与输出图像列表的元素个数一致。 |
| resize | 输入 | 输入统一缩放宽高。 |
| cropResizeVec | 输入 | 输入图像的抠图缩放参数列表。Rect为抠图坐标框,Size为缩放宽高(针对批量抠图缩放场景)。 |
| outputImageVec | 输出 | 输出抠图后的Image类列表(针对批量抠图缩放场景)。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Decode
ImageProcessor类的图片解码接口,使用该接口申请的Image内存无需用户管理,由内部管理释放。仅支持以Host侧申请的内存作为解码接口的输入。输入图片内存的数据类型目前支持JPEG和PNG两种格式。相关使用流程请参考图片解码。
-
JPG/JPEG格式:
-
JPG/JPEG输入图片的最大分辨率:8192 * 8192,其中 RGB_888, BGR_888 格式只支持至 4096*4096。
-
JPG/JPEG输入图片的最小分辨率:32 * 32。
-
输出解码后的图片及“outputImage”的数据类型目前仅支持YUV_SP_420,YVU_SP_420两种图像格式,Atlas 推理系列产品和Atlas 800I A2推理产品额外支持RGB_888,BGR_888格式的解码。
-
输出图片的宽。
- Atlas 200I/500 A2 推理产品对齐到128(即宽度为128的倍数),在对齐操作前,接口会向下2对齐操作,例如:图片原图宽为1023,在进行Decode接口解码处理后,通过GetSize()获得的值为1024,通过GetOriginalSize()获得的值为1022。
- Atlas 推理系列产品和Atlas 800I A2推理产品对齐到64(即宽度为64的倍数),RGB_888,BGR_888 格式对齐到16,解码接口自动对齐。
-
输出图片的高:对齐到16(即高度为16的倍数),解码接口自动对齐。
对于Atlas 200I/500 A2 推理产品,在对齐操作前,接口会向下2对齐操作,例如:图片原图高为683,在进行Decode接口解码处理后,通过GetSize()获得的值为688,通过GetOriginalSize()获得的值为682。
Note
JPG/JPEG输入图片格式约束:
- 只支持Huffman编码,码流的subsample为444/422/420/400/440。
- 不支持算术编码。
- 不支持渐进JPEG格式。
- 不支持JPEG2000格式。
-
-
PNG格式:
- PNG输入图片的最大分辨率:4096 * 4096。
- PNG输入图片的最小分辨率:32 * 32。
- 输出图片的宽:对齐到128(即宽度为128的倍数),解码接口自动对齐。
- 输出图片的高:对齐到16(即高度为16的倍数),解码接口自动对齐。
APP_ERROR ImageProcessor::Decode(const std::shared_ptr<uint8_t> dataPtr, const uint32_t dataSize, Image& outputImage, const ImageFormat decodeFormat = ImageFormat::YUV_SP_420);
APP_ERROR ImageProcessor::Decode(const std::string inputPath, Image& outputImage, const ImageFormat decodeFormat = ImageFormat::YUV_SP_420);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dataPtr | 输入 | 输入待解码图片数据的内存地址。解码前图像数据内存地址需要用户进行管理。 |
| dataSize | 输入 | 输入待解码图片数据的内存大小。需要与dataPtr的实际内存大小相符。 |
| decodeFormat | 输入 | 输入解码后图片的格式。
|
| inputPath | 输入 | 输入待解码的图片路径。 |
| outputImage | 输出 | 输出解码后的Image类。图片宽高和对齐后的宽高会自动合入至outputImage内。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Encode
ImageProcessor类的图片编码接口,使用该接口申请的Image内存无需用户管理,由内部管理释放图片编码。
相关使用流程请参考。
-
输入图像的最大分辨率:8192 * 8192。
-
输入图像的最小分辨率:32 * 32。
-
输入图像的真实宽、高均为偶数,若为奇数,则自动向上取偶数,编码出的图片自动补边1像素。
-
输入图像的宽:对于YUV420SP或RGB数据,对齐到16。
-
输入图像的高:与输入图片的高度相同的数值,或为输入图片的高度向上对齐到16的数值(最小为32)。
-
输入图像格式:
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品和Atlas 800I A2推理产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
输出图片格式:JPEG压缩格式的图片文件,例如*.jpg。
APP_ERROR ImageProcessor::Encode(const Image& inputImage, const std::string savePath, const uint32_t encodeLevel = 100);
APP_ERROR ImageProcessor::Encode(const Image& inputImage, std::shared_ptr<uint8_t>& outDataPtr, uint32_t& outDataSize, const uint32_t encodeLevel = 100);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入编码前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高。 |
| encodeLevel | 输入 | 默认为100,Atlas 200I/500 A2 推理产品、Atlas 推理系列产品和Atlas 800I A2推理产品的范围为[1, 100]。 |
| savePath | 输入 | 输入编码后保存的图片路径,文件后缀名限制为jpg。 |
| outDataPtr | 输出 | 输出编码后的图片内存数据地址。 |
| outDataSize | 输出 | 输出编码后的图片内存数据大小。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ImageProcessor
ImageProcessor类的构造函数。
若因内存不足,或无法识别芯片等构造失败的场景会抛出std::runtime_error异常。
图像处理接口(解码除外)的输入Image类包含的内存数据均需要在Device侧,用户使用ImageProcessor类内的接口获取的Image对象内存数据已经在Device侧,并且无需用户管理释放。
ImageProcessor::ImageProcessor(const int32_t deviceId = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 图像处理类部署的芯片,默认为0号芯片。取值范围:[0, 识别到的芯片个数 - 1]。 |
~ImageProcessor
ImageProcessor类的默认析构函数。
ImageProcessor::~ImageProcessor()
InitJpegDecodeChannel
初始化JPEGD图像通道,用于JPEG解码。
不支持Atlas 800I A2推理产品。
APP_ERROR ImageProcessor::InitJpegDecodeChannel(const JpegDecodeChnConfig& config = JPEG_DECODE_CHN_CONFIG);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数,默认值为JPEG_DECODE_CHN_CONFIG。对应数据结构参见如下(当前预留)。struct JpegDecodeChnConfig {}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitJpegEncodeChannel
初始化JPEGE图像通道,用于JPEG编码。
不支持Atlas 800I A2推理产品。
APP_ERROR ImageProcessor::InitJpegEncodeChannel(const JpegEncodeChnConfig& config = JPEG_ENCODE_CHN_CONFIG);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数,取值范围为[32, 8192],默认值为JPEG_ENCODE_CHN_CONFIG,(即图像最大宽高为8192 * 8192)。仅对Atlas 推理系列产品生效。对于Atlas 200I/500 A2 推理产品,该配置无效。当前仅支持配置图片编码的通道宽高(maxPicWidth、maxPicHeight),内部自动16对齐,当高小于宽时,高自动向上对齐到宽的长度,请根据实际编码场景图片预留适当的宽高。对应数据结构参见如下。struct JpegEncodeChnConfig { uint32_t maxPicWidth = MAX_HIMPI_VENC_PIC_WIDTH; uint32_t maxPicHeight = MAX_HIMPI_VENC_PIC_HEIGHT;}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitPngDecodeChannel
初始化PNGD图像通道,用于PNG图片解码。
不支持Atlas 800I A2推理产品。
APP_ERROR ImageProcessor::InitPngDecodeChannel(const PngDecodeChnConfig& config = PNG_DECODE_CHN_CONFIG);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数,默认值为PNG_DECODE_CHN_CONFIG。对应数据结构参见如下(当前预留)。struct PngDecodeChnConfig {}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitVpcChannel
初始化VPC图像通道,用于图像处理功能(抠图、缩放、补边、抠图缩放、抠图贴图、色域转换)。
此接口在Atlas 推理系列产品和Atlas 800I A2推理产品上无需显示调用,VPC通道从资源池获取。
APP_ERROR ImageProcessor::InitVpcChannel(const VpcChnConfig& config = VPC_CHN_CONFIG);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| config | 输入 | 通道配置参数,默认值为VPC_CHN_CONFIG。对应数据结构参见如下(当前预留)。struct VpcChnConfig {}; |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Padding
ImageProcessor类的图像补边接口,使用该接口申请的Image内存无需用户管理,由内部管理释放。
相关使用流程请参考补边。
- 输入输出Image类支持的图像格式为YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
- “inputImage”的真实图片分辨率范围:18 * 6 ~ 4096 * 4096。
- 当前接口仅支持“BORDER_CONSTANT”补边方式,其余补边方式预留接口。YUV_SP_420和YVU_SP_420格式,补边尺寸建议为偶数,当补边尺寸为奇数时,会自动进行向上对齐。例如,用户输入补边尺寸为(1, 1, 1, 1),将自动对齐到(2, 2, 2, 2),上下左右各补2个像素点。当输入图片分辨率为4095 * 4095,补边尺寸为(1, 0, 1, 0)时,由于自动对齐后的补边尺寸为4097 * 4097,超出范围,因此会补边失败。
- “outputImage”分辨率为18 * 6 ~ 4096 * 4096,宽自动与16对齐,高与2对齐,范围为[32 * 6 , 4096 * 4096]。
APP_ERROR ImageProcessor::Padding(const Image& inputImage, Dim &padDim, const Color& color, const BorderType borderType, Image& outputImage);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入补边前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| padDim | 输入 | 输入图像补边的尺寸。 |
| color | 输入 | 输入补边三通道颜色值,仅在borderType设置为BORDER_CONSTANT时有效。 |
| borderType | 输入 | 输入补边方式,具体实现请参见BorderType。 |
| outputImage | 输出 | 输出补边后的Image类。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Resize
ImageProcessor类的图像缩放接口,Atlas 推理系列产品和Atlas 800I A2推理产品支持异步执行,使用该接口申请的Image内存无需用户管理,由内部管理释放,缩放效果示意图请参见图1。
相关使用流程请参考缩放。
-
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
- Atlas 推理系列产品和Atlas 800I A2推理产品支持YUV_SP_420、YVU_SP_420、RGB_888、BGR_888(nv12、nv21、rgb、bgr),其中RGB(BGR)图像格式分辨率不超过(4096 * 4096)。
-
“inputImage”的真实图片分辨率范围[18 * 6 , 4096 * 4096],其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
-
参数“resize”的最大分辨率:4096 * 4096,最小分辨率:32 * 6。
-
“outputImage”宽自动与16对齐,高与2对齐,因此宽高范围为:32 * 6 ~ 4096 * 4096。
-
缩放后图片的宽高不能超出真实图片的[1/32 ,16]倍数区间。
APP_ERROR ImageProcessor::Resize(const Image& inputImage, const Size& resize, Image& outputImage, const Interpolation interpolation, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入缩放前的Image类。Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| resize | 输入 | 输入图像缩放的宽高。 |
| interpolation | 输入 | 输入图像的缩放方式,可选参数参见如下。HUAWEI_HIGH_ORDER_FILTER = 0BILINEAR_SIMILAR_OPENCV = 1NEAREST_NEIGHBOR_OPENCV = 2BILINEAR_SIMILAR_TENSORFLOW = 3NEAREST_NEIGHBOR_TENSORFLOW = 4Atlas 200I/500 A2 推理产品支持以下算法(默认为0)。0:华为自研的高滤波算法。1:业界通用的Bilinear算法(与OpenCV算法的计算精度接近)。2:业界通用的Nearest Neighbor算法(与OpenCV算法的计算精度接近)。3:业界通用的Bilinear算法(与TensorFlow框架的计算精度接近)。4:业界通用的Nearest Neighbor算法(与TensorFlow框架的计算精度接近)。Atlas 推理系列产品和Atlas 800I A2推理产品支持以下算法(同步执行时默认为0)。0、1:业界通用的Bilinear算法(与OpenCV算法的计算过程类似,当输入和输出图片格式都为RGB时,在[1/32, 512]的缩放范围内,与OpenCV算法的单个像素值最大差异为正负1)。2:业界通用的Nearest Neighbor算法(与OpenCV算法的计算过程类似。) |
| outputImage | 输出 | 输出缩放后的Image类。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Tensor
类说明
Tensor数据类,作为模型推理的输入与输出的数据结构。
Note
Tensor类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。
接口的硬件支持情况如表1所示,标识的含义如下:
- √:支持
- x:不支持
| 接口 | Atlas 200I/500 A2 推理产品 | Atlas 推理系列产品 | Atlas 800I A2推理产品 |
|---|---|---|---|
| BatchConcat | √ | √ | √ |
| Clone | √ | √ | √ |
| GetByteSize | √ | √ | √ |
| GetData | √ | √ | √ |
| GetDataType | √ | √ | √ |
| GetDeviceId | √ | √ | √ |
| GetMemoryType | √ | √ | √ |
| GetReferRect | √ | √ | √ |
| GetShape | √ | √ | √ |
| GetValidRoi | √ | √ | √ |
| IsEmpty | √ | √ | √ |
| IsWithMargin | √ | √ | √ |
| Malloc | √ | √ | √ |
| operator = | √ | √ | √ |
| operator == | √ | √ | √ |
| SetShape | √ | √ | √ |
| Tensor | √ | √ | √ |
| ~Tensor | √ | √ | √ |
| TensorFree | √ | √ | √ |
| TensorMalloc | √ | √ | √ |
| ToDevice | √ | √ | √ |
| ToDvpp | √ | √ | √ |
| ToHost | √ | √ | √ |
| SetReferRect | x | √ | x |
| SetTensorValue | √ | √ | √ |
| SetValidRoi | √ | √ | √ |
| Transpose | √ | √ | √ |
BatchConcat
将多个Tensor进行组batch,按照batch维组装,默认输入的每个Tensor第一维为batch维,内存连续。
friend APP_ERROR Tensor::BatchConcat(const std::vector<Tensor> &inputs, Tensor &output);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputs | 输入 | 待组batch的Tensor列表。 |
| output | 输出 | 组装好batch的Tensor。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Clone
原型1:
将Tensor进行深拷贝,返回拷贝后得到的Tensor。
- 如果Tensor在Host侧,拷贝过程均为同步操作。
- 如果Tensor在DVPP或Device侧,则需根据“stream”参数传入决定同步或异步操作,Tensor所在的Device需与stream所在的Device一致。
原型2:
将Tensor进行指定区域深拷贝,将src的区域内容拷贝到被赋值张量的区域,要求:
- src和被赋值Tensor均不能为空,被赋值Tensor的长宽尺寸为[64, 4096],src的最大高度不超过“1048576”,src总尺寸(N*H*W*C)不超过“67108864”。
- src和被赋值Tensor包含相同高宽的引用区域(ReferRect),且均不为0,ReferRect宽度不超过“1920”。
- src和被赋值Tensor数据类型支持uint8、float16,且类型需一致。
- src和被赋值Tensor仅支持NHWC、HWC和HW形状的Tensor(通道数为1或3,N为1),两者维度和通道数均需相等。
- src和被赋值Tensor需要在DVPP或Device侧。
- src和被赋值所在的Device需与stream所在的Device一致。
// 原型1
Tensor Tensor::Clone(AscendStream &stream=AscendStream::DefaultStream()) const;
// 原型2(仅Atlas 推理系列产品适用该原型)
APP_ERROR Tensor::Clone(const Tensor &src, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | 将src的引用指定区域赋值给执行该方法的张量的引用区域。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
原型1:
| 数据结构 | 说明 |
|---|---|
| Tensor | Tensor类,请参见Tensor。 |
原型2:
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetByteSize
获得Tensor数据内存占用的字节量。
size_t Tensor::GetByteSize() const;
| 数据结构 | 说明 |
|---|---|
| size_t | Tensor数据内存占用的字节量。 |
GetData
获得Tensor的内存数据。
void* Tensor::GetData() const;
| 数据结构 | 说明 |
|---|---|
| void* | Tensor数据裸指针。 |
GetDataType
获得Tensor的数据类型。
MxBase::TensorDType Tensor::GetDataType() const;
| 数据结构 | 说明 |
|---|---|
| MxBase::TensorDType | Tensor的数据类型,请参见TensorDType。 |
GetDeviceId
获得Tensor数据所在的芯片的编号。
int32_t Tensor::GetDeviceId() const;
| 数据结构 | 说明 |
|---|---|
| int32_t | Tensor数据所在的芯片的编号(-1代表在Host侧)。 |
GetMemoryType
获得Tensor的内存类型。
MemoryData::MemoryType Tensor::GetMemoryType() const;
| 数据结构 | 说明 |
|---|---|
| MemoryData::MemoryType | MemoryType的数据类型,请参见MemoryData。 |
GetReferRect
支持查询Tensor的引用区域。
Rect Tensor::GetReferRect() const;
| 数据结构 | 说明 |
|---|---|
| MxBase::Rect | Rect的数据类型,请参见Rect。 |
GetShape
获得Tensor的shape数据。
std::vector<uint32_t> Tensor::GetShape() const;
| 数据结构 | 说明 |
|---|---|
| std::vector<uint32_t> | Tensor的shape数据。 |
GetValidRoi
支持查询Tensor有效区域。
Rect Tensor::GetValidRoi() const;
| 数据结构 | 说明 |
|---|---|
| MxBase::Rect | Rect的数据类型,请参见Rect。 |
IsEmpty
判断Tensor是否为空。
bool Tensor::IsEmpty() const;
| 数据结构 | 说明 |
|---|---|
| bool | 判断Tensor是否为空的结果,布尔类型。 |
IsWithMargin
查询Tensor是否存在补边。
bool Tensor::IsWithMargin() const;
| 数据结构 | 说明 |
|---|---|
| bool | 判断Tensor是否存在补边的结果,布尔类型。 |
Malloc
Tensor的内存申请接口,使用该接口申请的Tensor内存无需用户管理,由内部管理释放。
APP_ERROR Tensor::Malloc();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator =
Tensor类重载等号运算符,对成员变量进行深拷贝,对内存数据进行浅拷贝,引用计数加一。
Tensor &operator=(const Tensor &other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入 | 输入的Tensor类。 |
operator ==
Tensor类重载相等运算符,检查两个Tensor的内容是否相等。
bool operator==(const Tensor &other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入 | 输入的Tensor类。 |
SetShape
设置Tensor的形状(Shape)。
APP_ERROR Tensor::SetShape(std::vector<uint32_t> shape);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| shape | 输入 | Tensor的形状。shape所代表的元素个数需要与Tensor的原shape所代表的元素个数相同。shape向量中各维度要求为正整数且单个或各项乘积需小于536,870,912(512 * 1024 * 1024),否则函数将抛出异常。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Tensor
Tensor类的构造函数。
Tensor::Tensor(); //默认构造函数。 构造失败时,会抛出std::runtime_error异常
Tensor::Tensor(const Tensor &other); // 支持拷贝构造
Tensor::Tensor(const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType, const int32_t &deviceId = -1);
//不传入内存,可搭配Malloc接口进行内存申请,申请的内存无需用户管理释放。 构造失败时,会抛出std::runtime_error异常
Tensor::Tensor(void* usrData,const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType, const int32_t &deviceId = -1);
//传入用户自己构造的数据内存,需要用户自身对此内存进行管理(保证内存数据的生命周期)。 构造失败时,会抛出std::runtime_error异常
Tensor::Tensor(const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType, const int32_t &deviceId, bool isDvpp);
Tensor::Tensor(void *usrData, const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType,const int32_t &deviceId, const bool isDvpp, const bool isBorrowed);
Tensor::Tensor(const Tensor &tensor, const Rect &rect); // 带引用区域的拷贝构造,可用于构造ROI区域(仅Atlas 推理系列产品适用该原型)
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入 | 已初始化的其它Tensor。 |
| usrData | 输入 | 用户构造的输入内存,该内存由用户管理申请和释放。 |
| shape | 输入 | Tensor的shape属性。 |
| dataType | 输入 | Tensor的数据类型,具体请参见TensorDType。 |
| deviceId | 输入 | Tensor所在的设备ID,默认为-1,在Host侧。 |
| isDvpp | 输入 | 设置是否申请DVPP的内存,deviceId如果为-1,则申请Host侧内存,该参数设置无效。 如果传入用户指针usrData并且isDvpp设置为true,则需保证usrData指向的内存在Device侧,否则后续业务存在风险和异常。 |
| isBorrowed | 输入 | 设置是否将usrData指向的内存交由Tensor来释放,isBorrowed的值设为false,则由Tensor来释放usrData指向的内存,用户无需释放;isBorrowed的值设为true,则用户需要自行管理usrData指向的内存。 委托Tensor管理该内存,仅支持需要手动释放的内存,否则可能导致内存重复释放。 |
| rect | 输入 | 代表图片的引用区域坐标(x0, y0, x1, y1)左闭右开。 若采用Tensor(const Tensor &tensor, const Rect &rect)的方式进行构造,要求:tensor不能为空,仅支持NHWC、HWC和HW的tensor,通道数为1/3/4,batch维度为1。rect区域x0,y0需要分别小于x1,y1;x0, y0, x1,y1需要在tensor的宽高范围内。 |
| tensor | 输入 | 已初始化的其它Tensor。 |
~Tensor
Tensor类的默认析构函数。
Tensor::~Tensor();
TensorFree
释放Tensor数据。
static APP_ERROR Tensor::TensorFree(Tensor &tensor);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensor | 输入 | 待释放的Tensor类数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
TensorMalloc
Tensor的内存申请接口,使用该接口申请的Tensor内存无需用户管理,由内部管理释放。
该接口预计在2025年12月正式退出,推荐使用Malloc。
static APP_ERROR Tensor::TensorMalloc(Tensor &tensor);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensor | 输出 | 待申请内存的Tensor,使用不传入内存的构造函数进行构造。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToDevice
将Tensor数据转移到Device侧。
- 如果原始的内存为用户通过构造函数传入,则该原始内存由用户自行管理释放。
- 若是通过TensorMalloc或者Malloc申请的内存,则是将数据转移到Device侧,原始内存被自动释放。
APP_ERROR Tensor::ToDevice(int32_t deviceId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 将Tensor转移到deviceId对应的设备。deviceId需为有效的设备ID。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToDvpp
将Tensor数据转移到DVPP侧。
- 如果原始的内存为用户通过构造函数传入,则该内存由用户自行管理释放。
- 若是通过TensorMalloc或者Malloc申请的内存,则原始内存被自动释放,无需用户管理。
- 使用媒体数据处理功能,申请DVPP侧内存时存在一定约束,具体请参见《CANN 应用开发指南 (C&C++)》。
APP_ERROR Tensor::ToDvpp(int32_t deviceId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 将Tensor转移到deviceId对应的设备。deviceId需为有效的设备ID。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ToHost
将Tensor数据转移到Host侧。
- 如果原始的内存为用户通过构造函数传入,则该内存由用户自行管理释放。
- 若是通过TensorMalloc或者Malloc申请的内存,则是将数据转移到Host侧,原始内存被自动释放,无需用户管理。
APP_ERROR Tensor::ToHost();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetReferRect
支持设置Tensor引用区域,支持NHWC(N=1)、HWC与HW维度,通道为1、3或4,引用区域的宽高不能超过原始图片。
当前仅支持Atlas 推理系列产品。
APP_ERROR Tensor::SetReferRect(Rect rect);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| rect | 输入 | 输入图像的坐标框,x0 < x1,y0 < y1。数据类型请参见Rect。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetTensorValue
设置Tensor的值,支持int32_t、uint8_t、float16、float32类型。
Tensor对象需在Device侧且数据类型与调用的SetTensorValue方法匹配。
Tensor所在的Device需与stream所在的Device一致。
APP_ERROR Tensor::SetTensorValue(uint8_t value, AscendStream& stream = AscendStream::DefaultStream());
APP_ERROR Tensor::SetTensorValue(float value, bool IsFloat16 = false, AscendStream& stream = AscendStream::DefaultStream());
APP_ERROR Tensor::SetTensorValue(int32_t value, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| value | 输入 | int32_t、uint8_t、float类型,指定Tensor待设置的值。 |
| isFloat16 | 输入 | bool类型,默认为false。为true时表示设置Tensor元素为float16类型。为false时表示设置Tensor元素为float32类型。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetValidRoi
支持设置Tensor有效区域,支持NHWC(N=1)、HWC与HW维度,有效区域的宽高不能超过原始图片。
APP_ERROR Tensor::SetValidRoi(Rect rect);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| rect | 输入 | 输入图像的坐标框,数据类型请参见Rect。起始坐标(x0, y0)只能为(0, 0)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Transpose
可通过指定的一组轴维度(axes),对输入的Tensor数据进行转置处理,如未指定具体轴维度,则默认对Tensor数据进行反序转置。
该功能支持对输出数据进行内存复用,用户可通过预先申请的内存(内存大小需与输入一致)传入输出数据。
功能仅支持在Host侧执行操作,如需处理Device侧Tensor数据,请先通过ToHost接口,将Device侧数据转移到Host侧,再进行转置。
friend APP_ERROR Tensor::Transpose(const Tensor &input, Tensor &output, std::vector<uint32_t> axes = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| input | 输入 | 待转置Tensor类。维度支持2维、3维、4维,数据类型支持float32、float16、uint8。 |
| output | 输出 | 转置后的Tensor类。 |
| axes | 输入 | 转置选项,默认值为空。如果未指定具体axes,则默认生成反序axes对input中的数据进行反序转置。例如:三维张量默认生成反序axes为{2, 1, 0} 。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
TensorOperations
总体说明
本章节部分接口调用的底层算子默认开启融合规则,以提升计算效率。算子所使用的融合规则均记录在接口执行目录的“fusion_result.json”文件,该文件字段详细说明及融合规则开关配置可参考《CANN ATC离线模型编译工具用户指南》中的“--fusion_switch_file”章节。
相关使用流程请参考张量运算。
- 在多线程场景下使用支持算子预加载的接口时,为保证资源的生命周期正确,请通过MxInitFromConfig对相关算子接口进行预加载,具体可参见初始化算子预加载文件示例。
接口的硬件支持情况如表1所示,标识的含义如下:
- √:支持
- x:不支持
| 接口 | Atlas 200I/500 A2 推理产品 | Atlas 推理系列产品 | Atlas 800I A2推理产品 |
|---|---|---|---|
| Abs | √ | √ | × |
| AbsDiff | √ | √ | × |
| AbsSum | × | √ | × |
| Add | √ | √ | × |
| AddWeighted | √ | √ | × |
| BackgroundReplace | × | √ | × |
| BatchSplit | √ | √ | × |
| BitwiseAnd | √ | √ | × |
| BitwiseNot | √ | √ | × |
| BitwiseOr | √ | √ | × |
| BitwiseXor | √ | √ | × |
| BlendImageCaption | × | √ | × |
| BlendImages | × | √ | × |
| Clip | √ | √ | × |
| Compare | √ | √ | × |
| ConvertTo | √ | √ | × |
| Crop | x | √ | x |
| CropResize | x | √ | x |
| CvtColor | √ | √ | √ |
| Divide | √ | √ | × |
| Erode | × | √ | × |
| Exp | √ | √ | × |
| Hstack | √ | √ | × |
| Log | √ | √ | × |
| Max | √ | √ | × |
| Merge | √ | √ | × |
| Min | √ | √ | × |
| MinMax | × | √ | × |
| MinMaxLoc | × | √ | × |
| Multiply | √ | √ | × |
| Pow | √ | √ | × |
| Reduce | √ | √ | × |
| Rescale | √ | √ | × |
| Resize | × | √ | √ |
| ResizePaste | × | √ | × |
| Rotate | × | √ | √ |
| ScaleAdd | √ | √ | × |
| Sort | √ | √ | × |
| SortIdx | √ | √ | × |
| Split | √ | √ | × |
| Sqr | √ | √ | × |
| SqrSum | × | √ | × |
| Sqrt | √ | √ | × |
| Subtract | √ | √ | × |
| Sum | × | √ | × |
| Threshold | √ | √ | × |
| ThresholdBinary | √ | √ | × |
| Tile | × | √ | × |
| Transpose | √ | √ | × |
| Vstack | √ | √ | × |
| WarpAffineHiper | × | √ | × |
| WarpPerspective | × | √ | × |
Abs
Tensor类的张量取绝对值运算,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为Float32或Float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,Abs计算性能优于cv::abs在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::abs在CPU上的性能。
APP_ERROR Abs(const Tensor &src, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
AbsDiff
图像处理类算法,张量绝对差值计算AbsDiff,支持float16、float32、uint8。支持异步调用,支持预加载。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上时,当输入Tensor数据类型为float32或float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,AbsDiff计算性能优于cv::absdiff在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::absdiff在CPU上的性能。
APP_ERROR AbsDiff(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| src2 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src1/src2相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
AbsSum
图像处理类算法,张量绝对值求和计算AbsSum,支持float32、uint8。支持异步调用。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的通道数一致。输入Tensor仅支持HWC,支持的通道数为1或3。输出Tensor的数据类型均为float32。
APP_ERROR AbsSum(const Tensor &src, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float32和uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,仅支持float32类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。输入Tensor形状为HWC,输出形状为C。例如输入Tensor为[16,16,3],输出Tensor形状为[3]。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Add
图像处理类算法,张量加法Add,支持float16、float32、uint8。支持异步调用。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例。
使用时需满足以下条件:
-
接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
-
同步场景下,数据内存所在Device需与初始化的Device一致。
-
请注意处理数据类型越界问题。
-
各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
-
在Atlas 推理系列产品上,当输入尺寸在1080P(1920*1080)以上,计算性能优于cv::add在CPU上的性能。
-
在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::add在CPU上的性能。
-
在Atlas 推理系列产品上支持inplace操作,当支持inplace操作时,输入输出Tensor支持HW/HWC/NHWC,且支持输入输出Tensor的HW不同,但需要保证参与运算的ROI的shape相同。
Note
仅支持inplace的接口可以相互复用ROI,指定ROI区域请参见Tensor。
APP_ERROR Add(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,加数,输入张量,支持float16、float32、uint8类型输入。 |
| src2 | 输入 | Tensor类,加数,输入张量,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
AddWeighted
图像处理类,Tensor类的张量加权混合接口(即dst = alpha*src1 + beta*src2 + gamma),支持float16、float32、uint8,支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
APP_ERROR AddWeighted(const Tensor &src1, float alpha, const Tensor &src2, float beta, float gamma, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| alpha | 输入 | float类型,张量src1的系数。 |
| src2 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| beta | 输入 | float类型,张量src2的系数。 |
| gamma | 输入 | float类型,计算dst最后相加的值。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src1/src2相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BackgroundReplace
背景替换接口,将输入的新的背景图片与已有图片进行融合,通过掩膜的方式将背景替换为新的背景(即dst = background*(1-mask)+ replace*mask)。支持异步调用。
当“background”和“dst”为同一个Tensor时,可以实现inplace替换。
当前仅支持Atlas 推理系列产品。
该接口需要依赖CANN 8.0.RC1或CANN 8.0.RC1以后的版本。
使用时需满足以下条件:
- 接口中输入输出Tensor的数据内存及stream需位于同一Device中。
- 同步场景下,输入输出Tensor数据内存所在Device需与初始化的Device一致。
- 各输入、输出的宽高可以不一致,计算时取最小的有效区域进行替换。有效区域为张量本身,如张量设置了引用区域,则有效区域为引用区域。
APP_ERROR BackgroundReplace(Tensor &background, const Tensor &replace, const Tensor &mask, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| background | 输入 | Tensor类,输入张量,被替换的目标张量,支持float16、uint8类型,维度支持HW(二维)、HWC(三维)、其中“C”(通道数)为1或3,张量宽度支持[1,4096],张量高度支持[1,4096],数据内存必须在Device侧或DVPP侧。 |
| replace | 输入 | Tensor类,输入张量,替换的张量,支持float16、uint8类型,维度支持HW(二维)、HWC(三维)、其中“C”(通道数)为1或3,张量宽度支持[1,4096],张量高度支持[1,4096],数据内存必须在Device侧或DVPP侧。数据类型和维度(包括C)必须和background一致。 |
| mask | 输入 | Tensor类,输入张量,mask的张量,支持float16,维度支持HW(二维)、HWC(三维),当background和replace的C为1时,C支持1,当background和replace的C为3时,C支持1和3,张量宽度支持[1,4096],张量高度支持[1,4096],数据内存必须在Device侧或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,替换的结果张量,支持float16、uint8类型,维度支持HW(二维)、HWC(三维)、其中“C”(通道数)为1或3,张量宽度支持[1,4096],张量高度支持[1,4096],数据内存必须在Device侧或DVPP侧。数据类型和维度(包括C)必须和background一致。如果不为空,需要调用Tensor.Malloc()接口提前分配内存。支持传入空tensor,输出tensor的数据类型、维度和background一致,宽度为background、mask、dst有效区域宽度的最小值,高度为background、mask、dst有效区域高度的最小值。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BatchSplit
图像处理类算法,张量支持Batch拆分操作,支持float16、float32、uint8。支持异步调用,支持输入输出内存复用。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的类型一致,输入Tensor的形状(Shape)为三维或者四维,如NWHC/NCHW/NHW。
- 输出不为空时需输出vector的大小等于输入Tensor的Batch大小,且输出vector中每个Tensor为输入Tensor去掉Batch维度后的结果,即将NWHC/NCHW/NHW拆分为N个WHC/CHW/HW。
APP_ERROR BatchSplit(const Tensor &src, std::vector<Tensor> &dst, bool isReplace, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量。其中,Tensor支持float16、float32、uint8类型。维度支持三维或四维。 |
| dst | 输出 | std::vector<Tensor>类,输出。支持float16、float32、uint8(需与“src”一致)。支持传入空vector,如果vector不为空,vector中的Tensor需要调用Tensor.Malloc()接口提前分配内存。 |
| isReplace | 输入 | bool类型,当值为true时,输出dst会复用输入src的内存,两者的生命周期一致,因此需要用户自行保证。当值为false时,输出dst与输入src互不影响(各自的内存释放由各自的生命周期决定)。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时或当isReplace为true时,接口为同步操作。其余情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BitwiseAnd
图像处理类算法,按位与BitwiseAnd,支持uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
APP_ERROR BitwiseAnd(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持uint8类型输入。 |
| src2 | 输入 | Tensor类,输入张量,支持uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BitwiseNot
图像处理类算法,按位取反操作BitwiseNot,支持uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(通过预加载“BitwiseXor”进行预加载,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
APP_ERROR BitwiseNot(const Tensor &src, Tensor &dst, AscendStream& stream=AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,支持uint8类型,支持传入空Tensor,如果dst不为空,形状必须与“src”相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BitwiseOr
图像处理类算法,按位或BitwiseOr,支持uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
APP_ERROR BitwiseOr(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持uint8类型输入。 |
| src2 | 输入 | Tensor类,输入张量,支持uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BitwiseXor
图像处理类算法,按位异或BitwiseXor,支持uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
APP_ERROR BitwiseXor(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持uint8类型输入。 |
| src2 | 输入 | Tensor类,输入张量,支持uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BlendImageCaption
将字幕、背景板、按照字幕透明度和背景板透明度贴到图像帧上。(即caption*alpha/255 + (1-alpha/255)*(1-Opacity)*frame + captionBg*Opacity*(1-alpha/255)),支持异步调用。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中输入输出Tensor的数据内存及stream需位于同一Device中。
- 同步场景下,输入输出Tensor数据内存所在Device需与初始化的Device一致。
- 贴图计算区域大小以caption张量为准,默认为其引用区域,若其未设置引用区域,则为caption全部张量大小作为计算区域。其余张量需要与其设置相同高宽的引用区域,若未设置引用区域,则全部张量大小视为计算区域。所有输入输出张量大小的计算区域需要具有相同的高宽,最大计算宽度为1920。
APP_ERROR BlendImageCaption(Tensor &frame, const Tensor &caption, const Tensor &captionAlpha, const Tensor &captionBg, float captionBgOpacity, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| frame | 输入和输出 | Tensor类,输入和输出张量,背景帧张量。高宽范围均在[64, 4096],仅支持UINT8类型。支持NHWC(N为1)、HWC、HW,其中通道数需要与caption一致。数据内存必须在Device或DVPP侧,不支持传入空tensor。 |
| caption | 输入 | Tensor类,输入张量,字幕张量。高宽范围均在[64, 4096],仅支持UINT8类型。支持NHWC(N为1)、HWC、HW,通道数为1或3。数据内存必须在Device或DVPP侧,不支持传入空tensor。 |
| captionAlpha | 输入 | Tensor类,输入张量,字幕图片mask的张量,高宽范围均在[64, 4096],仅支持UINT8类型。支持NHWC(N为1)、HWC、HW,通道数为1。数据内存必须在Device或DVPP侧,不支持传入空tensor。 |
| captionBg | 输入 | Tensor类,输入张量,字幕背景图张量,高宽范围均在[64, 4096],仅支持UINT8类型。支持NHWC(N为1)、HWC、HW,其中通道数需要与caption一致。数据内存必须在Device或DVPP侧,不支持传入空tensor。 |
| captionBgOpacity | 输入 | 背景板透明度,范围[0,1] |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
BlendImages
透明度贴图接口,将素材帧按照其透明度贴到背景帧上(即material_rgb*(material_alpha/255) + (1-material_alpha/255)*frame)。支持异步调用。
当前仅支持Atlas 推理系列产品。
该接口需要依赖CANN 8.0.RC1或CANN 8.0.RC1以后的版本。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出的宽高可以不一致,计算时取最小的有效区域进行替换。
APP_ERROR BlendImages(const Tensor &material, Tensor &frame, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| material | 输入 | Tensor类,输入张量,素材帧张量,支持uint8类型,维度支持HWC(三维)、其中“C”(通道数)为“4”(即RGBA格式),张量宽度支持[1,4096],张量高度支持[1,4096],数据内存必须在Device侧或DVPP侧。不支持传入空Tensor。 |
| frame | 输入和输出 | Tensor类,输入和输出张量,背景帧张量,支持uint8类型,维度支持HWC(三维),其中“C”(通道数)为3(即RGB格式),张量宽度支持[1,4096],张量高度支持[1,4096],数据内存必须在Device侧或DVPP侧。不支持传入空Tensor。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作;其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Clip
图像处理类,Tensor类的张量裁剪接口,用于将张量中的元素限制在给定的最小值和最大值之间(小于最小值的元素将会被替换为最小值、大于最大值的元素将会被替换为最大值)。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的类型一致、形状(Shape)相等且不超过4维。
APP_ERROR Clip(const Tensor &src, Tensor &dst, float minVal, float maxVal, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| minVal | 输入 | float类型,张量中裁剪后的最小值,小于最小值的元素将会被替换为最小值。minVal需小于或等于maxVal。 |
| maxVal | 输入 | float类型,张量中裁剪后的最大值,大于最大值的元素将会被替换为最大值。maxVal需大于或等于minVal。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Compare
图像处理类算法,张量比较算法Compare,输入输出张量支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
-
接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
-
同步场景下,数据内存所在Device需与初始化的Device一致。
-
各输入、输出参数对应Tensor类型(type)、形状(shape)相等、类型一致且不超过4维。
-
在Atlas 推理系列产品上,当输入Tensor数据类型为float32,尺寸在480P(640*480)以上,数据类型为uint8,尺寸在1080P(1920*1080)以上,或数据类型为float16,尺寸在960*540以上,Compare计算性能优于cv::compare在CPU上的性能。
-
在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::compare在CPU上的性能。
APP_ERROR Compare(const Tensor &src1, const Tensor &src2, Tensor &dst, const CmpOp cmpOp = CmpOp::CMP_EQ, AscendStream& stream = AscendStream::DefaultStream());
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| src2 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,当满足比较结果时,张量结果为255,否则为0,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| cmpOp | 输入 | 枚举类值,对应张量比较的类型,仅支持等于、不等于、小于、大于、小于等于、大于等于。具体请参见CmpOp。enum class CmpOp { CMP_EQ = 0, CMP_NE, CMP_LT, CMP_GT, CMP_LE, CMP_GE }; |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作;其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ConvertTo
将Tensor的值转换为指定类型,支持float32、float16、int8、int32、uint8、int16、uint16、uint32、int64、uint64、double64、bool类型的转换。支持异步调用。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 在Atlas 推理系列产品上,src支持inplace操作。当src支持inplace操作时,输入输出Tensor支持HW/HWC/NHWC;支持u8和fp16/fp32类型的相互转换;输出Tensor不允许设置ROI且输出Tensor的Shape宽高与src的ROI宽高需要保持一致。
APP_ERROR ConvertTo(const Tensor &src, Tensor &dst, const MxBase::TensorDType &dataType, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量。inplace操作时,src的ROI和dst的shape一致。非inplace操作时,src和dst的shape一致, |
| dst | 输出 | Tensor类,输出张量,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| dataType | 输入 | TensorDType类,指定转换的类型,需与dst的TensorDType属性相同。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Crop
Tensor类的抠图接口,支持异步执行,使用该接口申请的Tensor内存无需用户管理,由内部管理释放。
相关使用流程请参考抠图。
当前仅支持Atlas 推理系列产品。
-
输入输出Tensor类支持的图像格式为YUV_400、RGB_888,输入分辨率不超过(4096 * 4096)。
-
“inputTensor”的真实图片分辨率范围:10 * 6 ~ 4096 * 4096,输入图像格式为YUV_400时,范围为18 * 6 ~ 4096 * 4096。
-
抠图区域不超出输入图片区域,抠图区域最大分辨率为4096 * 4096。
- 输入图像格式为“RGB_888”时,抠图区域最小分辨率为10 * 6。
- 输入图像格式为“YUV_400”时,抠图区域最小分辨率为18 * 6。
-
输出“outputTensorVec”或者“outputTensor”中,若设置“keepMargin”为“true”, 输出图片的宽自动与16对齐,范围为:10 * 6 ~ 4096 * 4096。“keepMargin”参数默认值为“false”,即不保留Tensor中无效的边界区域,输出Tensor宽高与抠图宽高一致。
-
支持传入空vector,vector不能有空Tensor。如果输入Tensor设置了有效区域,则抠图的区域需要在有效区域内,否则会造成抠图失败。
-
批量抠图的场景,输入Tensor数量只支持一个,抠图配置参数“cropRectVec”长度不超过256,输出Tensor数不超过256且应满足输出Tensor数 = 输入图片张数 * 抠图配置参数“cropRectVec”长度。
原型1:
APP_ERROR Crop(const Tensor &inputTensor, const Rect &cropRect, Tensor &outputTensor, bool keepMargin = false, AscendStream& stream = AscendStream::DefaultStream());
原型2:
APP_ERROR Crop(const Tensor &inputTensor, const std::vector<Rect> &cropRectVec, std::vector<Tensor> &outputTensorVec, bool keepMargin = false, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensor | 输入 | Tensor类,输入张量,不可为空,需在Device/DVPP侧分配内存,数据类型为UINT8。输入张量宽度范围为[10, 4096],高度范围为[6, 4096],若输入或输出张量格式包含YUV400时,宽度范围为[18, 4096]。 |
| cropRect | 输入 | 输入Tensor的抠图坐标框,不得超过输入张量的宽高范围。 |
| cropRectVec | 输入 | 输入Tensor的抠图坐标框列表(针对批量抠图场景)。 |
| outputTensor | 输出 | 输出抠图后的Tensor类。 |
| outputTensorVec | 输出 | 输出抠图后的Tensor类列表(针对批量抠图场景)。 |
| keepMargin | 输入 | 输出的outputTensor中是否保留Tensor中无效的边界区域。默认值为false,表示不保留Tensor中无效的边界区域,即输出Tensor宽高与抠图宽高一致。 |
| stream | 输入 | 输入用于异步执行的Stream,默认为AscendStream::DefaultStream(),表示创建一个默认流(即同步执行)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CropResize
Tensor类的抠图并缩放接口,支持异步执行,使用该接口申请的Tensor内存无需用户管理,由内部管理释放。
相关使用流程请参考抠图缩放。
当前仅支持Atlas 推理系列产品。
-
输入输出Tensor类支持的图像格式为YUV_400、RGB_888,其中输入分辨率不超过(4096 * 4096)。
-
“inputTensor”的真实图片宽高大小范围:10 * 6 ~ 4096 * 4096,若输入或输出张量格式为YUV_400时,宽度范围为[18, 4096]。
-
抠图区域不能超出输入图片的真实图片宽高,抠图区域最大分辨率为4096 * 4096。
- 输入图像格式为“RGB_888”时,抠图区域最小分辨率为10 * 6。
- 输入图像格式为“YUV_400”时,抠图区域最小分辨率为18 * 6。
-
缩放的范围为10 * 6 ~ 4096 * 4096,当输入图像格式为YUV_400时,最小分辨率为18 * 6,缩放范围不能超出抠图区域的[1/32, 16]倍数区间。
-
抠图区域数量不能大于256,抠图区域数量、缩放范围数量、输出tensor数量三者必须相等。
-
输出“outputTensorVec”中,若设置“keepMargin”参数为“true”,输出Tensor的宽自动与16对齐。“keepMargin”参数默认值为“false”,不保留Tensor中无效的边界区域,即输出Tensor宽高与缩放参数一致。
-
支持传入空vector,vector不能有空Tensor。如果输入Tensor设置了有效区域,则抠图的区域需要在有效区域内,否则会造成抠图失败。
APP_ERROR CropResize(const Tensor &inputTensor, const std::vector<Rect> &cropRectVec, const std::vector<Size> &sizeVec, std::vector<Tensor> &outputTensorVec, const Interpolation interpolation = Interpolation::BILINEAR_SIMILAR_OPENCV, bool keepMargin = false, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensor | 输入 | Tensor类,输入张量,不可为空,需在Device/DVPP侧分配内存,数据类型为UINT8。输入张量宽度范围为[10, 4096],高度范围为[6, 4096],若输入或输出张量格式包含YUV400时,宽度范围为[18, 4096]。 |
| cropRectVec | 输入 | 输入抠图参数(Rect类)列表,需要与输出Tensor列表的元素个数一致。 |
| sizeVec | 输入 | 输入缩放参数(Size类)列表,需要与输出Tensor列表的元素个数一致。 |
| outputTensorVec | 输出 | 输出抠图并缩放后的Tensor类列表。 |
| interpolation | 输入 | 输入Tensor的缩放方式,可选参数参见如下。HUAWEI_HIGH_ORDER_FILTER = 0BILINEAR_SIMILAR_OPENCV = 1NEAREST_NEIGHBOR_OPENCV = 2Atlas 推理系列产品支持以下算法(默认为1)。0、1:业界通用的Bilinear算法(与OpenCV算法的计算过程类似,当输入和输出图片格式都为RGB时,在[1/32, 512]的缩放范围内,与OpenCV算法的单个像素值最大差异为正负1)。2:业界通用的Nearest Neighbor算法(与OpenCV算法的计算过程类似。) |
| keepMargin | 输入 | 输出的outputTensor中是否保留Tensor中无效的边界区域。默认值为false,表示不保留Tensor中无效的边界区域,即输出Tensor宽高与缩放参数宽高一致。 |
| stream | 输入 | 输入用于异步执行的Stream,默认为AscendStream::DefaultStream(),表示创建一个默认流(即同步执行)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CvtColor
将Tensor的图像色域类型转换为指定的色域类型,支持以下类型间的转换。
“outputTensor”若设置“keepMargin”为“true”,输出宽度自动与16对齐。默认值为“false”,不保留Tensor中无效的边界区域。
相关使用流程请参考色域转换。
各产品支持的色域转换类型如表1所示,标识的含义如下:
- √:支持
- x:不支持
| 色域转换类型 | Atlas 200I/500 A2 推理产品 | Atlas 推理系列产品 | Atlas 800I A2推理产品 |
|---|---|---|---|
| YUVSP420(nv12)转YUV400(GRAY) | √ | √ | √ |
| YVUSP420(nv21)转YUV400(GRAY) | x | √ | √ |
| YUVSP420(nv12)转RGB | x | √ | √ |
| YUVSP420(nv12)转BGR | x | √ | √ |
| YVUSP420(nv21)转RGB | x | √ | √ |
| YVUSP420(nv21)转BGR | x | √ | √ |
| RGB转YUVSP420(nv12) | x | √ | √ |
| RGB转YVUSP420(nv21) | x | √ | √ |
| BGR转YUVSP420(nv12) | x | √ | √ |
| BGR转YVUSP420(nv21) | x | √ | √ |
| RGB转YUV400(GRAY) | x | √ | √ |
| BGR转YUV400(GRAY) | x | √ | √ |
| BGR转RGB | x | √ | √ |
| RGB转BGR | x | √ | √ |
| RGB转RGBA | x | √ | √ |
| RGBA转YUV400(GRAY) | x | √ | √ |
| RGBA转RGB | x | √ | √ |
| GRAY转RGB | x | √ | x |
| RGBA转mRGBA | x | √ | x |
Note
RGBA转mRGBA需要依赖CANN 8.0.RC1或CANN 8.0.RC1以后的版本
APP_ERROR CvtColor(const Tensor &inputTensor, Tensor &outputTensor, const CvtColorMode &mode, bool keepMargin = false, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensor | 输入 | Tensor类,输入张量,不可为空,需在Device/DVPP侧分配内存,数据类型为UINT8。形状为 {高,宽, 通道数} 的张量,通道数需要与输入格式一致。RGBA转mRGBA时只支持通道数为4。若inputTensor色域类型为YUVSP420或YVUSP420,设置输入张量形状时,高为图片显示高度的1.5倍。张量的高需要为3的倍数,宽为16的倍数,通道为1。inputTensor使用SetValidRoi接口设置有效区域时,其y1(对应张量的有效高度)需要为3的倍数,对应实际图片的有效高度为y1/3 * 2。输入张量宽度范围为[10, 4096],高度范围为[6, 4096],若输入或输出张量格式包含YUV400、YUVSP420、YVUSP420、GRAY时,宽度范围为[18, 4096]。如果是灰度图,支持形状为{高*宽}的张量。 |
| outputTensor | 输出 | Tensor类,输出张量。若不为空,需在Device/DVPP侧分配内存且数据类型为UINT8。RGBA转mRGBA或GRAY转RGB时张量类型和输入Tensor一致。 |
| mode | 输入 | 枚举类值,对应色域转换的原始类型和目标类型。详见CvtColorMode。若mode色域类型为COLOR_BGR2YUVSP420、COLOR_RGB2YUVSP420、COLOR_RGB2YVUSP420或COLOR_BGR2YVUSP420:建议输入的RGBTensor宽高为偶数,否则输出图片的边缘可能存在异常数据。输出张量的高为输入张量高的1.5倍,例如,输入高为4096,输出的高则为6144,超过部分DVPP接口的限制,使用时需要注意是否满足后续业务需求。 |
| keepMargin | 输入 | 输出的outputTensor中是否保留Tensor中无效的边界区域。默认值为“false”,不保留Tensor中无效的边界区域。若设置“keepMargin”为“true”,输出宽度自动与16对齐,保留无效区域。当mode=COLOR_GRAY2RGB或mode=COLOR_RGBA2mRGBA时,该参数无效。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Divide
图像处理类算法,张量除法Divide,支持float16、float32、uint8。支持异步调用,部分函数原型支持预加载。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 在Atlas 推理系列产品上,该接口为饱和计算,当数据值超过数据类型范围时,不发生回绕;在Atlas 200I/500 A2 推理产品上,该接口为非饱和接口。
- 各输入、输出参数对应Tensor的形状(Shape)相等、不超过4维。允许src1和src2为不同数据类型,dst的数据类型以src1和src2中精度高的数据类型为准。
- 在Atlas 推理系列产品上,当输入尺寸在240P(320*240)以上,计算性能优于cv::divide在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::divide在CPU上的性能。
原型1
APP_ERROR Divide(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
原型2(Atlas 200I/500 A2 推理产品不适用该原型):
APP_ERROR Divide(const Tensor &src1, const Tensor &src2, Tensor &dst, float scale, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,被除数,输入张量,支持float16、float32、uint8类型输入。 |
| src2 | 输入 | Tensor类,除数,输入张量,支持float16、float32、uint8类型输入。src2内的元素不能为0。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| scale | 输入 | float类型,输入标量,输入Tensor src1和标量相乘后结果再与src2相除。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Erode
图像处理类算法腐蚀Erode,腐蚀是形态学处理算法,常见用于图形处理,腐蚀操作可以用于消除噪点,同时消除部分边界值,支持float16、float32、uint8。支持异步调用,不支持预加载。不支持inplace操作。
当前支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、支持HW和HWC。
- 当输入尺寸在240P(320*240)以上,计算性能优于cv::erode在CPU上的性能。
APP_ERROR Erode(const Tensor& src, Tensor& dst, const BlurConfig& blurconfig, AscendStream& stream=AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,需要腐蚀的张量,支持uint8、fp16、fp32数据类型,维度要求HWC(c=1, 3, 4)。张量宽度支持[64,4096],张量高度支持[64,4096]。 |
| dst | 输出 | Tensor类,输出张量,数据类型和形状与src保持一致。支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| blurConfig | 输入 | 腐蚀算法参数配置,具体请参见BlurConfig。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Exp
图像处理类算法,张量自然指数算法Exp,支持float16、float32。支持异步调用。支持预加载(请参见初始化算子预加载文件示例)。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当Tensor尺寸在480P(640 * 480)以上时,Exp计算性能优于cv::exp在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::exp在CPU上的性能。
APP_ERROR Exp(const Tensor &src, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Hstack
图像处理类算法,张量水平堆叠操作,支持float16、float32、uint8。支持异步调用,支持预加载(请参见初始化算子预加载文件示例)。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的形状(shape)相等(除“W”维度)、类型一致且不超过4维。
- 各输入Tensor的宽度总和需小于等于Tensor类型的最大宽度(uint32类型最大值)。
- 输出Tensor不为空时需输出Tensor宽度等于各输入Tensor宽度总和。
APP_ERROR Hstack(const std::vector <Tensor> &tv, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tv | 输入 | std::vector<Tensor>类,用于存储等待拼接的Tensor张量。其中,Tensor支持float16、float32、uint8类型,数据内存必须在Device侧或DVPP侧。维度支持HW(2维)、HWC(3维)、NHWC(4维)且“tv”张量长度大于1(至少传入2个Tensor),“tv”的长度以该vector能成功构造为准,“tv”中Tensor宽度的和不应超过Tensor类的最大宽度(uint32最大值)。 |
| dst | 输出 | Tensor类,输出张量,拼接后的Tensor,支持float16、float32、uint8(需与“tv”一致),支持输入空Tensor,若“dst”不为空,形状必须与“tv”相同,“W”维度(宽度)需等于“tv”中所有Tensor“W”的总和,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“tv”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Log
图像处理类算法,张量自然对数算法Log,支持float16、float32。支持异步调用。支持预加载(请参见初始化算子预加载文件示例)。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当Tensor尺寸在480P(640 * 480)以上时,Log计算性能优于cv::log在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::log在CPU上的性能。
APP_ERROR Log(const Tensor &src, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32类型输入。输入张量的元素值为0时,其对应的输出张量值元素为-inf。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Max
图像处理类算法,张量取较大值计算Max,提供对两个输入Tensor按元素比较并取较大值,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为float32或float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,Max计算性能优于cv::max在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::max在CPU上的性能。
APP_ERROR Max(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| src2 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src1/src2相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Merge
图像处理类,Tensor类的图片通道合并接口,用于将多个图片合并为一个多通道的图片。支持异步调用。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状相等(最后一维除外)、类型一致。
APP_ERROR Merge(const std::vector <Tensor> &tv, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tv | 输入 | std::vector <Tensor>类,用于存储等待合并的Tensor向量。其中,Tensor支持float16、float32、uint8类型。维度支持HWC(三维)、NHWC(四维)且tv向量长度大于1(至少传入2个Tensor)。 |
| dst | 输出 | Tensor类,合并后的多通道Tensor,支持float16、float32、uint8类型,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。dst中的C(通道数)为3或4,等于tv中的C数量总和。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Min
图像处理类算法,张量取较小值计算Min,提供对两个输入Tensor按元素比较并取较小值,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为float32或float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,Min计算性能优于cv::min在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::min在CPU上的性能。
APP_ERROR Min(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| src2 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src1/src2相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MinMax
图像处理类算法,求得输入张量的最小值和最大值,支持float16、float32、uint8。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 输入Tensor需为2维或3维(通道数为1),输出Tensor为输入Tensor所有元素的最值(输出Tensor的维度为1维,元素个数为1)。
APP_ERROR MinMax(const Tensor &src, Tensor &minVal, Tensor &maxVal, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入。 |
| minVal | 输出 | Tensor类,最小值,输出张量,数据类型与src一致,支持传入空Tensor,如果minVal不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| maxVal | 输出 | Tensor类,最大值,输出张量,数据类型与src一致,支持传入空Tensor,如果maxVal不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MinMaxLoc
图像处理类算法,张量求元素最大最小值及其位置索引算法MinMaxLoc,支持float16、float32、uint8。支持异步调用。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景中,数据内存所在Device需与初始化的Device一致。
- 输入Tensor需为2维或3维(通道数为1),输出tensor需为1维,其中最值minVal、maxVal元素个数需为1,最值位置minLoc、maxLoc元素个数需为2。、
APP_ERROR MinMaxLoc(const Tensor &src, Tensor &minVal, Tensor &maxVal, Tensor &minLoc, Tensor &maxLoc, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入。 |
| minVal | 输出 | Tensor类,最小值,输出张量,数据类型与src一致,支持传入空Tensor,如果minVal不为空,需调用Tensor.Malloc()接口提前分配内存。 |
| maxVal | 输出 | Tensor类,最大值,输出张量,数据类型与src一致,支持传入空Tensor,如果maxVal不为空,需调用Tensor.Malloc()接口提前分配内存。 |
| minLoc | 输出 | Tensor类,最小值位置索引,数据类型为uint32,支持传入空Tensor,如果minLoc不为空,需调用Tensor.Malloc()接口提前分配内存。 |
| maxLoc | 输出 | Tensor类,最大值位置索引,数据类型为uint32,支持传入空Tensor,如果maxLoc不为空,需调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为“AscendStream::DefaultStream()”。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Multiply
图像处理类算法,张量乘法Multiply,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(在原型2预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 该接口为饱和计算,即当dst数据类型为uint8,数据值超过uint8最大值(或小于uint8最小值)时,dst值为255(或0),不发生回绕。
- 各输入、输出参数对应Tensor的形状(Shape)相等且不超过4维。
- 当调用原型1时,输入、输出各数据类型需保持一致;当调用原型2时,支持不同输入数据类型,输出dst数据类型与精度高的输入Tensor保持一致。
- 在Atlas 推理系列产品上:对于原型1,当输入尺寸在720P(1280*720)以上,计算性能优于cv::multiply在CPU上的性能;对于原型2,当输入尺寸在480P(640*480)以上,计算性能优于cv::multiply在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::multiply在CPU上的性能。
原型1:
APP_ERROR Multiply(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
原型2:
APP_ERROR Multiply(const Tensor &src1, const Tensor &src2, Tensor &dst, double scale, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,乘数,输入张量,支持float16、float32、uint8类型输入。 |
| src2 | 输入 | Tensor类,乘数,输入张量,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| scale | 输入 | double类型,输入标量,输入Tensor src1和src2相乘后的结果Tensor再与标量相乘。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Pow
图像处理类算法,张量幂运算Pow,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当Tensor尺寸在480P(640 * 480)以上,且指数数值大于等于3时,Pow计算性能优于cv::pow在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::pow在CPU上的性能。
APP_ERROR Pow(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,基数,输入张量,支持float16、float32、uint8类型输入。 |
| src2 | 输入 | Tensor类,指数,输入张量,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Reduce
图像处理类算法,张量规约算法Reduce,支持float16、float32、uint8。支持异步调用,支持预加载(请参见初始化算子预加载文件示例)。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的类型一致且通道数一致,输入支持HW、NHWC和HWC,支持的通道数1~4。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为float32或float16,尺寸在480P(640*480)以上时,Reduce计算性能优于cv::reduce在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入Tensor数据类型为float32或float16,尺寸在480P(480*640)时,Reduce计算性能优于cv::reduce在CPU上的性能。
APP_ERROR Reduce(const Tensor &src, Tensor &dst, const MxBase::ReduceDim &rDim, const MxBase::ReduceType &rType, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,支持HW、HWC和NHWC维度输入,支持通道数为1~4。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。输出形状为输入形状消除规约轴之后的结果。例如输入Tensor为[2,32,16,3],规约轴为H,输出Tensor形状为[2,16,3]。 |
| rDim | 输入 | ReduceDim枚举类型,规约轴,支持规约高或者宽维度。具体请参见ReduceDim。 |
| rType | 输入 | ReduceType枚举类型,规约操作,支持求和、求平均、求最大值和求最小值。具体请参见ReduceType。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作;其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Rescale
Tensor类的张量缩放加法运算(即dst=src * scale + bias),支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
APP_ERROR Rescale(const Tensor &src, Tensor &dst, float scale, float bias, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| scale | 输入 | Float类型,缩放尺度参数,输入标量。 |
| bias | 输入 | Float类型,计算dst最后相加的值。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Resize
Tensor类的缩放接口,支持异步执行,使用该接口申请的Tensor内存无需用户管理,由内部管理释放。
相关使用流程请参考缩放。
当前仅支持Atlas 推理系列产品和Atlas 800I A2 推理服务器。
- 输入输出Tensor类支持的图像格式为YUV_400和RGB_888,其中输入分辨率不超过(4096 * 4096)。
- Atlas 推理系列产品输入的Tensor的数据类型为uint8时,支持RGBA格式图片。
- Atlas 800I A2 推理服务器不支持RGBA格式图片。
- 如果输入Tensor维度为HW、HWC(c=1, 3)时,支持设置有效区域,此时按有效区域进行缩放。有效区域的设置请参考Tensor,输出Tensor不支持设置有效区域。
APP_ERROR Resize(const Tensor &src, Tensor &dst, const Size &resize, const Interpolation interpolation = Interpolation::BILINEAR_SIMILAR_OPENCV, bool keepMargin = false, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,不可为空,需在Device/DVPP侧分配内存,维度要求HW、HWC(c=1, 3, 4)。在Atlas 800I A2 推理服务器上,支持数据类型uint8;在Atlas 推理系列产品上,支持数据类型uint8和float16。真实分辨率范围:10 * 6 ~ 4096 * 4096。输入张量宽度范围为[10, 4096],高度范围为[6, 4096],若输入或输出张量格式为YUV400时,宽度范围为[18, 4096]。 |
| dst | 输出 | Tensor类,输出张量,在Atlas 800I A2 推理服务器上,支持数据类型uint8;在Atlas 推理系列产品上,支持数据类型uint8和float16。支持传入空Tensor,如果不为空,形状必须与缩放后宽高相同,需要调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| resize | 输入 | 输入Tensor缩放的宽高。Size结构体说明请参见Size。最大分辨率:4096 * 4096,最小分辨率:10 * 6,输入图像格式为YUV_400时,最小分辨率为18 * 6。缩放后图片的宽高不能超出真实图片的[1/32 ,32]倍数区间。如果输入Tensor设置了有效区域,缩放后图片的宽高不能超出有效区域的[1/32 ,32]倍数区间。 |
| interpolation | 输入 | 输入Tensor的缩放方式,可选参数参见如下。HUAWEI_HIGH_ORDER_FILTER = 0BILINEAR_SIMILAR_OPENCV = 1NEAREST_NEIGHBOR_OPENCV = 2支持以下算法(默认为1)。0、1:业界通用的Bilinear算法(与OpenCV算法的计算过程类似,当输入和输出图片格式都为RGB时,在[1/32, 32]的缩放范围内,与OpenCV算法的单个像素值最大差异为正负1)。2:业界通用的Nearest Neighbor算法(与OpenCV算法的计算过程类似。) |
| keepMargin | 输入 | 输出的dst中是否保留Tensor中无效的边界区域。默认值为false,表示不保留Tensor中无效的边界区域,即输出Tensor宽高与缩放参数宽高一致;若设置keepMargin为true,输出宽度自动与16对齐(在Atlas 推理系列产品上输入非RGBA格式图片时,该参数不生效)。 |
| stream | 输入 | 输入用于异步执行的Stream,默认为AscendStream::DefaultStream(),表示创建一个默认流(即同步执行)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ResizePaste
图像缩放贴图接口,支持异步执行,使用该接口申请的Tensor内存无需用户管理,由内部管理释放。支持隐式内存分配。如果预贴图的大小不一致,需要先进行缩放。
当前仅支持Atlas 推理系列产品。
- 输入输出Tensor类支持的图像格式参考如下。
- 只支持Atlas 推理系列产品,图像格式只支持YUV_400、RGB_888,其中输入分辨率不超过(4096 * 4096)。
- “background”的真实分辨率范围:[16 * 6 , 4096 * 4096]。
- 参数“PasteRects”的最大分辨率:4096 * 4096,最小分辨率:10 * 6。
- “dst”若设置“keepMargin”为“true”,输出宽度自动与16对齐。若“dst”宽度为16对齐且内存为DVPP侧,则复用输入“background”内存。
- 缩放后图片的宽高不能超出真实图片的[1/32 ,16]倍数区间。
- 输入贴图数量“inputPics”和贴图区域“PasteRects”需一一对应,且最大值为“256”。
- “inputPics”区域在结果图片中的宽为16对齐。
- “keepMargin”控制的为输出结果“dst”是否保留Tensor中无效的边界区域,如果“dst”复用“background”,“background”也会根据“keepMargin”值判断是否保留无效边界区域。默认值为“false”。
- 输入图像格式为“YUV_400”时,最小分辨率为18 * 6。
APP_ERROR ResizePaste(const MxBase::Tensor &background, std::vector<MxBase::Tensor> &inputPics, std::vector<MxBase::Rect> &pasteRects, MxBase::Tensor &dst, bool keepMargin = false, MxBase::AscendStream &stream = MxBase::AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| background | 输入 | Tensor类,输入张量,被贴图的目标张量,支持uint8类型输入,维度支持HW(2维)、HWC(3维)张量,张量宽度支持[16,4096],高度支持[6,4096],灰度支持[18,4096],数据内存必须在Device侧或DVPP侧。 |
| inputPics | 输入 | std::vector<Tensor>类,输入张量,贴在目标张量上的使用张量组,支持uint8类型输入,维度支持HW(2维)、HWC(3维)张量,张量宽度支持[10,4096],高度支持[6,4096],灰度支持[18,4096],数据内存必须在Device侧或DVPP侧。 |
| PasteRects | 输入 | std::vector<Rect>类,被贴图坐标框,坐标框宽会向上16对齐,对齐后坐标框宽高不能超过背景图片background范围。 |
| dst | 输出 | Tensor类,输出张量,贴图结果张量,当keepMargin为true时结果自动16对齐。支持uint8类型输入,维度支持HW(2维)、HWC(3维)张量,张量宽度支持[10,4096],高度支持[6,4096],灰度支持[18,4096],数据内存必须在Device侧或DVPP侧。若dst宽度为16对齐且内存为DVPP侧,则复用输入background内存。 |
| keepMargin | 输入 | bool类,是否保留输出dst中无效边界区域。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Rotate
图像处理类,Tensor类的图片旋转接口,可将图片旋转至指定的角度。支持异步调用。
当前仅支持Atlas 推理系列产品和Atlas 800I A2推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的类型一致。
APP_ERROR Rotate(const Tensor &src, Tensor &dst, const RotateAngle angle, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,不可为空,输入为HWC(三维)或HW(二维)。对于Atlas 推理系列产品,支持float16、float32和uint8类型。对于Atlas 800I A2推理产品,输入张量宽度范围为[10, 4096]。输入图像格式为YUV_400时,宽度最小为18;高度范围为[10, 4096]。需要在Device/DVPP侧分配内存,支持uint8类型。 |
| dst | 输出 | Tensor类,旋转后的结果,支持传入空Tensor。对于Atlas 推理系列产品,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。支持float16、float32和uint8类型;对于Atlas 800I A2推理产品。如果dst不为空Tensor,则输入张量宽度范围为[10, 4096],输入图像格式为YUV_400时,宽度最小为18;高度范围为[10, 4096]。需要在Device/DVPP侧分配内存,支持uint8类型。如果旋转角度为180度,形状(Shape)与src一致。如果旋转角度为90度或270度,形状(Shape)为src的HW通道转置后形状。 |
| angle | 输入 | RotateAngle枚举类,指定顺时针旋转的角度,支持90度,180度,270度(ROTATE_90、ROTATE_180、ROTATE_270)。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ScaleAdd
Tensor类的张量缩放加法运算(即dst=src1 * scale + src2),支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为Float32或Float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,ScaleAdd计算性能优于cv::scaleAdd在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::scaleAdd在CPU上的性能。
APP_ERROR ScaleAdd(const Tensor &src1, float scale, const Tensor &src2, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| scale | 输入 | 缩放尺度参数,输入标量,Float类型。 |
| src2 | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src1/src2相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Sort
图像处理类算法,张量排序算法Sort,输入输出张量支持float16、float32、uint8。支持异步调用。支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的类型一致,输入、输出仅支持HW。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为float32或float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,Sort计算性能优于cv::sort在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::sort在CPU上的性能。
APP_ERROR Sort(const Tensor &src, Tensor &dst, int axis, bool descending, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,仅支持HW维度输入。 |
| dst | 输出 | Tensor类,输出张量,张量内容指值排序结果,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| axis | 输入 | 排序的指定维度,范围为[0, 1],其中,0表示按高维度排序,1表示按宽维度排序。 |
| descending | 输入 | 升/降序选项,默认false为升序。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作;其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SortIdx
图像处理类算法,张量排序索引算法SortIdx,输入张量支持float16、float32、uint8,输出张量仅支持int32。支持异步调用。支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的尺寸一致,输入、输出仅支持HW。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为float32或float16,尺寸在480P(640*480)以上,或者输入Tensor数据类型为uint8,尺寸在1080P(1920*1080)以上时,SortIdx计算性能优于cv::sortIdx在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::sortIdx在CPU上的性能。
APP_ERROR SortIdx(const Tensor &src, Tensor &dstIdx, int axis, bool descending, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,仅支持HW维度输入。 |
| dstIdx | 输出 | Tensor类,输出张量,张量内容指值排序后的索引序列结果,仅支持int32类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。src中有相同值的情况下,dstIdx(排序结果索引值)在Atlas 200I/500 A2 推理产品上的排序结果和Atlas 推理系列产品相反:Atlas 200I/500 A2 推理产品的排序结果默认升序时为从大到小,降序时为从小到大。Atlas 推理系列产品的排序结果默认升序时为从小到大,降序时为从大到小。 |
| axis | 输入 | 排序的指定维度,范围为[0, 1],其中,0表示按高维度排序,1表示按宽维度排序。 |
| descending | 输入 | 升/降序选项,默认false为升序。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作;其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Split
图像处理类,Tensor类的图像通道拆分接口,用于将多通道图片拆分为单通道图片。支持异步调用。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状相等(最后一维除外)、类型一致。
APP_ERROR Split(const Tensor &src, std::vector<Tensor> &tv, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,支持float16、float32、uint8类型输入。维度支持HWC(三维)、NHWC(四维),其中C(通道数)为3或4。 |
| tv | 输入/输出 | std::vector<Tensor>类,用于存储拆分后的单通道Tensor,Tensor类的元素支持float16、float32、uint8类型,支持传入空vector,如果vector不为空,vector中的Tensor需要调用Tensor.Malloc()接口提前分配内存。tv的长度与src一致且C均为1。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Sqr
图像处理类算法,张量平方计算Sqr,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor形状(Shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当输入尺寸在480P(640*480)时,Sqr计算性能优于cv::pow(src, 2, dst)在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::pow在CPU上的性能。
APP_ERROR Sqr(const Tensor &src, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SqrSum
图像处理类算法,张量平方求和计算SqrSum,支持float32、uint8。支持异步调用。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的通道数一致。输入Tensor仅支持HWC,支持的通道数为1或3。输出Tensor的数据类型均为float32。
APP_ERROR SqrSum(const Tensor &src, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float32和uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,仅支持float32类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。输入Tensor形状为HWC,输出形状为C。例如输入Tensor为[16,16,3],输出Tensor形状为[3]。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Sqrt
图像处理类算法,张量平方根算法Sqrt,支持float16、float32。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维,值不能为负数。
- 在Atlas 推理系列产品上,当Tensor尺寸在480P(640 * 480)以上时,Sqrt计算性能优于cv::sqrt在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::sqrt在CPU上的性能。
APP_ERROR Sqrt(const Tensor &src, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Subtract
图像处理类算法,张量减法Subtract,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的形状(Shape)相等、类型一致且不超过4维。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为float32、float16,尺寸在1080P(1920*1080)以上,计算性能优于cv::subtract在CPU上的性能。
- 在Atlas 200I/500 A2 推理产品上,当输入尺寸在720P(720*1280)时,计算性能优于cv::subtract在CPU上的性能。
APP_ERROR Subtract(const Tensor &src1, const Tensor &src2, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src1 | 输入 | Tensor类,被减数,输入张量,支持float16、float32、uint8类型输入。 |
| src2 | 输入 | Tensor类,减数,输入张量,支持float16、float32、uint8类型输入。当类型为uint8时,src2对应位置的元素不能大于src1内的元素。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Sum
图像处理类算法,张量通道求和算法Sum,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的类型一致且通道数一致,输入支持NHWC和HWC,支持的通道数1-4。
- 在Atlas 推理系列产品上,当输入Tensor数据类型为Float32,尺寸在480P(640*480)以上,或者输入Tensor数据类型为Float16,尺寸在540P(960*540)以上时,Sum计算性能优于cv::sum在CPU上的性能。
APP_ERROR Sum(const Tensor &src, Tensor &dst, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,基数,输入张量,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,输出张量,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。输入Tensor形状为NHWC时,输出形状为NC;输入Tensor形状为HWC时,输出形状为C。例如输入Tensor为[2,16,16,3],输出Tensor形状为[2,3]。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作;其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Threshold
图像处理类,Tensor类的阈值处理接口,支持float16、float32、uint8。支持异步调用。不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(通过预加载“ThresholdBinary”进行预加载,预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 在Atlas 推理系列产品上,该接口为饱和计算,当数据值超过数据类型范围时,不发生回绕;在Atlas 200I/500 A2 推理产品上,该接口为非饱和接口。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
APP_ERROR Threshold(const Tensor &src, Tensor &dst, float thresh, float maxVal, const ThresholdType &thresholdType = ThresholdType::THRESHOLD_BINARY, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| thresh | 输入 | float类型,src需要比较的阈值。 |
| maxVal | 输入 | float类型,当src与阈值thresh比较后符合条件所设置的值。 |
| thresholdType | 输入 | 枚举类型ThresholdType,代表阈值分割的具体规则。当前支持二值化、反二值化(默认为二值化,即dst = maxVal (src>thresh) or 0 (src<= thresh),反二值化仅支持Atlas 推理系列产品)。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ThresholdBinary
图像处理类,Tensor类的二值化接口(即dst = maxVal (src>thresh) or 0 (src<= thresh )),支持float16、float32、uint8。支持异步调用。
该接口预计在2025年9月正式退出,推荐使用Threshold。
不支持inplace操作。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(预加载时需要添加attr属性,示例请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据越界问题。
- 在Atlas 推理系列产品上,该接口为饱和计算,当数据值超过数据类型范围时,不发生回绕;在Atlas 200I/500 A2 推理产品上,该接口为非饱和接口。
- 各输入、输出参数对应Tensor形状(shape)相等、类型一致且不超过4维。
APP_ERROR ThresholdBinary(const Tensor &src, Tensor &dst, float thresh, float maxVal, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,支持float16、float32、uint8类型输入,数据内存必须在Device或DVPP侧。 |
| dst | 输出 | Tensor类,输出张量,float16、float32、uint8类型。支持传入空Tensor,如果dst不为空,形状必须与src相同,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“src”同一个Device)或DVPP侧。 |
| thresh | 输入 | float类型,src需要比较的阈值。 |
| maxVal | 输入 | float类型,当src大于阈值thresh时所设置的值。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Tile
图像处理类,Tensor类的张量扩展接口,基于输入张量扩展维度,返回新的张量。支持异步调用,支持预加载(请参见初始化算子预加载文件示例)。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的类型一致且不超过4维。
APP_ERROR Tile(const Tensor &src, Tensor &dst, const std::vector<uint32_t> &multiples, AscendStream& stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,支持float16、float32、uint8类型输入。 |
| multiples | 输入 | std::vector <uint32_t>类,扩展倍数,其元素个数需与src维数一致。 |
| dst | 输出 | Tensor类,支持float16、float32、uint8类型,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。dst各维度形状(Shape)等于src对应维度形状乘各轴扩展倍数。src各轴与扩展倍数相乘后的形状必须与输出一致且扩展倍数不能为0。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Transpose
图像处理类,Tensor类的张量多维转置接口,按照给定的axes维度排列方式进行转置。支持异步调用。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
在Atlas 200I/500 A2 推理产品上,支持预加载(请参见初始化算子预加载文件示例)。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 各输入、输出参数对应Tensor的类型一致且形状(Shape)不超过4维。
APP_ERROR Transpose(const Tensor &src, Tensor &dst, std::vector<int> axes, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,支持float16、float32、uint8类型输入。 |
| dst | 输出 | Tensor类,支持float16、float32、uint8类型输出,支持传入空Tensor,如果dst不为空Tensor,需要调用Tensor.Malloc()接口提前分配内存。形状(Shape)必须为src按照axes规定交换轴过后的形状。例如:src为{1, 480, 640, 3},axes值为{0, 2, 1, 3},dst形状必须为{1, 640, 480, 3}。 |
| axes | 输入 | std::vector<int>类,指定转置操作维度的排列方式。axes长度必须与输入Tensor的维度一致,例如,src为4维,axes长度必须为4。axes中的元素必须包含[0, size-1]区间中的数且每个数只能出现一次。如传入空向量,则按照反序转置进行处理。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Vstack
图像处理类算法,张量垂直堆叠操作,支持float16、float32、uint8。支持异步调用,支持预加载(请参见初始化算子预加载文件示例)。
当前支持Atlas 推理系列产品和Atlas 200I/500 A2 推理产品。
使用时需满足以下条件:
- 接口中的输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 请注意处理数据类型越界问题。
- 各输入、输出参数对应Tensor的形状(shape)相等(除“H”维度)、类型一致且不超过4维。
- 各输入Tensor的高度总和需小于等于Tensor类型的最大高度(uint32类型最大值)。
- 输出Tensor不为空时需输出Tensor高度等于各输入Tensor高度总和。
APP_ERROR Vstack(const std::vector <Tensor> &tv, Tensor &dst, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tv | 输入 | std::vector<Tensor>类,用于存储等待拼接的Tensor张量。其中,Tensor支持float16、float32、uint8类型,数据内存必须在Device侧或DVPP侧。维度支持HW(2维)、HWC(3维)、NHWC(4维)且“tv”张量长度大于1(至少传入2个Tensor),“tv”的长度以该vector能成功构造为准,“tv”中Tensor高度的和不应超过Tensor类的最大高度(uint32最大值)。 |
| dst | 输出 | Tensor类,输出张量,拼接后的Tensor,支持float16、float32、uint8(需与“tv”一致),支持输入空Tensor,若“dst”不为空,形状必须与“tv”相同,“H”维度(高度)需等于“tv”中所有Tensor“H”的总和,需调用Tensor.Malloc()接口提前分配内存,数据内存必须在Device侧(与“tv”同一个Device)或DVPP侧。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
WarpAffineHiper
仿射变换接口,将二维的图片进行缩放、平移、旋转。支持异步调用。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 输出张量支持为空Tensor(当为空Tensor时,默认输出shape与输入张量的shape一致)。
- 当输入Tensor数据类型为Float32或Uint8时,推荐尺寸为480P(640*480),此时计算性能优于cv::warpAffine在CPU上的性能。
APP_ERROR WarpAffineHiper(const Tensor &src, Tensor &dst, const std::vector<std::vector<float>> transMatrix,const PaddingMode paddingMode, const float borderValue,const WarpAffineMode warpAffineMode, AscendStream& stream=AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,需要仿射变换的张量,支持uint8、float16和float32类型,维度要求NHWC(四维),其中“N”(张量个数)为[1,16],“C”(通道数)为[1,4],张量宽度支持[32,2160],张量高度支持[32,3840],数据内存必须在Device侧或DVPP侧。不支持传入空Tensor。 |
| dst | 输出 | Tensor类,输出张量。若为非空Tensor,需调用Tensor.Malloc()接口提前分配内存。维度要求NHWC(四维),要求数据类型、所在芯片ID、“N”(张量个数)和“C”(通道数)与输入张量一致,张量宽度支持[32,2160],张量高度支持[32,3840],数据内存必须在Device侧或DVPP侧。当为空Tensor时,默认输出shape与输入张量的shape一致。 |
| transMatrix | 输入 | 转换矩阵,size必须为2x3格式。接口内部会在第三行补充(0,0,1)形成3x3的矩阵,该矩阵行列式的值不能为0。 |
| paddingMode | 输入 | 枚举值类,对应补边模式,当前仅支持常量值(即PADDING_CONST)。具体请参见PaddingMode。 |
| borderValue | 输入 | 补边的值,范围为[0, 255]。 |
| WarpAffineMode | 输入 | 枚举值类,对应插值方式,当前仅支持双线性插值(即INTER_LINEAR)。具体请参见WarpAffineMode。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Note
如果运行WarpAffineHiper接口出现“Synchronize stream execution failed”错误,请参考运行WarpAffineHiper或WarpPerspective接口出现Synchronize stream execution failed错误解决。
WarpPerspective
透视变换接口,将二维的图片投影到一个三维视平面上,然后再转换到二维坐标下。支持异步调用。
当前仅支持Atlas 推理系列产品。
使用时需满足以下条件:
- 接口中输入输出Tensor必须在Device或DVPP侧且各参数(stream及数据内存)需位于同一Device中。
- 同步场景下,数据内存所在Device需与初始化的Device一致。
- 输出张量宽度和张量高度以输入张量与转换矩阵计算的实际结果为准,输出张量支持为空Tensor(当为空Tensor时,默认输出shape与输入张量的shape一致)。
- 当输入Tensor数据类型为Float32或Uint8时,推荐尺寸为480P(640*480),此时计算性能优于cv::warpPerspective在CPU上的性能。
APP_ERROR WarpPerspective(const Tensor &src, Tensor &dst, const std::vector<std::vector<float>> transMatrix, const PaddingMode paddingMode, const float borderValue, const WarpPerspectiveMode warpPerspectiveMode, AscendStream &stream = AscendStream::DefaultStream());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| src | 输入 | Tensor类,输入张量,需要透视变换的张量,支持uint8、float16和float32类型,维度支持NHWC(四维),其中“N”(张量个数)为[1,16],“C”(通道数)为[1,4],张量宽度支持[32,2160],张量高度支持[32,3840],数据内存必须在Device侧或DVPP侧。不支持传入空Tensor。 |
| dst | 输出 | Tensor类,输出张量。若为非空Tensor,需调用Tensor.Malloc()接口提前分配内存。维度支持NHWC(四维),其中“N”(张量个数)为[1,16],“C”(通道数)为[1,4],张量宽度和张量高度以输入张量与转换矩阵计算的实际结果为准,数据内存必须在Device侧或DVPP侧。要求数据类型、所在芯片ID、“N”(张量个数)和“C”(通道数)与输入张量一致。支持传入空Tensor(当为空Tensor时,默认输出shape与输入张量的shape一致)。 |
| transMatrix | 输入 | 转换矩阵,size必须为3x3格式。该矩阵行列式的值为0。 |
| paddingMode | 输入 | 枚举值类,对应补边模式,当前仅支持常量值(即PADDING_CONST)。具体请参见PaddingMode。 |
| borderValue | 输入 | 补边的值,范围为[0, 255]。 |
| warpPerspectiveMode | 输入 | 枚举值类,对应插值方式,当前仅支持双线性插值(即INTER_LINEAR)。具体请参见WarpPerspectiveMode。 |
| stream | 输入 | AscendStream类型,默认值为AscendStream::DefaultStream()。当参数值为默认值时,接口为同步操作,其他情况下,接口为异步操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Note
如果运行WarpPerspective接口出现“Synchronize stream execution failed”错误,请参考运行WarpAffineHiper或WarpPerspective接口出现Synchronize stream execution failed错误解决。
TensorFeatures
Sift
类说明
该类实现尺度不变特征变换,用于在图像中检测和提取具有尺度不变性和旋转不变性的特征点。
相关使用流程请参考特征提取。
Atlas 200I/500 A2 推理产品
DetectAndCompute
实现图像特征点的提取及计算。
APP_ERROR Sift::DetectAndCompute(Tensor _image, Rect _mask, std::vector<cv::KeyPoint> &keyPoints, cv::OutputArray descriptors, bool useProvidedKeyPoints);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| _image | 输入 | Tensor类,特征提取的输入图片。Tensor维度支持HWC(三维)。不可为空,第三维C(通道数)为1,仅支持单通道。支持1280 * 720输入图片尺寸。 |
| _mask | 输入 | Rect类,输入图片掩码,用于限制需要计算特征的区域,针对该区域内的图像进行特征提取。_mask所表示的掩码矩形框需放置在图片内,Rect类对应的左上角坐标及右下角坐标需在图片有效范围内。 |
| keyPoints | 输入/输出 | 提取的特征点列表。 |
| descriptors | 输出 | 生成的描述子列表。 |
| useProvidedKeyPoints | 输入 | 是否提供特征点列表,即该函数仅进行描述子生成。参数为true时,接口将会根据keyPoints传入的特征点列表生成描述子列表。参数为false时,接口将会根据Sift算法提取特征点列表并根据列表生成描述子列表。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
实现尺度空间构造的模型处理资源初始化。
APP_ERROR Sift::Init(int32_t deviceId = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 模型部署的芯片ID,默认为0。(目前仅支持0号芯片。) |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Sift
Sift类构造函数,作为图像尺度不变特征转换的实现类,主要开放特征点提取及计算接口。目前仅支持Atlas 200I A2 加速模块(20 TOPS,12GB)。
explicit Sift::Sift(int nFeatures = 0, int nOctaveLayers = 3, double contrastThreshold = 0.04, double edgeThreshold = 10, double sigma = 1.6, int descriptorType = CV_32F);// 构造失败时,会抛出std::runtime_error异常
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| nFeatures | 输入 | 提取特征点的排位,即对提取特征点排序,返回最佳的前nFeatures位(包含并列情况)。默认值为0,表示提取全部特征点。特征点识别数量需以实际返回结果为准。 |
| nOctaveLayers | 输入 | 尺度空间每组图像中的中间层数。默认值为3,目前仅支持默认值,如配置其他参数构造将会失败并抛出std::runtime_error异常。nOctaveLayers + 3为高斯金字塔每组图像中所包含的层数。nOctaveLayers + 2为差分金字塔每组图像中所包含的层数。 |
| contrastThreshold | 输入 | 特征点过滤阈值。默认值为0.04,取值范围为[0.0, 20.0]。 |
| edgeThreshold | 输入 | 边缘效应过滤阈值。默认值为10,取值范围为[0.0, 1000.0]。 |
| sigma | 输入 | 初始模糊尺度,高斯金字塔第0层图像的高斯滤波系数。默认值为1.6,目前仅支持默认值,如配置其他参数构造将会失败并抛出std::runtime_error异常。 |
| descriptorType | 输入 | 特征描述符的数据类型。默认值为CV_32F,目前支持以下数据类型。 CV_8U CV_32F |
VideoEncoder
类说明
VideoEncoder类,作为视频编码类,主要开放视频编码接口。
相关使用流程请参考视频编码。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Note
- VideoEncoder类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。
- 编码器运行时可能会因为送帧频率过快、大于芯片处理速度等原因,导致某一帧编码失败。建议用户合理控制调用Encode接口的频率。如,当编码帧率为30fps时,调用Encode接口的间隔可以控制在33ms。
- 当某一帧编码失败时,编码器会继续处理后续帧数据。用户可以通过回调函数中的帧ID等信息感知到该帧编码结果未获取。
Encode
VideoEncoder的视频编码接口。
APP_ERROR VideoEncoder::Encode(const Image &inputImage, const uint32_t frameId, void* userData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入编码前的Image类。 |
| frameId | 输入 | 输入视频帧索引。 |
| userData | 输入/输出 | 输入用户自定义数据(用于传入用户自定义回调函数内,主要用来获取编码结果)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VideoEncoder
VideoEncoder类的构造函数。若因内存不足,或无法识别芯片等构造失败的场景会抛出std::runtime_error异常。
VideoEncoder::VideoEncoder(const VideoEncodeConfig& vEncodeConfig, const int32_t deviceId = 0, const uint32_t channelId = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| vEncodeConfig | 输入 | 视频编码的参数(以结构体的形式传入)。结构体的参数说明请参见VideoEncodeConfig。 |
| deviceId | 输入 | 视频编码器部署的芯片,默认为0号芯片。取值范围:[0, 识别到的芯片个数 - 1]。 |
| channelId | 输入 | 视频编码器的视频流索引。Atlas 200I/500 A2 推理产品:只能构造一个VideoEncoder,因此用户无需设置channelId,重复构造会导致失败。Atlas 推理系列产品:取值范围:[0, 127]。 |
~VideoEncoder
VideoEncoder类的默认析构函数。
VideoEncoder::~VideoEncoder();
VideoDecoder
类说明
VideoDecoder类,作为视频解码类,主要开放视频解码接口。
在用户传入预申请解码内存场景下,需要先析构VideoDecoder类,再对预申请的内存进行释放(建议采用智能指针管理VideoDecoder,智能指针的reset方法便可以提前进行析构)。
相关使用流程请参考视频解码。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
Note
VideoDecoder类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。
Decode
VideoDecoder的视频解码接口。
一个实例化的解码器在首次调用Decode接口时,会判断是否为预申请场景。使用预申请场景时,用户需要在后续调用Decode接口进行预申请输出内存,防止接口调用失败。
APP_ERROR VideoDecoder::Decode(const std::shared_ptr<uint8_t> data, const uint32_t dataSize, const uint32_t frameId, void* userData);
APP_ERROR VideoDecoder::Decode(const std::shared_ptr<uint8_t> data, const uint32_t dataSize, const uint32_t frameId, Image& preMallocData, void* userData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| data | 输入 | 输入解码前的数据内存地址。 |
| dataSize | 输入 | 输入解码前的数据内存大小。 |
| frameId | 输入 | 输入解码前视频帧的帧ID,输出的帧顺序跟发帧顺序不一定一致。 |
| userData | 输入/输出 | 用户自定义数据(用于传入用户自定义回调函数内,主要用来获取解码结果)。 |
| preMallocData | 输入 | 用户需要使用预申请内存场景时需要通过申请好的内存地址,内存大小,图像宽高,设备ID及图像格式构造Image类。 |
Note
“frameId”采用显示序进行输出与解码序(输出的帧顺序与发帧顺序一致)不同,其输出的帧顺序与发帧的顺序不一定一致,但与实际画面的显示一致。
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Flush
发送完所有码流后,获取缓存数据并清空缓存队列,接口调用完成后将结束解码过程。
由于视频解码内部通过异步实现,请使用该接口后保留一定等待时间,用于回调函数获取并处理缓存数据。
APP_ERROR VideoDecoder::Flush();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
VideoDecoder
VideoDecoder类的构造函数。若因内存不足,或无法识别芯片等构造失败的场景会抛出std::runtime_error异常。
VideoDecoder::VideoDecoder(const VideoDecodeConfig& vDecodeConfig, const int32_t deviceId = 0, const uint32_t channelId = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| vDecodeConfig | 输入 | 视频解码的参数(以结构体的形式传入)。 |
| deviceId | 输入 | 视频解码器部署的芯片,默认为0号芯片。取值范围:[0, 识别到的芯片个数-1]。 |
| channelId | 输入 | 视频解码器的视频流索引。Atlas 200I/500 A2 推理产品:取值范围:[0, 127]。若存在重复构造相同channelId的场景,则会构造失败。Atlas 推理系列产品:取值范围:[0, 255]。若存在重复构造相同channelId的场景,则会进行自动调整channelId。Atlas 800I A2推理产品:取值范围:[0, 255]。若存在重复构造相同channelId的场景,则会进行自动调整channelId。需注意,同时占用的视频解码的通道总数最多为32,超过限制时创建新的通道将失败。 |
~VideoDecoder
VideoDecoder类的默认析构函数。
VideoDecoder::~VideoDecoder();
模型推理
Model
类说明
Model类,作为模型的抽象,持有模型推理的资源,并主要开放推理接口。支持使用ATC工具构建的动态Batch、动态分辨率和分档动态维度模型的推理。
相关使用流程请参考模型推理。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Atlas 800I A2推理产品
Note
- Model类涉及流的创建,会影响Stream最大支持创建个数。
- Model类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。
Infer
Model的推理接口,Atlas 推理系列产品支持异步推理。
Model推理提供对使用ATC工具构建的动态Batch、动态分辨率、动态维度模型的支持。
使用动态shape模型推理时,输入Tensor必须满足模型构建时的设置,若输入Tensor的“shape”不满足模型构建时的档位,会提示设置动态Batch/分辨率/维度信息失败。具体错误码请参见返回参数“APP_ERROR”说明。
例如:动态Batch模型构建时设置Batch档位为“2,4,8”,输入“Batch”为“1”的Tensor,推理报错“Dynamic batch set failed, modelId = 1, index = 1, dynamicBatchSize = 1”。
Note
对于只加载一次的模型,内部相关联资源唯一,因此不能在多线程中并发推理。多线程使用时需要每个线程加载一次模型,再调用推理业务。
APP_ERROR Model::Infer(std::vector<Tensor>& inputTensors, std::vector<Tensor>& outputTensors, AscendStream &stream = AscendStream::DefaultStream());
// 由用户构造outputTensors,自行使用Tensor.Malloc()申请输出的Tensor内存,自由度更高
std::vector<Tensor> Model::Infer(std::vector<Tensor>& inputTensors);
// 内部申请输出内存,并将推理的输出Tensor返回给用户
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputTensors | 输入 | 模型需要的Tensor输入。 |
| outputTensors | 输出 | 模型的Tensor输出。 |
| stream | 输入 | 输入用于异步执行的Stream,默认为AscendStream::DefaultStream(),表示创建一个默认流(即同步执行)。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<Tensor> | 模型的Tensor输出。 |
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetDynamicGearInfo
获得模型支持的动态输入档位信息,支持动态Batch、动态分辨率和分档动态维度模型。
std::vector<std::vector<uint64_t>> Model::GetDynamicGearInfo();
| 数据结构 | 说明 |
|---|---|
| std::vector<std::vector<uint64_t>> | 模型支持的输入Tensor档位信息。**std::vector<std::vector<uint64_t>>**为所有档位信息。**std::vector<uint64_t>**为某一档的具体值。返回数据结构为空,表示获取分档信息失败或者模型不属于函数功能中描述的三种模型之一,具体的原因可查看报错信息确认。例如,模型为动态分辨率模型,**std::vector<uint64_t>**为某一档的高、宽值。 |
GetInputFormat
获得模型输入的数据组织形式(NHWC或者NCHW)。
MxBase::VisionDataFormat Model::GetInputFormat();
| 数据结构 | 说明 |
|---|---|
| MxBase::VisionDataFormat | 模型的输入数据组织形式,具体请参见VisionDataFormat。 |
GetInputTensorDataType
获得模型输入的对应Tensor的数据类型信息。
MxBase::TensorDType Model::GetInputTensorDataType(uint32_t index = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 模型输入的索引(第index个输入)。 |
| 数据结构 | 说明 |
|---|---|
| MxBase::TensorDType | Tensor的数据类型,具体请参见TensorDType。 |
GetInputTensorNum
获得模型的输入个数。
uint32_t Model::GetInputTensorNum();
| 数据结构 | 说明 |
|---|---|
| uint32_t | 模型的输入个数。 |
GetInputTensorShape
获得模型输入的对应Tensor的数据shape信息。
动态模型场景下对应的动态维度查询结果为-1。如果要使用查询的结果直接传入Tensor构造函数构造Tensor,需要将int64_t数据转换为uint32_t数据。
std::vector<int64_t> Model::GetInputTensorShape(uint32_t index = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 模型输入的索引(第index个输入)。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<int64_t> | 对应输入的Tensor的shape信息。 |
GetOutputTensorDataType
获得模型输出的对应Tensor的数据类型信息。
MxBase::TensorDType Model::GetOutputTensorDataType(uint32_t index = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 模型输出的索引(第index个输出)。 |
| 数据结构 | 说明 |
|---|---|
| MxBase::TensorDType | Tensor的数据类型,具体请参见TensorDType。 |
GetOutputTensorNum
获得模型的输出个数。
uint32_t Model::GetOutputTensorNum();
| 数据结构 | 说明 |
|---|---|
| uint32_t | 模型的输出个数。 |
GetOutputTensorShape
获得模型输出的对应Tensor的数据shape信息。查询的结果可直接传入Tensor构造函数用来构造Tensor。
std::vector<uint32_t> Model::GetOutputTensorShape(uint32_t index = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 模型输出的索引(第index个输出)。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<uint32_t> | 对应输出的Tensor的shape信息。 |
Model
Model类的构造函数。
Model::Model(std::string &modelPath, const int32_t deviceId = 0); // 构造失败时,会抛出std::runtime_error异常
Model::Model(const Model&) = delete; // 请勿拷贝构造
Model::Model &operator=(const Model&) = delete; // 请勿赋值构造
Model::Model(ModelLoadOptV2 &mdlLoadOpt, const int32_t deviceId = 0);// 构造失败时,会抛出std::runtime_error异常
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| modelPath | 输入 | 模型的路径。最大仅支持至4G的模型,建议模型属主为当前用户,模型文件的权限小于或等于640。(对于MindIR模型,仅支持静态Shape和动态Batch。) |
| deviceId | 输入 | 模型部署的芯片,默认为0号芯片。(-1表示模型部署在Host侧,为保留字段,请勿使用。) |
| mdlLoadOpt | 输入 | 选择以特定模型输入方式,输入推理模型。具体请参见ModelLoadOptV2。 |
~Model
Model类的默认析构函数。
Model::~Model();
模型后处理
模型后处理类参考(tensorinfer框架)
ImagePreProcessInfo
类说明
用于记录图像类任务中模型前处理中的感兴趣(Region of Interest)区域,提供给模型后处理的坐标还原使用。
相关使用流程请参考后处理。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
| 参数名 | 数据类型 | 参数说明 |
|---|---|---|
| imageWidth | uint32_t | 图像宽度,默认值为0。 |
| imageHeight | uint32_t | 图像内存高度,默认值为0。 |
| originalWidth | uint32_t | 图像原始宽度,默认值为0。 |
| originalHeight | uint32_t | 图像原始高度,默认值为0。 |
| xRatio | float | x缩放比例,默认值为1.0。 |
| xBias | float | x偏移量,默认值为0.0。 |
| yRatio | float | y缩放比例,默认值为1.0。 |
| yBias | float | y偏移量,默认值为0.0。 |
| x0Valid | float | 目标框坐标,默认值为0.0。 |
| y0Valid | float | 目标框坐标,默认值为0.0。 |
| x1Valid | float | 目标框坐标,默认值为0.0。 |
| y1Valid | float | 目标框坐标,默认值为0.0。 |
ImagePreProcessInfo
类构造函数。
ImagePreProcessInfo::ImagePreProcessInfo();
ImagePreProcessInfo::ImagePreProcessInfo(uint32_t width, uint32_t height);
ImagePreProcessInfo::ImagePreProcessInfo(uint32_t widthResize, uint32_t heightResize, uint32_t widthOriginal, uint32_t heightOriginal);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| width | 输入 | 图像宽。 |
| height | 输入 | 图像高。 |
| widthResize | 输入 | 缩放宽。 |
| heightResize | 输入 | 缩放高。 |
| widthOriginal | 输入 | 原图宽。 |
| heightOriginal | 输入 | 原图高。 |
~ImagePreProcessInfo
ImagePreProcessInfo类的默认析构函数。
ImagePreProcessInfo::~ImagePreProcessInfo() {}
PostProcessBase
类说明
模型后处理基类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CheckAndMoveTensors
保护成员函数,调用IsValidTensors校验张量无误后将张量内存搬运至Host侧。
APP_ERROR PostProcessBase::CheckAndMoveTensors(std::vector<TensorBase> &tensors);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 输入张量。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeInit
用于模型后处理的去初始化,完成资源释放。
virtual APP_ERROR PostProcessBase::DeInit();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetBuffer
保护成员函数,获取输入张量中的指定索引的指针。
void* PostProcessBase::GetBuffer(const TensorBase& tensor, uint32_t index) const;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensor | 输入 | 输入张量。 |
| index | 输入 | 待获取张量索引。 |
| 数据结构 | 说明 |
|---|---|
| void* | 输入张量中的指定索引的指针。 |
GetCurrentVersion
返回当前使用的后处理so的整型版本号。(postprocess中所有后处理子类都具备此接口。)
virtual uint64_t PostProcessBase::GetCurrentVersion();
| 数据结构 | 说明 |
|---|---|
| uint64_t | 当前使用的后处理so的整型版本号。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
virtual APP_ERROR PostProcessBase::Init(const std::map<std::string, std::string> &postConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
JudgeResizeType
用于判断图片信息中resize类型是否合法。
bool PostProcessBase::JudgeResizeType(const ResizedImageInfo& resizedImageInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| resizedImageInfo | 输入 | 输入的图片信息。 |
| 数据结构 | 说明 |
|---|---|
| bool | 图片信息中包含的resize类型是否合法。 |
LoadConfigData
保护成员函数,用于初始化后处理的配置文件。
APP_ERROR PostProcessBase::LoadConfigData(const std::map<std::string, std::string> &postConfig);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator=
等号运算符重载,用于PostProcessBase对象之间的赋值。
PostProcessBase& operator= (const PostProcessBase& other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | PostProcessBase对象。 |
PostProcessBase
类构造函数。
PostProcessBase::PostProcessBase() = default;
PostProcessBase::PostProcessBase(const PostProcessBase& other) = default;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | PostProcessBase对象。 |
~PostProcessBase
PostProcessBase类的默认析构函数。
virtual PostProcessBase::~PostProcessBase() = default;
ImagePostProcessBase
类说明
图像类任务后处理的基类,继承自PostProcessBase。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
SetCropRoiBoxes
用于设置当前后处理的输入图像在原图中的位置。
void ImagePostProcessBase::SetCropRoiBoxes(std::vector<MxBase::CropRoiBox> cropRoiBoxes);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| cropRoiBoxes | 输入 | 当前后处理的输入图像(vector)在原图中的位置。 |
ObjectPostProcessBase
类说明
目标检测类任务后处理的基类,继承自ImagePostProcessBase。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CoordinatesReduction
保护成员函数,用于对坐标数据进行缩放。(该方法为内部调用方法,请用户不要使用。)
void ObjectPostProcessBase::CoordinatesReduction(const uint32_t index, const ResizedImageInfo& resizedImageInfo, std::vector<ObjectInfo>& objInfos, bool normalizedFlag = true);
void ObjectPostProcessBase::CoordinatesReduction(std::vector<std::vector<ObjectInfo>> &objInfos, const std::vector<MxBase::ImagePreProcessInfo> &imagePreProcessInfos, bool normalizedFlag = true);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 指定切分向量的索引。 |
| resizedImageInfo | 输入 | 图片信息(包括原图和缩放后宽高)。 |
| objInfos | 输出 | 输出目标检测的坐标、类型、置信度等信息。 |
| normalizedFlag | 输入 | 是否进行标准化,可选。 |
| imagePreProcessInfos | 输入 | 图片前处理信息。 |
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR ObjectPostProcessBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetObjectConfigData
保护成员函数,将从私有成员中获取原始的结果并调用GetSeparateScoreThresh()进行分割。(该方法为内部调用方法,请用户不要使用。)
APP_ERROR ObjectPostProcessBase::GetObjectConfigData();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetSeparateScoreThresh
获取字符分割后的分数阈值。
APP_ERROR ObjectPostProcessBase::GetSeparateScoreThresh(std::string& strSeparateScoreThresh);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| strSeparateScoreThresh | 输入 | 未分割的原始字符串。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
APP_ERROR ObjectPostProcessBase::Init(const std::map<std::string, std::string> &postConfig) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
LogObjectInfos
保护成员函数,仅用于debug,打印目标检测的坐标、置信度等信息。(该方法为内部调用方法,请用户不要使用。)
void ObjectPostProcessBase::LogObjectInfos(const std::vector<std::vector<ObjectInfo>>& objectInfos);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| objectInfos | 输入 | 目标检测的坐标、类型、置信度等信息。 |
ObjectPostProcessBase
类构造函数。
ObjectPostProcessBase::ObjectPostProcessBase() = default;
ObjectPostProcessBase::ObjectPostProcessBase(const ObjectPostProcessBase & other) = default;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | ObjectPostProcessBase对象。 |
~ObjectPostProcessBase
ObjectPostProcessBase类的默认析构函数。
virtual ObjectPostProcessBase::~ObjectPostProcessBase() = default;
operator=
等号运算符重载,用于ObjectPostProcessBase对象之间的赋值。
ObjectPostProcessBase& operator= (const ObjectPostProcessBase & other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | ObjectPostProcessBase对象。 |
Process
接受模型推理输出张量,输出目标检测结果。后续执行时,需要先执行Init方法。
virtual APP_ERROR ObjectPostProcessBase::Process(const std::vector<TensorBase>& tensors, std::vector<std::vector<ObjectInfo>>& objectInfos, const std::vector<ResizedImageInfo>& resizedImageInfos = {}, const std::map<std::string, std::shared_ptr<void>> &configParamMap = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 模型后处理的输入张量。 |
| objectInfos | 输出 | 输出目标检测的坐标、类型、置信度等信息。 |
| resizedImageInfos | 输入 | 图片信息(包括原图和缩放后宽高)。 |
| configParamMap | 输入 | 其他配置参数,可选。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ResizeReduction
保护成员函数,用于对目标检测数据进行缩放。(该方法为内部调用方法,请用户不要使用。)
void ObjectPostProcessBase::ResizeReduction(const ResizedImageInfo& resizedImageInfo, const int imgWidth, const int imgHeight, std::vector<ObjectInfo>& objInfos);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| resizedImageInfo | 输入 | 图片信息(包括原图和缩放后的宽高)。 |
| imgWidth | 输入 | 图片宽度。 |
| imgHeight | 输入 | 图片高度。 |
| objInfos | 输出 | 输出目标检测的坐标、类型、置信度等信息。 |
ClassPostProcessBase
类说明
分类模型后处理基类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
ClassPostProcessBase
类构造函数。
ClassPostProcessBase::ClassPostProcessBase() = default;
ClassPostProcessBase::ClassPostProcessBase(const ClassPostProcessBase &other) = default;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | ClassPostProcessBase对象。 |
~ClassPostProcessBase
ClassPostProcessBase类的默认析构函数。
virtual ClassPostProcessBase::~ClassPostProcessBase() = default;
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
APP_ERROR ClassPostProcessBase::Init(const std::map<std::string, std::string> &postConfig) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR ClassPostProcessBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator=
等号运算符重载,用于ClassPostProcessBase对象之间的赋值。
ClassPostProcessBase& operator=(const ClassPostProcessBase &other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | ClassPostProcessBase对象。 |
Process
接受模型推理输出张量,输出分类结果。
virtual APP_ERROR ClassPostProcessBase::Process(const std::vector<TensorBase>& tensors, std::vector<std::vector<ClassInfo>> &classInfos, const std::map<std::string, std::shared_ptr<void>> &configParamMap = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 模型后处理的输入张量。 |
| classInfos | 输出 | 输出分类结果。 |
| configParamMap | 输入 | 其他配置参数,可选。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SemanticSegPostProcessBase
类说明
语义分割类任务后处理的基类,继承自ImagePostProcessBase。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CoordinatesReduction
保护成员函数,根据图片信息,输出降维后的语义分割信息。(该方法为内部调用方法,请用户不要使用。)
void SemanticSegPostProcessBase::CoordinatesReduction(const ResizedImageInfo& resizedImageInfo, SemanticSegInfo& semanticSegInfos);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| resizedImageInfo | 输入 | 图片信息。图片原始宽高和缩放宽高不能大于8192,缩放比例范围[1/32, 16]。 |
| semanticSegInfos | 输出 | 语义分割像素值,类别映射表等信息。 |
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR SemanticSegPostProcessBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetSemanticSegConfigData
保护成员函数,将配置信息写入类别映射表中。(该方法为内部调用方法,请用户不要使用。)
APP_ERROR SemanticSegPostProcessBase::GetSemanticSegConfigData();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
APP_ERROR SemanticSegPostProcessBase::Init(const std::map<std::string, std::string> &postConfig) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator=
等号运算符重载,用于SemanticSegPostProcessBase对象之间的赋值。
SemanticSegPostProcessBase& operator=(const SemanticSegPostProcessBase& other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | SemanticSegPostProcessBase对象。 |
Process
接受模型推理输出张量,输出语义分割结果。后续执行时,需要先执行Init方法。
virtual APP_ERROR SemanticSegPostProcessBase::Process(const std::vector<TensorBase>& tensors, std::vector<SemanticSegInfo>& semanticSegInfos, const std::vector<ResizedImageInfo>& resizedImageInfos = {}, const std::map<std::string, std::shared_ptr<void>> &configParamMap = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 模型后处理的输入张量。 |
| semanticSegInfos | 输出 | 输出语义分割像素值,类别映射表等信息。 |
| resizedImageInfos | 输入 | 图片信息(包括原图和缩放后宽高)。 |
| configParamMap | 输入 | 其他配置参数,可选。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SemanticSegPostProcessBase
类构造函数。
SemanticSegPostProcessBase::SemanticSegPostProcessBase() = default;
SemanticSegPostProcessBase::SemanticSegPostProcessBase(const SemanticSegPostProcessBase& other) = default;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | SemanticSegPostProcessBase对象。 |
~SemanticSegPostProcessBase
SemanticSegPostProcessBase类的默认析构函数。
virtual SemanticSegPostProcessBase::~SemanticSegPostProcessBase() = default;
TextGenerationPostProcessBase
类说明
文本生成类模型后处理基类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR TextGenerationPostProcessBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
APP_ERROR TextGenerationPostProcessBase::Init(const std::map<std::string, std::string> &postConfig) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator=
等号运算符重载,用于TextGenerationPostProcessBase对象之间的赋值。
TextGenerationPostProcessBase& operator= (const TextGenerationPostProcessBase& other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | TextGenerationPostProcessBase对象。 |
Process
接受模型推理输出张量,输出文本生成结果。后续执行时,需要先执行Init方法。
virtual APP_ERROR TextGenerationPostProcessBase::Process(const std::vector<TensorBase>& tensors, std::vector<TextsInfo>& textsInfos, const std::map<std::string, std::shared_ptr<void>> &configParamMap = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 模型后处理的输入张量。 |
| textsInfos | 输出 | 输出文本生成结果。 |
| configParamMap | 输入 | 其他配置参数,可选。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
TextGenerationPostProcessBase
类构造函数。
TextGenerationPostProcessBase::TextGenerationPostProcessBase() = default;
TextGenerationPostProcessBase::TextGenerationPostProcessBase(const TextGenerationPostProcessBase& other) = default;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | TextGenerationPostProcessBase对象。 |
~TextGenerationPostProcessBase
TextGenerationPostProcessBase类的默认析构函数。
virtual TextGenerationPostProcessBase::~TextGenerationPostProcessBase() = default;
TextObjectPostProcessBase
类说明
文本目标检测类任务后处理的基类,继承自ImagePostProcessBase。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR TextObjectPostProcessBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
FixCoords
保护成员函数,用于对坐标数据进行修复。该方法为内部调用方法,请用户不要使用。
void TextObjectPostProcessBase::FixCoords(uint32_t scrData, float &desData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| scrData | 输入 | 原始坐标数据。 |
| desData | 输出 | 被修复的坐标数据。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
APP_ERROR TextObjectPostProcessBase::Init(const std::map<std::string, std::string> &postConfig) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
operator =
等号运算符重载,用于TextObjectPostProcessBase对象之间的赋值。
TextObjectPostProcessBase& operator= (const TextObjectPostProcessBase& other);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | TextObjectPostProcessBase对象。 |
Process
接受模型推理输出张量,输出目标检测结果。后续执行时,需要先执行Init方法。
virtual APP_ERROR TextObjectPostProcessBase::Process(const std::vector<TensorBase>& tensors, std::vector<std::vector<TextObjectInfo>> &textObjectInfos, const std::vector<ResizedImageInfo>& resizedImageInfos = {}, const std::map<std::string, std::shared_ptr<void>> &configParamMap = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 模型后处理的输入张量。 |
| textObjectInfos | 输出 | 输出文本目标框的坐标、置信度等信息。 |
| resizedImageInfos | 输入 | 图片信息(包括原图和缩放后宽高)。 |
| configParamMap | 输入 | 其他配置参数,可选。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ResizeReduction
保护成员函数,用于对输入的图片信息进行缩放。该方法为内部调用方法,请用户不要使用。
void TextObjectPostProcessBase::ResizeReduction(const ResizedImageInfo &resizedImageInfo, TextObjectInfo &textObjInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| textObjectInfo | 输出 | 输出文本目标框的坐标等信息。 |
| resizedImageInfo | 输入 | 图片信息。 |
TextObjectPostProcessBase
类构造函数。
TextObjectPostProcessBase::TextObjectPostProcessBase() = default;
TextObjectPostProcessBase::TextObjectPostProcessBase(const TextObjectPostProcessBase& other) = default;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | TextObjectPostProcessBase对象。 |
~TextObjectPostProcessBase
TextObjectPostProcessBase类的默认析构函数。
virtual TextObjectPostProcessBase::~TextObjectPostProcessBase() = default;
KeypointPostProcessBase
类说明
关键点检测类模型后处理基类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR KeypointPostProcessBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetSeparateScoreThresh
保护成员函数,将原始结果分割为float向量类型。该方法为内部调用方法,请用户不要使用。
APP_ERROR KeypointPostProcessBase::GetSeparateScoreThresh(std::string& strSeparateScoreThresh);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| strSeparateScoreThresh | 输入 | 未分割的原始字符串。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
APP_ERROR KeypointPostProcessBase::Init(const std::map<std::string, std::string> &postConfig) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postConfig | 输入 | 配置参数。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
KeypointPostProcessBase
类构造函数。
KeypointPostProcessBase::KeypointPostProcessBase() = default;
KeypointPostProcessBase::KeypointPostProcessBase(const KeypointPostProcessBase &other) = default;
| 参数 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | KeypointPostProcessBase对象。 |
~KeypointPostProcessBase
KeypointPostProcessBase类的默认析构函数。
virtual KeypointPostProcessBase::~KeypointPostProcessBase() = default;
LogKeyPointInfos
保护成员函数,仅用于debug,打印图片关键点。该方法为内部调用方法,请用户不要使用。
void KeypointPostProcessBase::LogKeyPointInfos(const std::vector<std::vector<KeyPointDetectionInfo>>& keyPointInfos);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| keyPointInfos | 输入 | 图片关键点向量。 |
operator=
等号运算符重载,用于KeypointPostProcessBase对象间的赋值。
KeypointPostProcessBase& operator= (const KeypointPostProcessBase &other);
| 参数 | 输入/输出 | 说明 |
|---|---|---|
| other | 输入/输出 | KeypointPostProcessBase对象。 |
Process
接受模型推理输出张量,输出关键点结果。后续执行时,需要先执行Init方法。
virtual APP_ERROR KeypointPostProcessBase::Process(const std::vector<TensorBase>& tensors, std::vector<std::vector<KeyPointDetectionInfo>>& keyPointInfos, const std::vector<ResizedImageInfo>& resizedImageInfos = {}, const std::map<std::string, std::shared_ptr<void>> &configParamMap = {});
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensors | 输入 | 模型后处理的输入张量。 |
| keyPointInfos | 输出 | 输出关键点结果。 |
| resizedImageInfos | 输入 | 图片信息(包括原图和缩放后宽高)。 |
| configParamMap | 输入 | 其他配置参数,可选。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
postprocess
类说明
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CrnnPostProcess
CrnnPostProcess模型后处理类,继承自文本生成后处理基类TextGenerationPostProcessBase。
重载了TextGenerationPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见TextGenerationPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::CrnnPostProcess> GetTextGenerationInstance()方法用于获取该类的智能指针实例。
CtpnPostProcess
CtpnPostProcess模型后处理类,继承自文本生成后处理基类TextObjectPostProcessBase。
重载了TextObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见TextObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::CtpnPostProcess> GetTextObjectInstance()方法用于获取该类的智能指针实例。
Deeplabv3Post
Deeplabv3Post模型后处理类,继承自语义分割后处理基类SemanticSegPostProcessBase。
重载了SemanticSegPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见SemanticSegPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::Deeplabv3Post> GetSemanticSegInstance()方法用于获取该类的智能指针实例。
FasterRcnnPostProcess
FasterRcnnPostProcess模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::FasterRcnnPostProcess> GetObjectInstance()方法用于获取该类的智能指针实例。
HigherHRnetPostProcess
HigherHRnetPostProcess模型后处理类,继承自关键点后处理基类KeypointPostProcessBase。
重载了KeypointPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见KeypointPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::HigherHRnetPostProcess> GetKeypointInstance()方法用于获取该类的智能指针实例。
MaskRcnnMindsporePost
MaskRcnnMindsporePost模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::MaskRcnnMindsporePost> GetObjectInstance()方法用于获取该类的智能指针实例。
OpenPosePostProcess
OpenPosePostProcess模型后处理类,继承自关键点后处理基类KeypointPostProcessBase。
重载了KeypointPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见KeypointPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::OpenPosePostProcess> GetKeypointInstance()方法用于获取该类的智能指针实例。
PSENetPostProcess
PSENetPostProcess模型后处理类,继承自文本生成后处理基类TextObjectPostProcessBase。
重载了TextObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见TextObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::PSENetPostProcess> GetTextObjectInstance()方法用于获取该类的智能指针实例。
Resnet50PostProcess
Resnet50PostProcess模型后处理类,继承自分类任务后处理基类ClassPostProcessBase。
重载了ClassPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ClassPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::Resnet50PostProcess> GetClassInstance()方法用于获取该类的智能指针实例。
RetinaNetPostProcess
RetinaNetPostProcess模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase。重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::RetinaNetPostProcess> GetObjectInstance()方法用于获取该类的智能指针实例。
SsdMobilenetFpnMindsporePost
SsdMobilenetFpnMindsporePost模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号。重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::SsdMobilenetFpnMindsporePost> GetObjectInstance()方法用于获取该类的智能指针实例。
SsdMobilenetv1FpnPostProcess
SsdMobilenetv1FpnPostProcess模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::SsdMobilenetv1FpnPostProcess> GetObjectInstance()方法用于获取该类的智能指针实例。
Ssdvgg16PostProcess
Ssdvgg16PostProcess模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::Ssdvgg16PostProcess> GetObjectInstance()方法用于获取该类的智能指针实例。
TransformerPostProcess
TransformerPostProcess模型后处理类,继承自文本生成后处理基类TextGenerationPostProcessBase。
重载了TextGenerationPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见TextGenerationPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::TransformerPostProcess> GetTextGenerationInstance()方法用于获取该类的智能指针实例。
UNetMindSporePostProcess
UNetMindSporePostProcess模型后处理类,继承自语义分割后处理基类SemanticSegPostProcessBase。
重载了SemanticSegPostProcessBase的Init()、DeInit()和Process()接口,具体描述请参见SemanticSegPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::UNetMindSporePostProcess> GetSemanticSegInstance()方法用于获取该类的智能指针实例。
Yolov3PostProcess
YOLOv3模型后处理类,继承自目标检测后处理基类ObjectPostProcessBase。
重载了ObjectPostProcessBase中的Init()、DeInit()和Process()接口,具体描述请参见ObjectPostProcessBase。
重载了PostProcessBase的GetCurrentVersion接口,用以获取当前后处理so的版本号,重载了赋值运算符“=”。
实现了std::shared_ptr<MxBase::Yolov3PostProcess> GetObjectInstance()方法用于获取该类的智能指针实例。
模型后处理类参考(modelinfer框架)
ModelPostProcessorBase
类说明
该类用于实现推理后处理,用户需要继承该类并实现Init、DeInit、Process等虚函数。
相关使用流程请参考后处理。
即将废弃,预计2025年12月正式删除,请使用tensorinfer框架模型后处理类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CheckModelCompatibility
保护成员函数,该接口由Init()调用,用于对所读取模型的输出形状进行校验。
APP_ERROR ModelPostProcessorBase::CheckModelCompatibility();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DeInit
用于模型后处理的去初始化,完成资源释放。
virtual APP_ERROR ModelPostProcessorBase::DeInit() = 0;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetLabelName
根据索引获取类名称。
std::string ModelPostProcessorBase::GetLabelName(int index);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 类索引。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 类名称。 |
GetModelTensorsShape
保护成员函数,该接口由Init()调用,用于获取模型的输入输出张量形状。
APP_ERROR ModelPostProcessorBase::GetModelTensorsShape(MxBase::ModelDesc modelDesc);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| modelDesc | 输入 | 模型基本信息结构体。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
virtual APP_ERROR ModelPostProcessorBase::Init(const std::string& configPath, const std::string& labelPath, MxBase::ModelDesc modelDesc) = 0;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configPath | 输入 | 配置文件路径。 |
| labelPath | 输入 | 标签文件路径。 |
| modelDesc | 输出 | 模型描述信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
LoadConfigDataAndLabelMap
保护成员函数,该接口由Init()调用,用于实现配置参数的获取。
APP_ERROR ModelPostProcessorBase::LoadConfigDataAndLabelMap(const std::string& configPath, const std::string& labelPath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configPath | 输入 | 配置文件路径。 |
| labelPath | 输入 | 标签文件路径。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MemoryDataToHost
把数据从Device侧拷贝到Host侧用于后处理。
APP_ERROR ModelPostProcessorBase::MemoryDataToHost(const int index, const std::vector<std::vector<MxBase::BaseTensor>>& tensors,std::vector<std::shared_ptr<void>>& featLayerData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 输出池索引。 |
| tensors | 输入 | 输出Tensor数组。 |
| featLayerData | 输出 | 输出特征数据数组。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
~ModelPostProcessorBase
ModelPostProcessorBase类的默认析构函数。
virtual ModelPostProcessorBase::~ModelPostProcessorBase() = default;
Process
用于推理后处理,获取目标、类型等信息。
virtual APP_ERROR ModelPostProcessorBase::Process(std::vector<std::shared_ptr<void>>& featLayerData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| featLayerData | 输入 | 特征数据数组。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ObjectPostProcessorBase
类说明
该类继承了ModelPostProcessorBase用于目标检测推理后处理,用户可以根据需要继承该类并选择性实现Init、DeInit、Process等虚函数。
相关使用流程请参考后处理。
该类即将废弃,预计2025年12月正式删除,请使用tensorinfer框架模型后处理类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CoordinatesReduction
保护成员函数,用于对坐标数据进行缩放。该方法为内部调用方法,请用户不要使用。
void ObjectPostProcessorBase::CoordinatesReduction(ImageInfo& imgInfo, std::vector<ObjDetectInfo>& objInfos);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| objInfos | 输出 | 输出目标检测的坐标、类型、置信度等信息。 |
| imgInfo | 输入 | 图片信息(包括原图和缩放后的宽高)。 |
DeInit
用于模型后处理的去初始化,完成资源释放。
APP_ERROR ObjectPostProcessorBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetSeparateScoreThresh
保护成员函数,将原始结果分割为float向量类型。该方法为内部调用方法,请用户不要使用。
APP_ERROR ObjectPostProcessorBase::GetSeparateScoreThresh(std::string& strSeparateScoreThresh);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| strSeparateScoreThresh | 输入 | 未分割的原始字符串。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。
APP_ERROR ObjectPostProcessorBase::Init(const std::string& configPath, const std::string& labelPath, MxBase::ModelDesc modelDesc) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configPath | 输入 | 配置文件路径。 |
| labelPath | 输入 | 标签文件路径。 |
| modelDesc | 输出 | 模型描述信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
NmsSort
保护成员函数,根据置信度大小过滤重复目标。该方法为内部调用方法,请用户不要使用。
void ObjectPostProcessorBase::NmsSort(std::vector<ObjDetectInfo>& objInfos, float iouThresh, IOUMethod method = UNION);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| objInfos | 输出 | 待过滤的目标边角点。 |
| iouThresh | 输入 | 过滤阈值。 |
| method | 输入 | IOU计算方式:MAX 重叠区域除以两者中面积大的。MIN 重叠区域除以两者中面积小的。UNION 重叠区域除以两者面积并集。DIOU 重叠区域除以两者面积并集减去距离的交并比。 |
ObjectDetectionOutput
保护成员函数,由Process()调用,用于对模型输出进行目标处理,如去重、排序、筛选等。该方法为内部调用方法,请用户不要使用。
virtual void ObjectPostProcessorBase::ObjectDetectionOutput(std::vector<std::shared_ptr<void>>& featLayerData,
std::vector<ObjDetectInfo>& objInfos, ImageInfo& imgInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| featLayerData | 输入 | 输出特征数据数组。 |
| objInfos | 输出 | 输出对象坐标、类型、置信度等信息。 |
| imgInfo | 输入 | 图片信息。 |
Process
从输出数据中获取检测目标的信息。
virtual APP_ERROR ObjectPostProcessorBase::Process(std::vector<std::shared_ptr<void>>& featLayerData, std::vector<ObjDetectInfo>& objInfos,const bool useMpPictureCrop, MxBase::PostImageInfo postImageInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| featLayerData | 输入 | 输出特征数据数组。 |
| objInfos | 输出 | 输出对象坐标、类型、置信度等信息。输出单个对象的坐标范围为[0, 8192],类型不能小于0。 |
| useMpPictureCrop | 输入 | 是否还原坐标到目标框坐标上。 |
| postImageInfo | 输入 | 图片信息(包括原图和缩放宽高,目标框坐标)。原图和缩放宽高均不能超过8192,目标框坐标范围为[0, 8192]。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetAspectRatioImageInfo
设置后处理图像信息。
void ObjectPostProcessorBase::SetAspectRatioImageInfo(const MxBase::AspectRatioPostImageInfo& postProcessorImageInfo);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postProcessorImageInfo | 输入 | 后处理图像信息。 |
流程编排
流程编排头文件列表
表 1 流程编排头文件列表
| 头文件名称 | 所在目录 | 用途 |
|---|---|---|
| DataHelper.h | MxStream/DataType | 定义数据读取方法。 |
| DataType.h | MxStream/DataType | 定义流程编排的pipeline文件中解析stream内容、deviceId的键及默认超时时间。 |
| StateInfo.h | MxStream/DataType | 定义stream构建状态枚举值。 |
| PacketDataType.h | MxStream/Packet | 定义发送接收packet接口的数据结构。 |
| Packet.h | MxStream/Packet | 定义数据模板类,作为Stream流中的数据承载体,可以作为Stream流的输入数据和接收的数据。 |
| FunctionalStream.h | MxStream/Stream | 定义多输入多输出流程的实体类。 |
| PluginNode.h | MxStream/Stream | 定义插件节点类,用于创建流程所需的插件。 |
| SequentialStream.h | MxStream/Stream | 定义单向顺序流程的实体类。 |
| Stream.h | MxStream/Stream | 定义流程的抽象类。 |
| MxsmDataType.h | MxStream/StreamManager | 定义stream发送接收数据及元数据的数据结构。 |
| MxStreamManager.h | MxStream/StreamManager | 定义流程的基本管理类。 |
| ObjectPostDataType.h | MxPlugins/ModelPostProcessors/ModelPostProcessorBase | 定义目标后处理相关的数据结构。 |
| MxpiObjectPostProcessorBase.h | MxPlugins/ModelPostProcessors/ModelPostProcessorBase | 定义目标检测推理后处理基类。 |
| MxpiModelPostProcessorBase.h | MxPlugins/ModelPostProcessors/ModelPostProcessorBase | 定义推理后处理基类。 |
| MxGstBase.h | MxTools/PluginToolkit/base | 定义插件初始化和注册功能的相关基础数据结构和方法 |
| MxpiBufferDump.h | MxTools/PluginToolkit/base | 定义插件数据下载类。 |
| MxPluginBase.h | MxTools/PluginToolkit/base | 定义插件基类。 |
| MxPluginGenerator.h | MxTools/PluginToolkit/base | 定义插件生成和注册宏定义。 |
| MxpiBufferManager.h | MxTools/PluginToolkit/buffer | 定义用于创建自定义插件时插件数据管理。 |
| MxpiMetadataManager.h | MxTools/PluginToolkit/metadata | 定义用于创建自定义插件时插件元数据管理。 |
| MxpiDataTypeConverter.h | MxTools/PluginToolkit/MxpiDataTypeWrapper | 定义模型后处理使用的数据结构转换为protobuf数据结构功能。 |
| MxpiDataTypeDeleter.h | MxTools/PluginToolkit/MxpiDataTypeWrapper | 定义智能指针删除器。 |
| MxImagePostProcessorBase.h | MxTools/PluginToolkit/PostProcessPluginBases | 定义图像后处理基类。 |
| MxModelPostProcessorBase.h | MxTools/PluginToolkit/PostProcessPluginBases | 定义模型后处理基类。 |
| MxpiDataType.pb.h | MxTools/Proto | 由Google Protobuf根据message数据结构自动生成,原型请参见Google Protobuf数据结构定义文件(MxpiDataType.proto)。 |
| MxpiDataTypeConverter.h | MxTools/Proto | 定义模型后处理使用的数据结构转换为protobuf数据结构功能。 |
| MxpiDataTypeDeleter.h | MxTools/Proto | 定义智能指针删除器。 |
| MxpiDumpData.pb.h | MxTools/Proto | 由Google Protobuf根据message数据结构自动生成,原型请参见Google Protobuf数据结构定义文件(MxpiDumpData.proto)。 |
| MxpiOSDType.pb.h | MxTools/Proto | 由Google Protobuf根据message数据结构自动生成,原型请参见OSD Protobuf 数据结构定义文件(MxpiOSDType.proto)。 |
流程管理
MxStreamManager
类说明
该类用于推理流管理。
| 参数名 | 数据类型 | 参数说明 |
|---|---|---|
| rotateTimeFlag_ | std::atomic<bool> | 日志按时间转储开关,默认值为true。 |
| rotateNumberFlag_ | std::atomic<bool> | 日志按数量转储开关,默认值为true。 |
| dynamicFlag_ | std::atomic<bool> | 日志按配置文件配置开关,默认值为true。 |
| performanceStatisticsFlag_ | std::atomic<bool> | 性能统计日志开关,默认值为true。 |
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CreateMultipleStreams
根据指定的配置创建多个Stream,需与DestroyAllStreams搭配使用。
请勿在一个进程中重复调用CreateMultipleStreams和DestroyAllStreams。
APP_ERROR MxStreamManager::CreateMultipleStreams (const std::string& streamsConfig) ;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamsConfig | 输入 | pipeline配置文件内容。pipeline字符串长度限制10M。子pipeline数量限制最大256个,单个pipeline中,插件及pipeline配置项的个数限制最大5120个。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CreateMultipleStreamsFromFile
根据指定的配置文件创建多个Stream。需与DestroyAllStreams搭配使用。
请勿在一个进程中重复调用CreateMultipleStreamsFromFile和DestroyAllStreams。
APP_ERROR MxStreamManager::CreateMultipleStreamsFromFile(const std::string& streamsFilePath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamsFilePath | 输入 | pipeline配置文件。pipeline字符串长度限制10M。子pipeline数量限制最大256个,单个pipeline中,插件及pipeline配置项的个数限制最大5120个。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DestroyAllStreams
销毁所有的流数据。该接口会销毁GStreamer创建的流,同时销毁底层芯片资源,单个Stream进程内只能调用一次(注意与StopStream接口区别使用)。
APP_ERROR MxStreamManager::DestroyAllStreams();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetMultiResultWithUniqueId
获得Stream上的多个输出元件的结果(appsink)。阻塞式,不同uniqueId支持多线程并发,支持多输出。使用uniqueId确保多线程场景下能正确获取结果。
该接口需要与SendMultiDataWithUniqueId接口配套使用,否则会有数据堆积的风险。
std::vector<MxstDataOutput*> MxStreamManager::GetMultiResultWithUniqueId(const std::string& streamName, uint64_t uniqueId, unsigned int timeOutInMs = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| uniqueId | 输入 | 发送数据后返回的编号(由SendMultiDataWithUniqueId接口返回),通过该编号获取对应的结果。 |
| timeOutInMs | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<MxstDataOutput*> | 推理服务输出数据MxstDataOutput,该内存需要进行delete操作。 |
GetMultiResultWithUniqueIdSP
获得Stream上的多个输出元件的结果(appsink)。阻塞式,不同uniqueId支持多线程并发,支持多输出。使用uniqueId确保多线程场景下能正确获取结果。
std::vector<std::shared_ptr<MxstDataOutput>> MxStreamManager::GetMultiResultWithUniqueIdSP(const std::string& streamName, uint64_t uniqueId, uint32_t timeOutMs = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| uniqueId | 输入 | 发送数据后返回的编号(由SendDataWithUniqueId接口返回),通过该编号获取对应的结果。 |
| timeOutMs | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<std::shared_ptr<MxstDataOutput>> | 推理服务输出数据MxstDataOutput。 |
GetPacket
模板函数,在指定的业务流中,向指定的元件索取数据。内存不足时函数内部会抛出异常。不支持多线程并发。
- 若指定元件为appsink插件,则接收数据为Packet<std::shared_ptr<MxstBufferOutput>>。
- 若指定其他元件,则获得相应的Meta数据,支持Packet<std::shared_ptr<MxVisionList>>,Packet<std::shared_ptr<MxTensorPackageList>>,Packet<std::shared_ptr<MxObjectList>>,Packet<std::shared_ptr<MxImageMaskList>>,Packet<std::shared_ptr<MxClassList>>,Packet<std::shared_ptr<MxPoseList>>,Packet<std::shared_ptr<MxTextObjectList>>,Packet<std::shared_ptr<MxTextsInfoList>>。
template <class T>
APP_ERROR MxStreamManager::GetPacket(Packet<T>& packet, const std::string& streamName, const std::string& outElement, const uint32_t& msTimeOut = DELAY_TIME)
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| packet | 输出 | 指定元件输出的数据。 |
| streamName | 输入 | 流名称。 |
| outElement | 输入 | 元件名称。 |
| msTimeOut | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetProtobuf
获得Stream上的输出元件的protobuf结果给appsink,appsink阻塞式获取队列中的数据,若队列中数据为空,则阻塞,不支持多线程并发。
该接口需要与SendProtobuf接口配套使用,否则会有数据堆积的风险。
std::vector<MxstProtobufOut> MxStreamManager::GetProtobuf(const std::string& streamName, int outPluginId, const std::vector<std::string>& keyVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| outPluginId | 输入 | 目标输出插件ID,即appsrc元件的编号。 |
| keyVec | 输入 | 发送要获取的protobuf的key,通过该key获取对应的protobuf结果。内存由智能指针管理,不需要释放内存。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<MxstProtobufOut> | 推理服务输出数据列表请参见MxstProtobufOut。 |
GetResult
获得Stream上的输出元件的结果(appsink)。阻塞式,不支持多线程并发。
该接口需要与SendData接口配套使用,否则会有数据堆积的风险。
MxstDataOutput* MxStreamManager::GetResult(const std::string& streamName, int outPluginId,const uint32_t& msTimeOut = DELAY_TIME);
MxstBufferAndMetadataOutput MxStreamManager::GetResult(const std::string& streamName, const std::string& elementName,const std::vector<std::string>& dataSourceVec, const uint32_t& msTimeOut = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| outPluginId | 输入 | 流上的输出插件ID,即appsink元件的编号。 |
| msTimeOut | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| elementName | 输入 | 流上的输出元件名称。 |
| dataSourceVec | 输入 | 元数据对应的dataSource,用于获取指定元数据。 |
| 数据结构 | 说明 |
|---|---|
| MxstDataOutput | 推理服务输出数据MxstDataOutput,该内存需要进行delete操作。 |
| MxstBufferAndMetadataOutput | 获取buffer和元数据MxstBufferAndMetadataOutput。 |
GetResultSP
获得Stream上的输出元件的结果(appsink)。阻塞式,不支持多线程并发。
std::shared_ptr<MxstDataOutput> MxStreamManager::GetResultSP(const std::string& streamName, int outPluginId,const uint32_t& msTimeOut = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| outPluginId | 输入 | 流上的输出插件ID,即appsink元件的编号。 |
| msTimeOut | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr<MxstDataOutput> | 推理服务输出数据请参见MxstDataOutput。 |
GetResultWithUniqueId
获得Stream上的输出元件的结果(appsink)。阻塞式,不同uniqueId支持多线程并发。
该接口需要与SendDataWithUniqueId接口配套使用,否则会有数据堆积的风险。
MxstDataOutput* MxStreamManager::GetResultWithUniqueId(const std::string& streamName, uint64_t uniqueId, unsigned int timeOutInMs = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| uniqueId | 输入 | 发送数据后返回的编号(由SendDataWithUniqueId接口返回),通过该编号获取对应的结果。 |
| timeOutInMs | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| 数据结构 | 说明 |
|---|---|
| MxstDataOutput | 推理服务输出数据MxstDataOutput,该内存需要进行delete操作。 |
GetResultWithUniqueIdSP
获得Stream上的输出元件的结果(appsink)。阻塞式,不同uniqueId支持多线程并发。
std::shared_ptr<MxstDataOutput> MxStreamManager::GetResultWithUniqueIdSP(const std::string& streamName, uint64_t uniqueId, uint32_t timeOutMs = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| uniqueId | 输入 | 发送数据后返回的编号(由SendDataWithUniqueId接口返回),通过该编号获取对应的结果。 |
| timeOutMs | 输入 | 最长等待时间,单位毫秒,默认为3000ms(3秒)。 |
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr<MxstDataOutput> | 推理服务输出数据请参见MxstDataOutput。 |
InitManager
初始化一个StreamManager。
APP_ERROR MxStreamManager::InitManager (
const std::vector<std::string>& argStrings = std::vector<std::string> ( ));
APP_ERROR MxStreamManager::InitManager (const MxBase::AppGlobalCfgExtra &globalCfgExtra,
const std::vector<std::string>& argStrings = std::vector<std::string>());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| argStrings | 输入 | StreamManager初始化参数,当前为空。 |
| globalCfgExtra | 输入 | AppGlobalCfgExtra类型,应用全局配置。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxStreamManager
[!NOTICE] 如果使用堆申请内存方式创建MxStreamManager对象,在使用结束后,请务必释放MxStreamManager对象,否则会出现不可预知的错误。 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
该类用于对流程的基本管理:加载流程配置、创建流程、向流程上发送数据、获得执行结果。
MxStreamManager::MxStreamManager();
~MxStreamManager
~MxStreamManager类的默认析构函数。
MxStreamManager::~MxStreamManager();
SendData
向指定Stream上的输入元件发送数据(appsrc)。阻塞式,不支持多线程并发。
该接口需要与GetResult接口配套使用,否则会有数据堆积的风险。
APP_ERROR MxStreamManager::SendData(const std::string& streamName, int inPluginId, MxstDataInput& dataBuffer);
APP_ERROR MxStreamManager::SendData(const std::string& streamName, const std::string& elementName, MxstDataInput& dataBuffer);
APP_ERROR MxStreamManager::SendData(const std::string& streamName, const std::string& elementName, std::vector<MxstMetadataInput>& metadataVec, MxstBufferInput& bufferInput);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| inPluginId | 输入 | 目标输入插件ID,即appsrc元件的编号。(appsrc的编号指第几个appsrc元件。) |
| elementName | 输入 | 输入插件的名称,只支持appsrc当作输入插件。 |
| dataBuffer | 输入 | 待发送的数据MxstDataInput。dataBuffer.dataSize应等于待发送数据内存大小,且在[1, 4294967296]范围内,dataBuffer.dataPtr需要进行delete操作。 |
| metadataVec | 输入 | 发送的protobuf数据列表请参见MxstMetadataInput。 |
| bufferInput | 输入 | 待发送的数据,数据类型为MxstBufferInput。bufferInput.dataSize应该等于待发送数据内存大小,且在[1, 4294967296]范围内,bufferInput.dataPtr需要进行delete操作。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendDataWithUniqueId
向指定Stream上的输入元件发送数据(appsrc)。阻塞式,不同uniqueId支持多线程并发。
该接口需要与GetResultWithUniqueId接口配套使用,否则会有数据堆积的风险。
APP_ERROR MxStreamManager::SendDataWithUniqueId(const std::string& streamName, const std::string& elementName, MxstDataInput& dataBuffer, uint64_t& uniqueId);
APP_ERROR MxStreamManager::SendDataWithUniqueId(const std::string& streamName, int inPluginId, MxstDataInput& dataBuffer, uint64_t& uniqueId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| elementName | 输入 | 输入插件的名称,只支持appsrc当作输入插件。 |
| inPluginId | 输入 | 目标输入插件ID,即appsrc元件的编号。(appsrc的编号指第几个appsrc元件) |
| dataBuffer | 输入 | 待发送的数据,dataBuffer.dataSize应该等于待发送数据内存大小,且在[1, 4294967296]范围内,dataBuffer.dataPtr需要进行delete操作。 |
| uniqueId | 输出 | 发送数据后返回的编号,通过该编号获取对应的结果(调用GetResultWithUniqueId)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendMultiDataWithUniqueId
向指定Stream上的输入元件发送数据(appsrc)。阻塞式,不同uniqueId支持多线程并发,支持多输入。
该接口需要与GetMultiResultWithUniqueId接口配套使用,否则会有数据堆积的风险。
APP_ERROR MxStreamManager::SendMultiDataWithUniqueId(const std::string& streamName, std::vector<int> inPluginIdVec, std::vector<MxstDataInput>& dataBufferVec, uint64_t& uniqueId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| inPluginIdVec | 输入 | 目标输入插件ID,即appsrc元件的编号。(appsrc的编号指第几个appsrc元件) |
| dataBufferVec | 输入 | 待发送的数据,dataBuffer.dataSize应该等于待发送数据内存大小,且在[1, 4294967296]范围内,dataBuffer.dataPtr需要进行delete操作。 |
| uniqueId | 输出 | 发送数据后返回的编号,通过该编号获取对应的结果(调用GetMultiResultWithUniqueId)。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendPacket
模板函数,向指定Stream上的输入元件发送数据(appsrc)。内存不足时函数内部会抛出异常。不支持多线程并发。
目前支持输入的数据包括:
- Packet<MxstDataInput>
- Packet<MxVisionList>
- Packet<MxTensorPackageList>
- Packet<MxObjectList>
- Packet<MxClassList>
- Packet<MxImageMaskList>
- Packet<MxPoseList>
- Packet<MxTextObjectList>
- Packet<MxTextsInfoList>
template <class T>
APP_ERROR MxStreamManager::SendPacket(Packet<T>& packet, const std::string& streamName, const std::string& elementName)
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| packet | 输入 | 输入的Packet数据。 |
| streamName | 输入 | 流名称。 |
| elementName | 输入 | 元件名称。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendProtobuf
向指定Stream上的输入元件发送protobuf数据给appsrc原生插件,不支持多线程并发。
该接口需要与GetProtobuf接口配套使用,否则会有数据堆积的风险。
APP_ERROR MxStreamManager::SendProtobuf(const std::string& streamName, int inPluginId, std::vector<MxstProtobufIn>& protoVec);
APP_ERROR MxStreamManager::SendProtobuf(const std::string& streamName, const std::string& elementName, std::vector<MxstProtobufIn>& protoVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| inPluginId | 输入 | 目标输入插件ID,即appsrc元件的编号。 |
| elementName | 输入 | 输入插件的名称,只支持appsrc当作输入插件。 |
| protoVec | 输入 | 发送的protobuf数据列表请参见MxstProtobufIn。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetElementProperty
设置元件属性,目前支持设置的元件有mxpi_channelselector、mxpi_channelosdcoordsconverter、mxpi_channelimagesstitcher、mxpi_rtspsrc、mxpi_object2osdinstances、mxpi_class2osdinstances、mxpi_bufferstablizer、mxpi_skipframe。
APP_ERROR MxStreamManager::SetElementProperty(const std::string& streamName, const std::string& elementName,const std::string& propertyName,const std::string& propertyValue);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| elementName | 输入 | 元件的名称。 |
| propertyName | 输入 | 元件的属性。 |
| propertyValue | 输入 | 元件的属性值。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
StopStream
销毁指定的stream对象。
在销毁流的过程中会直接停止所有插件的运行,因此需要用户确保已完成文件或结果的保存。
APP_ERROR MxStreamManager::StopStream(const std::string& streamName);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| streamName | 输入 | 流的名称。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Packet
类说明
数据模板类,作为Stream流中的数据承载体,可以作为Stream流的输入数据和接收的数据。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
GetItem
从Packet中获取真实的模板所承载的数据。
T GetItem()
| 参数名 | 说明 |
|---|---|
| T | Packet数据模板所承载的真实数据的数据类型。 |
Packet
Packet的构造函数。
Packet() = default;
Packet(T item);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| item | 输入 | Packet数据模板所承载的真实数据。 |
SetItem
支持设置Packet所要承载的数据。
void SetItem(T& item)
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| item | 输入 | Packet数据模板所承载的真实数据。 |
PluginNode
类说明
插件节点类,用于创建流程所需的插件。
[!NOTICE] 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Factory
获取插件工厂名。
std::string PluginNode::Factory() const;
| 数据结构 | 说明 |
|---|---|
| std::string | 创建插件的工厂名称。 |
operator()
设置前向插件节点。
PluginNode& PluginNode::operator()(PluginNode& preNode);
template<typename... Args>
PluginNode& PluginNode::operator()(PluginNode& preNode, Args&... args)
{
operator()(preNode);
operator()(args...);
return *this;
}
PluginNode& PluginNode::operator()(std::vector<PluginNode>& preNodeList);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| preNode | 输入 | 前向插件类对象。 |
| args | 输入 | (可选)根据用户需要输入。 |
| preNodeList | 输入 | 前向插件类对象列表。 |
| 数据结构 | 说明 |
|---|---|
| PluginNode | 返回插件节点本身。 |
PluginId
获取由系统自动生成的插件ID。
int PluginNode::PluginId() const;
| 数据结构 | 说明 |
|---|---|
| int | 插件ID。 |
PluginName
获取插件名。
std::string PluginNode::PluginName() const;
| 数据结构 | 说明 |
|---|---|
| std::string | 插件名。 |
PluginNode
插件节点构造函数。
PluginNode::PluginNode(const std::string& factory, const std::map<std::string, std::string>& props = std::map<std::string, std::string>(), const std::string& name = "");
PluginNode::PluginNode(const PluginNode &);
PluginNode::PluginNode(const PluginNode &&);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| factory | 输入 | 创建插件的工厂名称。 |
| props | 输入 | 插件属性配置项,默认为空。 |
| name | 输入 | 插件名。默认为空时,会根据factory自动生成插件名。 |
| PluginNode | 输入 | 拷贝构造入参。 |
~PluginNode
PluginNode类的默认析构函数。
PluginNode::~PluginNode();
Properties
获取插件属性配置项。
std::map<std::string, std::string> PluginNode::Properties() const;
| 数据结构 | 说明 |
|---|---|
| std::map<std::string, std::string> | 属性配置项。 |
ToJson
插件对象转JSON对象。
std::string PluginNode::ToJson() const;
| 数据结构 | 说明 |
|---|---|
| std::string | 插件JSON对象字符串。 |
FunctionalStream
类说明
该类为多输入多输出流程的实体类。操作方法:构建流程、继承Stream类。
可使用Stream类公共方法。
[!NOTICE]
- 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
- 在析构销毁流的过程中会直接停止所有插件的运行,因此需要用户确保已完成文件或结果的保存。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Build
根据FunctionalStream构造函数中的inputs和outputs,构建多输入多输出流程。构建流程时,会根据插件的上下游关系进行递归操作,最大递归次数为4096,单个pipeline中,插件及pipeline配置项的个数限制最大5120个。
构建请合理设置插件及其输入输出。
需与Stream::Stop搭配使用,请勿在一个进程中重复调用Build与Stop。
APP_ERROR FunctionalStream::Build();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
FunctionalStream
构造函数,创建多输入多输出流程对象。
FunctionalStream::FunctionalStream(const std::string& name, const std::vector<PluginNode>& inputs, const std::vector<PluginNode>& outputs);
FunctionalStream::FunctionalStream(const std::string& name);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| name | 输入 | 流程名称。 |
| inputs | 输入 | 多输入插件列表。 |
| outputs | 输出 | 多输出插件列表。 |
~FunctionalStream
FunctionalStream类的默认析构函数。
FunctionalStream::~FunctionalStream();
SequentialStream
类说明
该类为单向顺序流程的实体类。操作方法:添加插件、构建流程、继承Stream类。
可使用Stream类公共方法。
[!NOTICE]
- 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
- 在析构销毁流的过程中会直接停止所有插件的运行,因此需要用户确保已完成文件或结果的保存。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Add
添加插件。
APP_ERROR SequentialStream::Add(const PluginNode &pluginNode);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pluginNode | 输入 | 插件对象。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Build
根据Add方法顺序添加的插件,构建单向顺序流程。
需与Stream::Stop搭配使用,请勿在一个进程中重复调用Build与Stop。
单个pipeline中,插件及pipeline配置项的个数限制最大5120个。
APP_ERROR SequentialStream::Build();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SequentialStream
构造函数,创建单向顺序流程对象。
SequentialStream::SequentialStream(const std::string &name);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| name | 输入 | 流程名称。 |
~SequentialStream
SequentialStream类的默认析构函数。
SequentialStream::~SequentialStream();
Stream
类说明
该类为流程的抽象类。操作方法:设置DeviceId、设置插件属性值、获取流程的JSON数据、向流程上发送数据、获得执行结果。
[!NOTICE]
- 如果使用堆申请内存方式创建MxStreamManager对象,在使用结束后,请务必释放MxStreamManager对象,否则会出现不可预知的错误。
- 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
- 在析构销毁流的过程中会直接停止所有插件的运行,因此需要用户确保已完成文件或结果的保存。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
Build
为纯虚函数,由其子类SequentialStream和FunctionalStream实现。
virtual APP_ERROR Stream::Build();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetMultiResultWithUniqueId
获得Stream上的多个输出元件的结果(appsink)。阻塞式,支持多线程并发,支持多输出。
std::vector<MxstDataOutput*> Stream::GetMultiResultWithUniqueId(uint64_t uniqueId, uint32_t timeOutMs = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| uniqueId | 输入 | 发送数据后返回的编号,通过该编号获取对应的结果。 |
| timeOutMs | 输入 | 等待结果的时间,默认为3s。 |
| 数据结构 | 说明 |
|---|---|
| std::vector<MxstDataOutput*> | 推理服务输出数据MxstDataOutput,该返回指针指向的内存需要通过delete命令删除。 |
GetResult
向指定的输出插件(appsink)获取结果。
MxstBufferAndMetadataOutput Stream::GetResult(const std::string& elementName, const std::vector<std::string>& dataSourceVec, const uint32_t& msTimeOut = DELAY_TIME);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| elementName | 输入 | 输入appsink输出插件名称。 |
| dataSourceVec | 输入 | 元数据对应的dataSource,用于获取指定元数据。 |
| msTimeOut | 输入 | 超时时间(单位ms),默认为3s。 |
| 数据结构 | 说明 |
|---|---|
| MxstBufferAndMetadataOutput | 获取buffer和元数据。 |
SendData
向指定的输入插件(appsrc)发送数据。
APP_ERROR Stream::SendData(const std::string& elementName, std::vector<MxstMetadataInput>& metadataVec, MxstBufferInput& dataBuffer);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| elementName | 输入 | appsrc输入插件名称。 |
| metadataVec | 输入 | 发送的protobuf数据列表见MxstMetadataInput。 |
| dataBuffer | 输入 | 待发送的数据,数据类型为MxstBufferInput,bufferInput.dataSize应该等于待发送数据内存大小,且在[1, 4294967296]范围内,bufferInput.dataPtr需要delete。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendMultiDataWithUniqueId
向指定的多个输入插件(appsrc0,appsrc1, ...)发送数据。
APP_ERROR Stream::SendMultiDataWithUniqueId(std::vector<int> inPluginIdVec, std::vector<MxstDataInput>& dataInputVec, uint64_t& uniqueId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inPluginIdVec | 输入 | 目标输入插件ID,即appsrc元件的编号。(appsrc的编号指第几个appsrc元件) |
| dataInputVec | 输入 | 待发送的数据,dataBuffer.dataSize应该等于待发送数据内存大小,且在[1, 4294967296]范围内,dataBuffer.dataPtr需要delete。 |
| uniqueId | 输出 | 发送数据后返回的编号,通过该编号获取对应的结果。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetDeviceId
设置DeviceId。
void Stream::SetDeviceId(const std::string& deviceId);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | 待设定的设备ID。 |
SetElementProperty
设置插件属性值。
APP_ERROR Stream::SetElementProperty(const std::string& elementName, const std::string& propertyName, const std::string& propertyValue);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| elementName | 输入 | 插件名称。 |
| propertyName | 输入 | 属性名称。 |
| propertyValue | 输入 | 属性值。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Start
启动流程
APP_ERROR Stream::Start();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Stop
停止流程。
在停止流的过程中会直接停止所有插件的运行,因此需要用户确保已完成文件或结果的保存。
APP_ERROR Stream::Stop();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Stream
构造函数,流程对象基类。
explicit Stream::Stream(const std::string& pipelinePath);
Stream::Stream(const std::string& pipelinePath, const std::string& streamName);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| pipelinePath | 输入 | 流程配置文件路径。 |
| streamName | 输入 | 流程对象名。 |
~Stream
Stream类的默认析构函数。
virtual Stream::~Stream();
ToJson
获取流程的JSON数据。
std::string Stream::ToJson() const;
| 数据结构 | 说明 |
|---|---|
| std::string | 流程的JSON数据字符串。 |
DataHelper
类说明
该类用于从本地读取文件和图像数据。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
ReadFile
读取文件内容。
static std::string DataHelper::ReadFile(const std::string& filePath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| filePath | 输入 | 文件路径。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 文件内容。 |
ReadImage
图片文件转存至MxstBufferInput对象。读取图片文件的大小范围为[1B, 4GB],默认为1GB,其中最大值可以通过Vision SDK的配置文件“sdk.conf”里面的“malloc_max_data_size”字段进行配置,“malloc_max_data_size”字段代表了Vision SDK支持分配的内存大小的最大值,请根据实际情况进行合理设置。读取成功后,获取的数据需要用户手动进行free释放。
static MxstBufferInput DataHelper::ReadImage(const std::string& imagePath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| imagePath | 输入 | 图片文件路径。 |
| 数据结构 | 说明 |
|---|---|
| MxstBufferInput | Stream对象的输入数据结构。 |
插件开发
MxPluginBase
类说明
插件基类,用户开发自定义插件需要继承该类,实现以下方法。
[!NOTICE] 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
公共参数
| 参数名 | 数据类型 | 参数说明 |
|---|---|---|
| pluginName_ | string | 插件名称 |
| streamName_ | string | 流名称 |
| elementName_ | string | 插件元素名称 |
| dataSource_ | string | 数据源,默认值为auto。 |
| srcPadNum_ | size_t | 输入端口数量 |
| sinkPadNum_ | size_t | 输出端口数量 |
| deviceId_ | int | 设备ID |
| status_ | int | 同步异步标识,默认值为0(async)。 |
| dataSourceKeys_ | std::vector<std::string> | 数据源键 |
| outputDataKeys_ | std::vector<std::string> | 输出数据键 |
| elementDynamicImageSize_ | std::map<std::string, std::vector<ImageSize>> | 模型动态输入大小 |
| useDevice_ | bool | 是否使用NPU开关,默认值为true。 |
ConfigParamLock
修改插件属性前,加锁。
void MxPluginBase::ConfigParamLock();
ConfigParamUnlock
修改插件属性后,解锁。
void MxPluginBase::ConfigParamUnlock();
DeInit
资源释放接口。用户自定义插件需要重写该方法,并在该方法中释放自己申请的资源。与Init配套使用。
virtual APP_ERROR MxPluginBase::DeInit() = 0;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxPluginBase
构造函数。
MxPluginBase::MxPluginBase();
MxPluginBase::MxPluginBase(const MxPluginBase &) = delete;
MxPluginBase::MxPluginBase(const MxPluginBase &&) = delete;
~MxPluginBase
MxPluginBase类的默认析构函数。
virtual MxPluginBase::~MxPluginBase();
operator=
运算符重载。
MxPluginBase& operator=(const MxPluginBase &) = delete;
MxPluginBase& operator=(const MxPluginBase &&) = delete;
Init
插件初始化方法。用户自定义插件需要重写该方法,在该方法中申请资源。与DeInit配套使用。
[!NOTICE] 若初始化失败,请勿继续调用后续的成员函数。
virtual APP_ERROR MxPluginBase::Init(std::map<std::string, std::shared_ptr<void>>& configParamMap) = 0;
| 参数名 | 说明 |
|---|---|
| configParamMap | 配置参数,串流后,配置文件的参数将通过该变量传入。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Process
插件执行方法。用户自定义插件需要重写该方法,并在该方法中实现插件的功能。
virtual APP_ERROR MxPluginBase::Process(std::vector<MxpiBuffer *>& mxpiBuffer) = 0;
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 上一个插件传入的数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DefineInputPorts
定义输入接口的数量和类型。
static MxpiPortInfo MxPluginBase::DefineInputPorts();
| 数据结构 | 说明 |
|---|---|
| MxpiPortInfo | 请参考MxpiPortInfo。 |
DefineOutputPorts
定义输出接口的数量和类型。
static MxpiPortInfo MxPluginBase::DefineOutputPorts();
| 数据结构 | 说明 |
|---|---|
| MxpiPortInfo | 请参考MxpiPortInfo。 |
DefineProperties
定义配置属性。
static std::vector<std::shared_ptr<void>> MxPluginBase::DefineProperties();
| 数据结构 | 说明 |
|---|---|
| ElementProperty | 请参考ElementProperty。 |
DestroyExtraBuffers
删除多输入端口插件中未被发送的多余buffer。
void MxPluginBase::DestroyExtraBuffers(std::vector<MxTools::MxpiBuffer *> &mxpiBuffer, size_t exceptPort);
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 上一个插件传入的数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| exceptPort | 除此端口索引以外的buffer都会被摧毁。 |
DoDump
获取buffer中指定数据。
std::string MxPluginBase::DoDump(MxTools::MxpiBuffer& mxpiBuffer, const std::vector<std::string>& filterKeys = std::vector<std::string>(),
const std::vector<std::string>& requiredKeys = std::vector<std::string>()) const;
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | buffer数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| filterKeys | 过滤指定key值数据。 |
| requiredKeys | 获取指定key值数据。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 从buffer中获取到的数据。 |
DoLoad
加载插件数据。(请用户不要使用)
SDK_AVAILABLE_FOR_IN MxTools::MxpiBuffer* MxPluginBase::DoLoad(MxTools::MxpiBuffer& mxpiBuffer);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiBuffer | 输入 | 所要加载的数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
GenerateDynamicInputPortsInfo
生成动态输入端口的信息(包括端口数量和端口格式)。动态端口根据配置文件中用户指定的数量动态创建,每个动态端口的格式相同。
static void MxPluginBase::GenerateDynamicInputPortsInfo(const std::vector<std::vector<std::string>>& portsDesc, MxpiPortInfo& inputPortInfo);
| 参数名 | 说明 |
|---|---|
| portsDesc | 端口配置信息,只允许注册一种类型的动态端口。例如{{"metadata/class"}}表示注册一个类型输入端口,端口支持“class”格式。vector容器的size范围为:[1, 1024]。 |
| inputPortInfo | 输出参数,包含输入端口信息。inputPortInfo.portNum范围为:[0, 1024]。 |
GenerateDynamicOutputPortsInfo
生成作为输出端口的动态端口信息。
static void MxPluginBase::GenerateDynamicOutputPortsInfo(const std::vector<std::vector<std::string>>& portsDesc, MxpiPortInfo& outputPortInfo);
| 参数名 | 说明 |
|---|---|
| portsDesc | 端口配置信息,只允许注册一种类型的动态端口。例如{{"image/jpeg"}}表示注册一个类型输出端口,端口支持“jpeg”格式。 |
| outputPortInfo | 输出参数,包含输出端口信息。 |
GenerateDynamicPortsInfo
当前为内部使用接口,请用户不要使用。
GenerateStaticInputPortsInfo
生成静态输入端口的信息(包括端口数量和端口格式)。元件创建时静态端口自动创建并且端口必须连接,否则Stream创建失败。
static void MxPluginBase::GenerateStaticInputPortsInfo(const std::vector<std::vector<std::string>>& portsDesc, MxpiPortInfo& inputPortInfo);
| 参数名 | 说明 |
|---|---|
| portsDesc | 端口配置信息。例如{{"metadata/object","metadata/class"},{"image/jpeg"}}表示注册两个输入端口,第一个端口支持两种格式“object”和“class”,第二个端口支持“jpeg”格式。 |
| inputPortInfo | 输出参数,包含输入端口信息。 |
GenerateStaticOutputPortsInfo
生成静态输出端口的信息(包括端口数量和端口格式)。元件创建时静态端口自动创建并且端口必须连接,否则Stream创建失败。
static void MxPluginBase::GenerateStaticOutputPortsInfo(const std::vector<std::vector<std::string>>& portsDesc, MxpiPortInfo& outputPortInfo);
| 参数名 | 说明 |
|---|---|
| portsDesc | 端口配置信息。例如{{"metadata/object","metadata/class"},{"metadata/attribute"}}表示注册两个输出端口,第一个端口支持两种格式“object”和“class”,第二个端口支持“attribute”格式。 |
| outputPortInfo | 输出参数,包含输出端口信息。 |
GenerateStaticPortsInfo
生成静态端口信息,该端口可以是输入或输出端口
static void MxPluginBase::GenerateStaticPortsInfo(PortDirection direction, const std::vector<std::vector<std::string>>& portsDesc, MxpiPortInfo& portInfo);
| 参数名 | 说明 |
|---|---|
| direction | 声明输入或输出端口。详见PortDirection。 |
| portsDesc | 端口描述信息。vector容器的size范围为:[1, 1024]。 |
| portInfo | 端口信息,请参见MxpiPortInfo。portInfo.portNum范围为:[0, 1024]。 |
GetElementNameWithObjectAddr
获得对象地址以及元素名称。
SDK_AVAILABLE_FOR_IN std::string MxPluginBase::GetElementNameWithObjectAddr();
| 数据结构 | 说明 |
|---|---|
| std::string | 对象地址以及元素名称的字符串。 |
RunProcess
调用Process函数前的通用步骤。检查上游传递的buffer是否有错误信息,以及元数据是否存在,如果有错误信息或者元数据不存在时,跳过执行此插件的Process直接透传上游buffer给下游插件。目前需要分别通过在Init时设置类成员“doPreErrorCheck_”和“doPreMetaDataCheck_”为“true”开启。
virtual APP_ERROR MxPluginBase::RunProcess(std::vector<MxpiBuffer*>& mxpiBuffer);
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 上一个插件传入的数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendData
数据发送方法。可以在Process中调用该方法,将数据发送给下一个插件。
APP_ERROR MxPluginBase::SendData(int index, MxpiBuffer& mxpiBuffer);
| 参数名 | 说明 |
|---|---|
| index | 指定输出端口编号。 |
| mxpiBuffer | 发送给下一个插件的数据。该数据结构的成员数据需合理设置(如GstBuffer),请勿直接手动设置内存数据。 |
[!NOTICE] mxpiBuffer必须使用堆内存(且必须用new申请内存),否则会导致应用崩溃。该接口会释放mxpiBuffer对应的堆内存,接口返回后用户无需释放内存,否则会导致应用崩溃。
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendDataToAllPorts
数据发送方法。将数据传送给所有输出端口。(请用户不要使用)
SDK_AVAILABLE_FOR_IN APP_ERROR MxPluginBase::SendDataToAllPorts (MxpiBuffer& mxpiBuffer);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiBuffer | 输入 | 所要传送的数据。该数据结构的成员数据需合理设置(如GstBuffer),请勿直接手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SendMxpiErrorInfo
向下游插件传递错误信息。
APP_ERROR MxPluginBase::SendMxpiErrorInfo(MxpiBuffer &buffer, const std::string& pluginName, APP_ERROR errorCode, const std::string& errorText);
| 参数名 | 说明 |
|---|---|
| buffer | buffer数据。 |
| pluginName | 插件名称。 |
| errorCode | 错误码。 |
| errorText | 错误信息。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 获取到的数据。 |
SetElementInstance
设置插件对象。
void MxPluginBase::SetElementInstance(void* elementInstance);
| 参数名 | 说明 |
|---|---|
| elementInstance | 传入的插件对象。 |
SetOutputDataKeys
设置插件对外输出的Metadata key。
virtual APP_ERROR MxPluginBase::SetOutputDataKeys();
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxpiBufferManager
类说明
定义插件的Buffer管理器,用于创建自定义插件时使用。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
AddData
在Buffer上挂载Metadata。为内部使用接口,请用户不要使用。
static APP_ERROR MxpiBufferManager::AddData(const InputParam& inputParam, void* buffer);
| 参数名 | 说明 |
|---|---|
| inputParam | Buffer接口定义的数据结构,请参考InputParam。inputParam.dataSize取值范围为[1, 4294967296]。 |
| buffer | void*类型的数据结构。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CreateDeviceBuffer
用于创建MxpiBuffer(插件之间传输的数据结构),接口根据用户指定内存大小和DeviceId,申请相应大小的Device内存。将Device内存数据、内存大小、DeviceId放在Metadata中。
static MxpiBuffer* MxpiBufferManager::CreateDeviceBuffer(const InputParam& inputParam);
| 参数名 | 说明 |
|---|---|
| inputParam | Buffer接口定义的数据结构,请参考InputParam。inputParam结构体中的key不能传入保留字段“ReserveMetadataGraph”、“ReservedVisionList”和“ErrorInfo”。 |
| 数据结构 | 说明 |
|---|---|
| MxpiBuffer* | 插件之间传递的数据结构,请参考MxpiBuffer。 |
CreateDeviceBufferAndCopyData
用于创建MxpiBuffer(插件之间传输的数据结构),接口根据用户指定内存大小和DeviceId,申请相应大小的Device内存,将用户传入的内存数据拷贝到Device内存并将Device内存数据、内存大小、DeviceId放在Metadata中。
static MxpiBuffer* MxpiBufferManager::CreateDeviceBufferAndCopyData(const InputParam& inputParam);
| 参数名 | 说明 |
|---|---|
| inputParam | Buffer接口定义的数据结构,请参考InputParam。inputParam.dataSize取值范围为[1, 4294967296]。inputParam结构体中的key不能传入保留字段“ReserveMetadataGraph”、“ReservedVisionList”和“ErrorInfo”。 |
| 数据结构 | 说明 |
|---|---|
| MxpiBuffer* | 插件之间传递的数据结构,请参考MxpiBuffer。 |
CreateDeviceBufferWithMemory
用于创建MxpiBuffer(插件之间传输的数据结构),用户传入内存地址,内存大小、DeviceId和Device type。将Device内存数据、内存大小、DeviceId,Device type放在Metadata中。
static MxpiBuffer* MxpiBufferManager::CreateDeviceBufferWithMemory(const InputParam& inputParam);
| 参数名 | 说明 |
|---|---|
| inputParam | Buffer接口定义的数据结构,请参考InputParam。inputParam.dataSize取值范围为[1, 4294967296]。inputParam结构体中的key不能传入保留字段“ReserveMetadataGraph”、“ReservedVisionList”和“ErrorInfo”。 |
| 数据结构 | 说明 |
|---|---|
| MxpiBuffer* | 插件之间传递的数据结构,请参考MxpiBuffer。 |
CreateHostBuffer
用于创建MxpiBuffer(插件之间传输的数据结构),接口根据用户指定内存大小,申请相应大小的Host内存。将Host内存数据、内存大小放在Metadata中。
static MxpiBuffer* MxpiBufferManager::CreateHostBuffer(const InputParam& inputParam);
| 参数名 | 说明 |
|---|---|
| inputParam | Buffer接口定义的数据结构,请参考InputParam。inputParam.dataSize取值范围为[1, 4294967296]。inputParam结构体中的key不能传入保留字段“ReserveMetadataGraph”、“ReservedVisionList”和“ErrorInfo”。 |
| 数据结构 | 说明 |
|---|---|
| MxpiBuffer* | 插件之间传递的数据结构,请参考MxpiBuffer。 |
CreateHostBufferAndCopyData
用于创建MxpiBuffer(插件之间传输的数据结构),接口根据用户指定内存大小,申请相应大小的Host内存,将用户传入的内存数据拷贝到Host内存并将Host内存数据、内存大小放在Metadata中。
static MxpiBuffer* MxpiBufferManager::CreateHostBufferAndCopyData(const InputParam& inputParam);
| 参数名 | 说明 |
|---|---|
| inputParam | Buffer接口定义的数据结构,请参考InputParam。inputParam.dataSize取值范围为[1, 4294967296]。inputParam结构体中的key不能传入保留字段“ReserveMetadataGraph”、“ReservedVisionList”和“ErrorInfo”。inputParam.dataSize应小于inputParam.ptrData的内存大小,否则存在内存越界。 |
| 数据结构 | 说明 |
|---|---|
| MxpiBuffer* | 插件之间传递的数据结构,请参考MxpiBuffer。 |
CreateHostBufferWithMemory
用于创建一个buffer,该buffer带有已存在的内存,给定的数据规模以及设备ID和类型。(请用户不要使用)
SDK_AVAILABLE_FOR_IN static MxpiBuffer* MxpiBufferManager::CreateHostBufferWithMemory(const InputParam& inputParam);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputParam | 输入 | Buffer接口定义的数据结构,请参考InputParam。inputParam.dataSize取值范围为[1, 4294967296]。inputParam结构体中的key不能传入保留字段“ReserveMetadataGraph”、“ReservedVisionList”和“ErrorInfo”。 |
| 数据结构 | 说明 |
|---|---|
| MxpiBuffer* | 插件之间传递的数据结构,请参考MxpiBuffer。 |
DestroyBuffer
销毁MxpiBuffer。
static APP_ERROR MxpiBufferManager::DestroyBuffer(MxpiBuffer* mxpiBuffer);
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 插件之间传递的数据结构,请参考MxpiBuffer。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetDeviceDataInfo
用于从MxpiBuffer中获取Device内存相关信息。
static MxpiFrame MxpiBufferManager::GetDeviceDataInfo(MxpiBuffer& mxpiBuffer);
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 插件之间传递的数据结构,请参考MxpiBuffer。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| MxpiFrame | 用于存放视频和图像帧,包含帧信息,数据信息,请参考表1。 |
GetHostDataInfo
用于从MxpiBuffer中获取Host内存相关信息。
static MxpiFrame MxpiBufferManager::GetHostDataInfo(MxpiBuffer& mxpiBuffer);
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 插件之间传递的数据结构,请参考MxpiBuffer。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| MxpiFrame | 用于存放视频和图像帧,包含帧信息,数据信息,请参考表1。 |
MxpiBufferManager
类构造函数,创建MxpiBufferManager对象(插件Buffer管理器)。
MxpiBufferManager::MxpiBufferManager();
~MxpiBufferManager
MxpiBufferManager类的默认析构函数。
MxpiBufferManager::~MxpiBufferManager();
MxpiMetadataManager
类说明
定义插件的Metadata管理器,用于存放对Buffer或Metadata操作后的数据。
[!NOTICE] 如出现因内存耗尽,导致构造函数执行失败抛出的异常时,请勿继续调用后续的成员函数。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
AddErrorInfo
以插件名为键将插件的错误信息加到Metadata中。
APP_ERROR MxpiMetadataManager::AddErrorInfo(const std::string pluginName, MxpiErrorInfo errorInfo);
| 参数名 | 说明 |
|---|---|
| pluginName | 插件的名称。 |
| errorInfo | 插件的错误信息,请参考MxpiErrorInfo。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
AddMetadata
往MxpiBuffer中挂载Metadata,实现插件之间的结构化数据传递。
APP_ERROR MxpiMetadataManager::AddMetadata(const std::string& key, std::shared_ptr<void> metadata);
| 参数名 | 说明 |
|---|---|
| key | 要挂载到Buffer上的Metadata的键名。 |
| metadata | 要挂载到Buffer上的Metadata数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
AddProtoMetadata
往MxpiBuffer中挂载Proto Metadata,将数据添加到序列化插件中。
[!NOTICE] 调用此接口前请确保metadata指针指向的内容已经准备完毕,不再修改。
APP_ERROR MxpiMetadataManager::AddProtoMetadata(const std::string& key, std::shared_ptr<void> metadata);
| 参数名 | 说明 |
|---|---|
| key | 要挂载到Buffer上的Proto Metadata的键名。“ReserveMetadataGraph”和“ReservedVisionList”为保留字段,不允许传入。 |
| metadata | 要挂载到Buffer上的Proto Metadata数据。metadata必须是protobuf message类型的智能指针,否则可能导致程序异常。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
CopyMetadata
将Buffer中全部Metadata数据拷贝并覆盖到targetMxpiBuffer中。
APP_ERROR MxpiMetadataManager::CopyMetadata(MxpiBuffer& targetMxpiBuffer);
| 参数名 | 说明 |
|---|---|
| targetMxpiBuffer | 保存拷贝数据的MxpiBuffer,请参考MxpiBuffer。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetAllMetaData
从MxpiBuffer获取所有的Metadata。
std::map<std::string, std::shared_ptr<void>> MxpiMetadataManager::GetAllMetaData();
| 数据结构 | 说明 |
|---|---|
| std::map<std::string, std::shared_ptr<void>> | Metadata数据的智能指针map。 |
GetErrorInfo
从Metadata中获取所有插件的错误信息。
std::shared_ptr<std::map<std::string, MxpiErrorInfo>> MxpiMetadataManager::GetErrorInfo();
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr<std::map<std::string, MxpiErrorInfo>> | 以map的形式返回所有插件名的错误码信息。 |
GetMetadata
从MxpiBuffer获取Key对应的Metadata。此方法需要配套插件开发用,不可单独调用。
std::shared_ptr<void> MxpiMetadataManager::GetMetadata(const std::string& key);
| 参数名 | 说明 |
|---|---|
| key | 要挂载到Buffer上的Metadata的键名。 |
| 数据结构 | 说明 |
|---|---|
| shared_ptr<void> | 存放Metadata数据的智能指针。 |
GetMetadataGraphInstance
从Proto Metadata中获取序列化数据。内部接口,请用户不要使用。
std::shared_ptr<MxpiMetadataGraph> MxpiMetadataManager::GetMetadataGraphInstance();
| 数据结构 | 说明 |
|---|---|
| shared_ptr<MxpiMetadataGraph> | 存放序列化插件数据的智能指针。 |
GetMetadataWithType
从MxpiBuffer获取Key对应的Metadata,同时进行元数据类型的校验。如果类型不匹配,打印错误并返回空指针。此方法需要配套插件开发用,不可单独调用。
std::shared_ptr<void> MxpiMetadataManager::GetMetadataWithType(const std::string& key, std::string type);
| 参数名 | 说明 |
|---|---|
| key | 要挂载到Buffer上的Metadata的键名。 |
| type | 待校验的protobuf类型名,如“MxpiVisionList”。 |
| 数据结构 | 说明 |
|---|---|
| shared_ptr<void> | 存放Metadata数据的智能指针。 |
MxpiMetadataManager
构造函数,通过Buffer构造MxpiMetadataManager实例。
explicit MxpiMetadataManager::MxpiMetadataManager(MxpiBuffer& mxpiBuffer);
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 保存拷贝数据的MxpiBuffer,请参考MxpiBuffer。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
~MxpiMetadataManager
MxpiMetadataManager类的默认析构函数。
MxpiMetadataManager::~MxpiMetadataManager();
RemoveMetadata
从MxpiBuffer删除Key对应的Metadata。
APP_ERROR MxpiMetadataManager::RemoveMetadata(const std::string& key);
| 参数名 | 说明 |
|---|---|
| key | 要挂载到Buffer上的Metadata的键名。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
RemoveProtoMetadata
从MxpiBuffer删除Key对应的Proto Metadata。
APP_ERROR MxpiMetadataManager::RemoveProtoMetadata(const std::string& key);
| 参数名 | 说明 |
|---|---|
| key | 要挂载到Buffer上的Proto Metadata的键名。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxGstBase
MxGstBaseGetType接口在MxGstBase.h中定义,当前为内部使用接口,请用户不要使用。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
MxpiModelPostProcessorBase
类说明
该类用于实现推理后处理,用户需要继承该类并实现Init、DeInit、Process等虚函数。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
用于模型后处理的去初始化,完成资源释放。与Init搭配使用。
virtual APP_ERROR MxpiModelPostProcessorBase::DeInit() = 0;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
GetModelTensorsShape
保护成员函数,该接口由Init()调用,用于获取模型的输入输出张量形状。该方法为内部调用方法,请用户不要使用。
void MxpiModelPostProcessorBase::GetModelTensorsShape(MxBase::ModelDesc modelDesc);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| modelDesc | 输入 | 模型基本信息结构体。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。与DeInit搭配使用。
virtual APP_ERROR MxpiModelPostProcessorBase::Init(const std::string& configPath, const std::string& labelPath,
MxBase::ModelDesc modelDesc) = 0;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configPath | 输入 | 配置文件路径。 |
| labelPath | 输入 | 标签文件路径。 |
| modelDesc | 输出 | 模型描述信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
IsDescValid
保护成员函数,由process()调用,用于校验descriptor元素名称是否有效。该方法为内部调用方法,请用户不要使用。
APP_ERROR MxpiModelPostProcessorBase::IsDescValid(const google::protobuf::Descriptor* desc, std::string elementName);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| desc | 输入 | 待检查元素名称的Descriptor指针。 |
| elementName | 输入 | 元素名称。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
LoadConfigDataAndLabelMap
保护成员函数,该接口由Init()调用,用于实现配置参数获取。该方法为内部调用方法,请用户不要使用。
APP_ERROR MxpiModelPostProcessorBase::LoadConfigDataAndLabelMap(const std::string& configPath, const std::string& labelPath);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configPath | 输入 | 配置文件路径。 |
| labelPath | 输入 | 标签文件路径。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MemoryDataToHost
保护成员函数,把数据从Device侧拷贝到Host侧用于后处理。该方法为内部调用方法,请用户不要使用。
APP_ERROR MxpiModelPostProcessorBase::MemoryDataToHost(const int index, const std::vector<std::vector<MxBase::BaseTensor>>& tensors, std::vector<std::shared_ptr<void>>& featLayerData);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| index | 输入 | 输出池索引。 |
| tensors | 输入 | 输出Tensor数组。 |
| featLayerData | 输出 | 输出特征数据数组。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
~MxpiModelPostProcessorBase
MxpiModelPostProcessorBase类的默认析构函数。
virtual ~MxpiModelPostProcessorBase() = default;
Process
用于推理后处理。
virtual APP_ERROR MxpiModelPostProcessorBase::Process(std::shared_ptr<void>& metaDataPtr, MxBase::PostProcessorImageInfo postProcessorImageInfo, std::vector<MxTools::MxpiMetaHeader>& headerVec, std::vector<std::vector<MxBase::BaseTensor>>& tensors) = 0;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| metaDataPtr | 输出 | 推理模型后处理输出结果对应数据结构指针(该数据结构通过protobuf定义,例如MxpiObjectList),向下游插件传输数据指针。 |
| postProcessorImageInfo | 输入 | 图片信息(包括原图和缩放宽高,目标框坐标)。 |
| headerVec | 输入 | 模型推理输出数据所依赖的上游数据信息。 |
| tensors | 输入 | 模型推理输出Tensor。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetAspectRatioImageInfo
设置后处理图像信息。
virtual void MxpiModelPostProcessorBase::SetAspectRatioImageInfo(const std::vector<MxBase::AspectRatioPostImageInfo>& postProcessorImageInfoVec);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postProcessorImageInfoVec | 输入 | 后处理图像信息集合。 |
SetOutputTensorShapes
设置输出Tensor的形状。
void MxpiModelPostProcessorBase::SetOutputTensorShapes(const std::vector<MxBase::TensorDesc>& outputTensors);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| outputTensors | 输入 | 输出Tensor的形状集合。 |
MxpiObjectPostProcessorBase
类说明
该类继承了ModelPostProcessorBase用于目标检测推理后处理,用户可以根据需要继承该类并选择性实现Init、DeInit、Process等虚函数。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
用于模型后处理的去初始化,完成资源释放。与Init搭配使用。
APP_ERROR MxpiObjectPostProcessorBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
用于完成模型后处理初始化。与DeInit搭配使用。
APP_ERROR MxpiObjectPostProcessorBase::Init(const std::string& configPath, const std::string& labelPath, MxBase::ModelDesc modelDesc) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| configPath | 输入 | 配置文件路径。 |
| labelPath | 输入 | 标签文件路径。 |
| modelDesc | 输出 | 模型描述信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Process
用于推理后处理。
APP_ERROR MxpiObjectPostProcessorBase::Process(std::shared_ptr<void>& metaDataPtr, MxBase::PostProcessorImageInfo postProcessorImageInfo, std::vector<MxTools::MxpiMetaHeader>& headerVec, std::vector<std::vector<MxBase::BaseTensor>>& tensors, MxBase::ObjectPostProcessorBase& postProcessorInstance_);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| metaDataPtr | 输出 | 推理模型后处理输出结果对应数据结构指针(该数据结构通过protobuf定义,例如MxpiObjectList),向下游插件传输数据指针。 |
| postProcessorImageInfo | 输入 | 图片信息(包括原图和缩放宽高,目标框坐标)。 |
| headerVec | 输入 | 模型推理输出数据所依赖的上游数据信息。 |
| tensors | 输入 | 模型推理输出Tensor。 |
| postProcessorInstance_ | 输入 | 后处理对象。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
SetAspectRatioImageInfo
设置后处理图像信息。
void MxpiObjectPostProcessorBase::SetAspectRatioImageInfo(const std::vector<MxBase::AspectRatioPostImageInfo>& postProcessorImageInfoVec) override;
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| postProcessorImageInfoVec | 输入 | 后处理图像信息集合。 |
MxpiBufferDump
类说明
该类完成插件数据下载。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DoDump
获取/过滤指定插件数据并保存到文件。
static std::string MxpiBufferDump::DoDump(MxTools::MxpiBuffer& mxpiBuffer,
const std::vector<std::string>& filterKeys = std::vector<std::string>(),
const std::vector<std::string>& requiredKeys = std::vector<std::string>());
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiBuffer | 输入 | 插件数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| filterKeys | 输入 | 导出时过滤std::vector中对应keys的内容。当配置了requiredKeys时,此属性无效。 |
| requiredKeys | 输入 | 导出时获取std::vector中对应keys的内容。 |
| 数据结构 | 说明 |
|---|---|
| std::string | 获取/过滤指定插件后数据。 |
DoLoad
加载指定数据结构或文件。
static MxTools::MxpiBuffer* MxpiBufferDump::DoLoad(MxTools::MxpiBuffer& mxpiBuffer, int deviceId = 0);
static MxTools::MxpiBuffer* MxpiBufferDump::DoLoad(const std::string& filePath, int deviceId = 0);
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| mxpiBuffer | 输入 | 要加载的插件数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| filePath | 输入 | 要加载的文件。 |
| deviceId | 输入 | 设备ID。 |
| 数据结构 | 说明 |
|---|---|
| MxTools::MxpiBuffer | 加载生成的数据。 |
MxModelPostProcessorBase
类说明
后处理插件基类。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
CheckPostProcessLibPath
保护成员函数,用于校验后处理插件依赖类库是否存在,被OpenPostProcessLib()调用。该方法为内部调用方法,请用户不要使用。
bool MxModelPostProcessorBase::CheckPostProcessLibPath(std::string &filePath);
| 参数名 | 说明 |
|---|---|
| filePath | 依赖类库文件路径。 |
| 数据结构 | 说明 |
|---|---|
| bool | 校验是否成功。 |
CheckPyPostProcessLibPath
保护成员函数,用于校验后处理插件依赖类库是否存在。该方法为内部调用方法,请用户不要使用。
APP_ERROR MxModelPostProcessorBase::CheckPyPostProcessLibPath(std::string &pyDir);
| 参数名 | 说明 |
|---|---|
| pyDir | Python依赖类库文件路径。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
ConstructTensor
保护成员函数,用于构建张量并存储到向量中。该方法为内部调用方法,请用户不要使用。
APP_ERROR MxModelPostProcessorBase::ConstructTensor(std::shared_ptr<MxTools::MxpiTensorPackageList>& tensorPackageList, std::vector<MxBase::TensorBase>& tensors);
| 参数名 | 说明 |
|---|---|
| tensorPackageList | 原始张量列表指针。 |
| tensors | 张量向量,用于存储生成的张量。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DefineInputPorts
定义输入接口的数量和类型。
static MxTools::MxpiPortInfo MxModelPostProcessorBase::DefineInputPorts();
| 数据结构 | 说明 |
|---|---|
| MxpiPortInfo | 请参考MxpiPortInfo。 |
DefineOutputPorts
定义输出接口的数量和类型。
static MxTools::MxpiPortInfo MxModelPostProcessorBase::DefineOutputPorts();
| 数据结构 | 说明 |
|---|---|
| MxpiPortInfo | 请参考MxpiPortInfo。 |
DefineProperties
定义配置属性。
static std::vector<std::shared_ptr<void>> MxModelPostProcessorBase::DefineProperties();
| 数据结构 | 说明 |
|---|---|
| std::vector<std::shared_ptr<void>> | 属性。 |
DeInit
资源释放接口。与Init搭配使用。
APP_ERROR MxModelPostProcessorBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Init
后处理基类插件初始化方法。与DeInit搭配使用。
APP_ERROR MxModelPostProcessorBase::Init(std::map<std::string, std::shared_ptr<void>>& configParamMap) override;
| 参数名 | 说明 |
|---|---|
| configParamMap | 配置参数,串流后,配置文件的参数将通过该变量传入。configParamMap中的值要求从配置文件中读取或为字符串类型,若不满足上述条件可能出现异常的情况导致程序终止。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitConfig
保护成员函数,用于初始化配置项至成员变量。该方法为内部调用方法,请用户不要使用。
APP_ERROR MxModelPostProcessorBase::InitConfig(std::map<std::string, std::shared_ptr<void>> &configParamMap);
| 参数名 | 说明 |
|---|---|
| configParamMap | 配置参数、串流后,配置文件的参数将通过该变量传入。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
InitPostProcessInstance
保护成员函数,用于初始化后处理实例。该方法为内部调用方法,请用户不要使用。
template<typename T>
APP_ERROR MxModelPostProcessorBase::InitPostProcessInstance(std::map<std::string, std::shared_ptr<void>> &configParamMap, std::string getInstanceName);
| 参数名 | 说明 |
|---|---|
| configParamMap | 配置参数、串流后,配置文件的参数将通过该变量传入。 |
| getInstanceName | 实例名称。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
OpenPostProcessLib
保护成员函数,用于校验和加载后处理插件依赖类库。内部调用方法,请用户不要使用。
APP_ERROR MxModelPostProcessorBase::OpenPostProcessLib(std::map<std::string, std::shared_ptr<void>>& configParamMap);
| 参数名 | 说明 |
|---|---|
| configParamMap | 配置参数、串流后,配置文件的参数将通过该变量传入。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
Process
后处理基类插件执行方法。
APP_ERROR MxModelPostProcessorBase::Process(std::vector<MxTools::MxpiBuffer *>& mxpiBuffer) override;
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 上一个插件传入的数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
MxImagePostProcessorBase
类说明
图像后处理插件基类MxImagePostProcessorBase,继承于MxModelPostProcessorBase。
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
DeInit
资源释放接口。与Init搭配使用。
APP_ERROR MxImagePostProcessorBase::DeInit() override;
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
DefineInputPorts
定义输入接口的数量和类型。
static MxpiPortInfo MxImagePostProcessorBase::DefineInputPorts();
| 数据结构 | 说明 |
|---|---|
| MxpiPortInfo | 请参考MxpiPortInfo。 |
DefineProperties
定义配置属性。
static std::vector<std::shared_ptr<void>> MxImagePostProcessorBase::DefineProperties();
| 数据结构 | 说明 |
|---|---|
| std::vector<std::shared_ptr<void>> | 属性。 |
Init
图像后处理基类插件初始化方法。与DeInit搭配使用。
APP_ERROR MxImagePostProcessorBase::Init(std::map<std::string, std::shared_ptr<void>>& configParamMap) override;
| 参数名 | 说明 |
|---|---|
| configParamMap | 配置参数,串流后,配置文件的参数将通过该变量传入。configParamMap中的值要求从配置文件中读取或为字符串类型,若不满足上述条件可能出现异常的情况导致程序终止。 |
Process
图像后处理基类插件执行方法。
APP_ERROR MxImagePostProcessorBase::Process(std::vector<MxTools::MxpiBuffer *>& mxpiBuffer) override;
| 参数名 | 说明 |
|---|---|
| mxpiBuffer | 上一个插件传入的数据。该数据结构的成员数据由上游插件进行输入,请勿手动设置内存数据。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
其他接口
MxpiDataTypeDeleter
总体说明
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
g_deleteFuncMxpiVisionList
智能指针删除器,智能指针类型MxpiVisionList。
该方法为内部使用接口,请用户不要使用。
auto g_deleteFuncMxpiVisionList = [](MxpiVisionList* mxpiVisionList);
| 参数名 | 说明 |
|---|---|
| mxpiVisionList | mxpiVisionList指针。 |
g_deleteFuncMxpiTensorPackageList
智能指针删除器,智能指针类型MxpiTensorPackageList。
该方法为内部使用接口,请用户不要使用。
auto g_deleteFuncMxpiTensorPackageList = [](MxpiTensorPackageList* mxpiTensorPackageList);
| 参数名 | 说明 |
|---|---|
| mxpiTensorPackageList | MxpiTensorPackageList指针。 |
MatPtrDeleter
原始指针删除器,指针类型为cv::Mat。该方法为内部使用接口,请用户不要使用。
bool MatPtrDeleter(uint64_t dataptr, uint64_t matptr);
| 参数名 | 说明 |
|---|---|
| dataptr | matptr -> data指针。dataptr需由图像数据内容指针转换成uint64类型,不可直接构造。 |
| matptr | matptr指针。matptr需由cv::Mat指针转换为uint64类型,不可直接构造。 |
SetDeviceID
设置指定的设备内容。该方法为内部使用接口,请用户不要使用。
SetDeviceID(MxBase::DeviceManager *deviceManager, MxBase::DeviceContext deviceContext, bool curDeviceIsOk);
| 参数名 | 说明 |
|---|---|
| deviceManager | MxBase::DeviceManager指针。 |
| deviceContext | 设备内容。 |
| curDeviceIsOk | 当前设备的状态。 |
MxpiDataTypeConverter
总体说明
Atlas 200I/500 A2 推理产品
Atlas 推理系列产品
ConstructProtobuf
将模型后处理使用的数据结构转换为protobuf数据结构,写入元数据用以插件间通讯。根据入参数据类型选择重载函数。
std::shared_ptr<MxTools::MxpiObjectList> ConstructProtobuf(
const std::vector<std::vector<MxBase::ObjectInfo>> &objectInfos, std::string dataSource);
std::shared_ptr<MxTools::MxpiClassList> ConstructProtobuf(
const std::vector<std::vector<MxBase::ClassInfo>>& classInfos,std::string dataSource);
std::shared_ptr<MxTools::MxpiImageMaskList> ConstructProtobuf(
const std::vector<MxBase::SemanticSegInfo> &semanticSegInfos, std::string dataSource);
std::shared_ptr<MxTools::MxpiTextsInfoList> ConstructProtobuf(
const std::vector<MxBase::TextsInfo>& textsInfo, std::string dataSource);
std::shared_ptr<MxTools::MxpiTextObjectList> ConstructProtobuf(
const std::vector<std::vector<MxBase::TextObjectInfo>>& textObjectInfos, std::string dataSource);
std::shared_ptr<MxTools::MxpiPoseList> ConstructProtobuf(
const std::vector<std::vector<MxBase::KeyPointDetectionInfo>>& keyPointInfos, std::string dataSource);
| 参数名 | 说明 |
|---|---|
| objectInfos | 目标检测结果。 |
| classInfos | 分类结果。 |
| semanticSegInfos | 语义分割结果。 |
| textsInfo | 文本生成结果。 |
| textObjectInfos | 文本框检测结果。 |
| keyPointInfos | 关键点检测结果。 |
| dataSource | 上游插件的名称。 |
| 数据结构 | 说明 |
|---|---|
| std::shared_ptr<MxTools::MxpiObjectList> | 与入参类型对应protobuf的智能指针。 |
| std::shared_ptr<MxTools::MxpiClassList> | |
| std::shared_ptr<MxTools::MxpiImageMaskList> | |
| std::shared_ptr<MxTools::MxpiTextsInfoList> | |
| std::shared_ptr<MxTools::MxpiTextObjectList> |
ConstrutImagePreProcessInfo
组装图片前处理的信息。
APP_ERROR ConstrutImagePreProcessInfo(MxTools::MxpiVisionInfo& visionInfo, MxBase::ImagePreProcessInfo& positionInfo);
| 参数名 | 说明 |
|---|---|
| visionInfo | 图片信息。 |
| positionInfo | 图片前处理信息。 |
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
StackMxpiVisionPreProcess
图片前处理的Protobuf信息赋值。
void StackMxpiVisionPreProcess(MxpiVisionInfo &dstMxpiVisionInfo,
const MxpiVisionInfo &srcMxpiVisionInfo,
const MxBase::CropResizePasteConfig &cropResizePasteConfig,
const std::string& elementName = "");
| 参数名 | 说明 |
|---|---|
| dstMxpiVisionInfo | 已存放“前处理信息”的结构体。 |
| srcMxpiVisionInfo | 未存入“前处理信息”的结构体。 |
| cropResizePasteConfig | 抠图缩放信息。 |
| elementName | 插件名称。 |
GetCurVersion
返回当前插件的版本号。
uint32_t GetCurVersion()
| 数据结构 | 说明 |
|---|---|
| uint32_t | 当前插件的版本号。 |




