人像分割算法


REVISION HISTORY

Revision No.
Description
Date
100
  • Initial release
  • 05/04/2023
    101
  • Update
  • 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 模型输入数据的类型
    • 相关接口

      ALGO_HSEG_GetInputAttrALGO_HSEG_GetOutputAttr

    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内存块长度
    • 相关接口

      ALGO_HSEG_InitHandle

    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的时间戳
    • 相关接口

      ALGO_HSEG_Run

    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 无效的算法输出数据维度