人像分割算法
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
100 | 05/04/2023 | |
101 | 11/07/2024 |
1. 算法描述¶
人像分割算法的功能是输出前景人像的mask,可以应用于背景模糊和背景替换。
注意:目前,该版本算法库仅适用于Rtos环境
2. 算法性能¶
Algorithm | Platform | Resolution | Inference Time | Rom | Ram | BW |
---|---|---|---|---|---|---|
hseg_y36_single.img | iford | 640*360 | 13.93ms | 1987KB | 4428KB | 45810KB |
hseg_y46_single.img | iford | 640*480 | 19.30ms | 2021KB | 6746KB | 63350KB |
3. 功能模块API¶
API名 | 功能 |
---|---|
ALGO_HSEG_CreateHandle | 创建句柄 |
ALGO_HSEG_InitHandle | 初始化句柄 |
ALGO_HSEG_GetInputAttr | 获取模型输入的属性信息 |
ALGO_HSEG_GetOutputAttr | 获取模型输出的属性信息 |
ALGO_HSEG_Run | 进行人像分割 |
ALGO_HSEG_DeinitHandle | 反初始化句柄 |
ALGO_HSEG_ReleaseHandle | 释放句柄 |
3.1. ALGO_HSEG_CreateHandle¶
-
功能
创建句柄。
-
语法
MI_S32 ALGO_HSEG_CreateHandle(void **handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
3.2. ALGO_HSEG_InitHandle¶
-
功能
初始化句柄。
-
语法
MI_S32 ALGO_HSEG_InitHandle(void *handle, const HsegInit_t *init_info);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 init_info 初始化参数 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
3.3. ALGO_HSEG_GetInputAttr¶
-
功能
获取模型输入的属性信息,包括模型输入分辨率以及输入数据的类型。
-
语法
MI_S32 ALGO_HSEG_GetInputAttr(void *handle, HsegAttr_t *input_attr);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 input_attr 输出结构体 输出 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
3.4. ALGO_HSEG_GetOutputAttr¶
-
功能
获取模型输出的属性信息,包括模型输出分辨率以及输出数据的类型。
-
语法
MI_S32 ALGO_HSEG_GetOutputAttr(void *handle, HsegAttr_t *y_mask_attr, HsegAttr_t *uv_mask_attr);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 y_mask_attr 输出结构体,获取模型输出的属性信息 输出 uv_mask_attr 输出结构体,获取模型输出的属性信息 输出 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
3.5. ALGO_HSEG_Run¶
-
功能
进行人像分割。
-
语法
MI_S32 ALGO_HSEG_Run(void *handle, const HsegInput_t *algo_input, const HsegInput_t *y_mask, const HsegInput_t *uv_mask);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 algo_input 输入buffer 输入 y_mask 输出buffer 输出 uv_mask 输出buffer 输出 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
3.6. ALGO_HSEG_DeinitHandle¶
-
功能
反初始化句柄。
-
语法
MI_S32 ALGO_HSEG_DeinitHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
3.7. ALGO_HSEG_ReleaseHandle¶
-
功能
释放句柄。
-
语法
MI_S32 ALGO_HSEG_ReleaseHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
头文件:sgs_hseg_api.h
库文件:libsgsalgo_hseg.so/libsgsalgo_hseg.a
4. 数据类型¶
数据类型 | 定义 |
---|---|
HsegAttr_t | 模型输入结构体 |
HsegInit_t | 算法初始化参数相关结构体 |
HsegInput_t | 算法输入相关结构体 |
4.1. HsegAttr_t¶
-
说明
模型输入结构体。
-
定义
typedef struct { MI_U32 width; MI_U32 height; MI_IPU_ELEMENT_FORMAT format; } HsegAttr_t;
-
成员
成员名称 描述 width 模型输入数据的宽 height 模型输入数据的高 format 模型输入数据的类型 -
相关接口
4.2. HsegInit_t¶
-
说明
算法初始化参数相关结构体。
-
定义
typedef struct { char ipu_firmware_path[MAX_HSEG_STRLEN]; // ipu_firmware.bin path char model_path[MAX_HSEG_STRLEN]; // segmentation model path MI_BOOL create_device; // set false to create ipu device outside algo lib MI_BOOL destroy_device; // set false to destroy ipu device outside algo lib void *model_buffer; // set it when load model from memory MI_U32 model_buffer_len; // set it when load model from memory } HsegInit_t;
-
成员
成员名称 描述 ipu_firmware_path[IPU_MAX_LENGTH] ipu_firmware_path路径 model_path[MODEL_MAX_LENGTH] 模型路径 create_device 是否创建设备 destroy_device 是否销毁设备 model_buffer 使用model_path时请设置为NULL,将model_path置空并且设置model_buffer和model_buffer_len可用于从模型内存块初始化算法 model_buffer_len 使用model_path时请设置为0,设置model_buffer内存块长度 -
相关接口
4.3. HsegInput_t¶
-
说明
算法输入相关结构体
-
定义
typedef struct { void *p_vir_addr; MI_PHY phy_addr; MI_U32 buf_size; MI_U64 pts; } HsegInput_t;
-
成员
成员名称 描述 p_vir_addr 输入buffer的虚拟地址 phy_addr 输入buffer的物理地址 buf_size 输入buffer的长度 pts 输入buffer的时间戳 -
相关接口
5. 错误码¶
错误码 | 数值 | 描述 |
---|---|---|
E_ALGO_SUCCESS | 0 | 操作成功 |
E_ALGO_HANDLE_NULL | 1 | 算法句柄为空 |
E_ALGO_INVALID_PARAM | 2 | 无效的输入参数 |
E_ALGO_DEVICE_FAULT | 3 | 硬件错误 |
E_ALGO_LOADMODEL_FAIL | 4 | 加载模型失败 |
E_ALGO_INIT_FAIL | 5 | 算法初始化失败 |
E_ALGO_NOT_INIT | 6 | 算法尚未初始化 |
E_ALGO_INPUT_DATA_NULL | 7 | 算法输入数据为空 |
E_ALGO_INVALID_INPUT_SIZE | 8 | 无效的算法输入数据维度 |
E_ALGO_INVALID_LICENSE | 9 | 无效的license许可 |
E_ALGO_MEMORY_OUT | 10 | 内存不足 |
E_ALGO_FILEIO_ERROR | 11 | 文件读写操作错误 |
E_ALGO_INVALID_OUTPUT_SIZE | 12 | 无效的算法输出数据维度 |