人像分割算法
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
100 | 05/04/2023 |
1. 算法描述¶
人像分割主要包含两个功能,一个是背景模糊,一个是替换背景。
2. 算法性能¶
算法异步调用
算法 | 平台 | 分辨率 | 耗时 | rom | ram | mode |
---|---|---|---|---|---|---|
humanSeg | * | 3840*2160 | 30.34ms(29.4ms model_invoker) | 5.26m | 6m+5.5m=11.5m | replace |
humanSeg | * | 3840*2160 | 30.97ms(29.8ms model_invoker) | 5.26m | 6m+5.5m=11.5m | blur |
3. 功能模块API¶
API名 | 功能 |
---|---|
ALGO_HSEG_CreateHandle | 创建句柄 |
ALGO_HSEG_Init | 初始化句柄 |
ALGO_HSEG_SendInput | 送数据到模型推理 |
ALGO_HSEG_SegmentAndBlurBackgroud | 进行人像分割 |
ALGO_HSEG_DeInit | 反初始化句柄 |
ALGO_HSEG_ReleaseHandle | 释放句柄 |
3.1. ALGO_HSEG_CreateHandle¶
-
功能
创建句柄。
-
语法
MI_S32 ALGO_HSEG_CreateHandle(MI_HSEG_HANDLE* handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hseg_api.h
库文件:libsstaralgo_hseg.so, libsstaralgo_hseg.a, libmi_ive.so, libmi_ive.a
3.2. ALGO_HSEG_Init¶
-
功能
初始化句柄。
-
语法
MI_S32 ALGO_HSEG_Init(MI_HSEG_HANDLE handle, InitHsegParam_t initParam);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 initParam 初始化参数 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hseg_api.h
库文件:libsstaralgo_hseg.so, libsstaralgo_hseg.a, libmi_ive.so, libmi_ive.a
3.3. ALGO_HSEG_SendInput¶
-
功能
送数据到模型推理。
-
语法
MI_S32 ALGO_HSEG_SendInput(MI_HSEG_HANDLE handle, AlgoHsegInputInfo_t* stModelBufInfo);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 stModelBufInfo 模型输入数据(yuv420sp_nv12 640*360) 输入 -
返回值
0:成功。
其他:失败。
-
依赖
头文件:algo_hseg_api.h
库文件:libsstaralgo_hseg.so, libsstaralgo_hseg.a, libmi_ive.so, libmi_ive.a
3.4. ALGO_HSEG_SegmentAndBlurBackgroud¶
-
功能
执行人像分割,背景模糊和背景替换。
-
语法
MI_S32 ALGO_HSEG_SegmentAndBlurBackgroud(MI_HSEG_HANDLE handle,AlgoHsegInputInfo_t* stSrcOri, AlgoHsegInputInfo_t* stSrcRepBg, AlgoHsegInputInfo_t* stDst, ALGO_HsegBgBlurCtrl_t ctrl,MI_BOOL* s32ResultFlag);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 stSrcOri 源图像指针,输入原图。不能为空 输入 stSrcRepBg 源图像指针,配置背景模糊时用作原始小图;配置背景替换用作背景图。不能为空 输入 stDst 输出图像指针。不能为空 输出 ctrl 控制信息。不能为空 输入 s32ResultFlag 是否有结果输出 0:无结果(丢帧了) 1:有结果 输出 参数名称 支持图像类型 地址对齐 分辨率 stSrcOri YUV420SP、YUV422_YUYV 16 byte 640x360~7680x4320,width可2像素对齐 stSrcRepBg 配置背景模糊:YUV420SP
配置背景替换:YUV420SP、YUV422_YUYV16 byte 配置背景模糊:(640*360)
配置背景替换:64x64~7680x4320,width可2像素对齐stDst YUV420SP、YUV422_YUYV 16 byte 同pstSrcOri -
返回值
0:成功。
-1:阻塞,等待超过10ms
其他:失败。
-
依赖
头文件:algo_hseg_api.h
库文件:libsstaralgo_hseg.so, libsstaralgo_hseg.a, libmi_ive.so, libmi_ive.a
3.5. ALGO_HSEG_DeInit¶
-
功能
反初始化句柄。
-
语法
MI_S32 ALGO_HSEG_DeInit(MI_HSEG_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hseg_api.h
库文件:libsstaralgo_hseg.so, libsstaralgo_hseg.a, libmi_ive.so, libmi_ive.a
3.6. ALGO_HSEG_ReleaseHandle¶
-
功能
释放句柄。
-
语法
MI_S32 ALGO_HSEG_ReleaseHandle(MI_HSEG_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hseg_api.h
库文件:libsstaralgo_hseg.so, libsstaralgo_hseg.a, libmi_ive.so, libmi_ive.a
4. 数据类型¶
数据类型 | 定义 |
---|---|
InitHsegParam_t | 算法初始化参数。 |
ALGO_ImageDataType_e | 图片输入类型。 |
AlgoHsegInputInfo_t | 算法输入数据结构体。 |
ALGO_HsegBgbMode_e | 算法功能模式。 |
ALGO_BgBlurMaskOp_e | 预处理模式 |
ALGO_HsegBgBlurCtrl_t | 控制参数信息。 |
MI_HSEG_HANDLE | HSEG算法句柄 |
4.1. InitHsegParam_t¶
-
说明
算法的初始化参数。
-
定义
typedef struct InitHsegParam_ { MI_U8 ipu_firware_bin[IPU_MAX_LENGTH]; MI_U8 seg_model_path[MODEL_MAX_LENGTH]; }InitHsegParam_t;
-
成员
成员名称 描述 ipu_firware_bin Firware_bin的路径 seg_model_path 分割模型的路径 -
相关接口
4.2. ALGO_ImageDataType_e¶
-
说明
输入图片类型,只支持这两种类型。
-
定义
typedef enum { E_ALOG_YUV420SP = 0x0, E_ALGO_YUV422_YUYV = 0x1 }ALGO_ImageDataType_e;
-
成员
成员名称 描述 E_ALOG_YUV420SP yuv420sp数据类型 E_ALGO_YUV422_YUYV YUV422_YUYV数据类型
4.3. AlgoHsegInputInfo_t¶
-
说明
算法输入数据结构体。
-
定义
typedef struct AlgoHsegInputInfo_ { void* pt_tensor_data[MAX_INPUT_NUM]; MI_PHY phy_tensor_addr[MAX_INPUT_NUM];//notice that this is miu bus addr,not cpu bus addr. MI_U32 bufsize; MI_U32 width; MI_U32 height; MI_S64 pts; ALGO_ImageDataType_e data_type; }AlgoHsegInputInfo_t;
-
成员
成员名称 描述 pt_tensor_data 输入图像数据的虚拟地址 phy_tensor_addr 输入图像数据的物理地址 bufsize 输入数据大小 width 输入图像的宽 height 输入图像的高 pts 输入图像的时间戳,可不赋值 data_type 输入数据类型 -
相关接口
4.4. ALGO_HsegBgbMode_e¶
- 说明
算法运行模式,模糊背景 or 替换背景。
-
定义
typedef enum { E_ALOG_BGBLUR_MODE_BLUR = 0x0, E_ALGO_BGBLUR_MODE_REPLACE = 0x1 }ALGO_HsegBgbMode_e;
-
成员
成员名称 描述 E_ALOG_BGBLUR_MODE_BLUR 模糊背景 E_ALGO_BGBLUR_MODE_REPLACE 替换背景
4.5. ALGO_BgBlurMaskOp_e¶
-
说明
mask预处理模式
-
定义
typedef enum { E_ALGO_BGB_MASK_OP_DILATE = 0x0, E_ALGO_BGB_MASK_OP_NONE = 0x1, E_ALGO_BGB_MASK_OP_ERODE = 0x2 }ALGO_BgBlurMaskOp_e;
-
成员
成员名称 描述 E_ALGO_BGB_MASK_OP_DILATE 膨胀 E_ALGO_BGB_MASK_OP_NONE 什么都不做 E_ALGO_BGB_MASK_OP_ERODE 腐蚀
4.6. ALGO_HsegBgBlurCtrl_t¶
- 说明
算法运行模式,模糊背景 or 替换背景。
-
定义
typedef struct ALGO_HsegBgBlurCtrl_ { ALGO_HsegBgbMode_e bgblur_mode; MI_U8 mask_thredhold; MI_U8 blur_level; //[0-255] MI_U8 scaling_stage; //[1-15] ALGO_BgBlurMaskOp_e maskOp } ALGO_HsegBgBlurCtrl_t;
-
成员
成员名称 描述 bgblur_mode 模糊模式 mask_thredhold 二值化阈值 blur_level 模糊程度[0-255],0最模糊 scaling_stage 用于配置背景模糊缩放档位,取值范围[1, 15],15最模糊 maskOp 对mask做预处理 -
相关接口
4.7. MI_HSEG_HANDLE¶
-
说明
定义HSEG算法的句柄类型。
-
定义
typedef void* MI_HSEG_HANDLE;
-
成员
成员名称 描述 -
注意事项
无。