人像分割算法


REVISION HISTORY

Revision No.
Description
Date
100
  • Initial release
  • 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_YUYV
      16 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 分割模型的路径
    • 相关接口

      ALGO_HSEG_Init

    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 输入数据类型
    • 相关接口

      ALGO_HSEG_SegmentAndBlurBackgroud

    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做预处理
    • 相关接口

      ALGO_HSEG_SegmentAndBlurBackgroud

    4.7. MI_HSEG_HANDLE

    • 说明

      定义HSEG算法的句柄类型。

    • 定义

      typedef void* MI_HSEG_HANDLE;
      
    • 成员

      成员名称 描述
    • 注意事项

      无。