人脸姿态识别算法
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
101 | 03/22/2024 |
1. 算法描述¶
人脸姿态识别算法主要对人脸部眼睛和嘴巴姿态进行识别,姿态属性有:
- 眼睛(睁眼/闭眼)
- 嘴巴(张嘴/闭嘴)
2. 接口调用流程¶
算法接口调用流程为 ALGO_HeadPose_CreateHandle->ALGO_HeadPose_InitHandle->ALGO_HeadPose_GetInputAttr->ALGO_HeadPose_SetParams->ALGO_HeadPose_Detect->ALGO_HeadPose_Attr->ALGO_HeadPose_DeinitHandle->ALGO_HeadPose_ReleaseHandle.
3. 功能模块API¶
API名 | 功能 |
---|---|
ALGO_HeadPose_CreateHandle | 创建句柄 |
ALGO_HeadPose_InitHandle | 初始化句柄 |
ALGO_HeadPose_GetInputAttr | 获取输入属性 |
ALGO_HeadPose_SetParams | 设置参数 |
ALGO_HeadPose_Detect | 人脸姿态检测 |
ALGO_HeadPose_Attr | 人脸姿态属性识别 |
ALGO_HeadPose_DeinitHandle | 句柄反初始化 |
ALGO_HeadPose_ReleaseHandle | 释放句柄 |
3.1. ALGO_HeadPose_CreateHandle¶
-
功能
创建句柄
-
语法
MI_S32 ALGO_HeadPose_CreateHandle(void** handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.2. ALGO_HeadPose_InitHandle¶
-
功能
初始化句柄
-
语法
MI_S32 ALGO_HeadPose_InitHandle(void *handle, const PoseInit_t *init);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 init 初始化参数 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.3. ALGO_HeadPose_GetInputAttr¶
-
功能
获取输入属性
-
语法
MI_S32 ALGO_HeadPose_GetInputAttr(void *handle, PoseInputAttr_t *det_input_attr, PoseInputAttr_t *cls_input_attr);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 det_input_attr 检测模型输入属性(宽、高、图像格式) 输出 cls_input_attr 识别模型输入属性(宽、高、图像格式) 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.4. ALGO_HeadPose_SetParams¶
-
功能
设置参数
-
语法
MI_S32 ALGO_HeadPose_SetParams(void *handle, const PoseParams_t* params);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 params 参数 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.5. ALGO_HeadPose_Detect¶
-
功能
人脸姿态检测
-
语法
MI_S32 ALGO_HeadPose_Detect(void *handle, const PoseInput_t *input, PoseBox_t boxes[MAX_POSE_OBJECT], MI_S32 *num_boxes);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 input 检测模型输入数据800*480 yuv420_nv12 输入 boxes 检测框结果 输出 num_boxes 检测框个数 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.6. ALGO_HeadPose_Attr¶
-
功能
人脸姿态属性识别,识别眼睛和嘴巴是哪种姿态属性
-
语法
MI_S32 ALGO_HeadPose_Attr(void *handle, const PoseInput_t *input, PoseBox_t* box, PoseCls_t attrs[E_NUM_HEAD_POSE_ATTR], int *num_attrs);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 input 识别模型输入数据224*224 yuv420_nv12 输入 box 人脸姿态检测框 输入 attrs 人脸姿态属性结果 输出 num_attrs 人脸姿态属性数量 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.7. ALGO_HeadPose_DeinitHandle¶
-
功能
句柄反初始化
-
语法
MI_S32 ALGO_HeadPose_DeinitHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.8. ALGO_HeadPose_ReleaseHandle¶
-
功能
释放句柄
-
语法
MI_S32 ALGO_HeadPose_ReleaseHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
4. 数据类型¶
数据类型 | 定义 |
---|---|
PoseInit_t | 初始化参数结构体 |
PoseInput_t | 输入图像属性结构体 |
PoseInputAttr_t | 模型输入数据结构体 |
PoseCls_t | 人脸姿态属性识别结果结构体 |
PoseBox_t | 人脸姿态属性检测框结构体 |
PoseParams_t | 输入参数结构体 |
HeadPoseAttr_e | 人脸姿态属性信息 |
4.1. PoseInit_t¶
-
说明
初始化参数结构体
-
定义
typedef struct { char ipu_firmware_path[MAX_POSE_STRLEN]; char pose_model[MAX_POSE_STRLEN]; char cls_model[MAX_POSE_STRLEN]; MI_BOOL create_device; MI_BOOL destroy_device; } PoseInit_t;
-
成员
成员名称 描述 ipu_firmware_path ipu_firmware_bin路径 pose_model 检测模型路径(如: ./models/headpose_det48y_20230628.img) cls_model 识别模型路径(如:./models/headpose_land_20240321.img) create_device 是否创建device:若为false,需要在算法库外自行创建device;若为true,在算法库内部自动创建device destroy_device 是否销毁device:若为false,需要在算法库外自行销毁device,若为true,在算法库内部自动销毁device -
相关接口
4.2. PoseInput_t¶
-
说明
输入图像数据结构体
-
定义
typedef struct { void *p_vir_addr; MI_PHY phy_addr; MI_U32 buf_size; MI_U64 pts; MI_U16 width; MI_U16 height; } PoseInput_t;
-
成员
成员名称 描述 p_vir_addr 虚拟地址 phy_addr 物理地址 buf_size 数据大小 pts 时间戳可不赋值 width 图片宽 height 图片高 -
相关数据类型及接口
4.3. PoseInputAttr_t¶
-
说明
模型输入属性结构体
-
定义
typedef struct { MI_U32 width; MI_U32 height; MI_IPU_ELEMENT_FORMAT format; } PoseInputAttr_t;
-
成员
成员名称 描述 width 输入图片宽 height 输入图片高 format 输入图片格式 -
相关数据类型及接口
4.4. PoseCls_t¶
-
说明
人脸姿态属性识别结果结构体
-
定义
typedef struct { MI_S32 cls; MI_FLOAT score; } PoseCls_t;
-
成员
成员名称 描述 cls 人脸姿态属性(对应关系见HeadPoseAttr_e) score 人脸姿态属性得分 -
相关数据类型及接口
4.5. PoseBox_t¶
-
说明
人脸姿态属性检测框结构体
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_S32 cls; MI_FLOAT score; MI_U64 pts; MI_FLOAT keypts[MAX_POSE_NUM_KEYPTS][2]; MI_U64 track_id; } PoseBox_t;
-
成员
成员名称 描述 x 框的左上横坐标 y 框的左上纵坐标 width 框的宽 height 框的高 cls 框的类别 score 框的分值 pts 时间戳可不赋值 keypts 关键点序列 track_id 跟踪id -
相关数据类型及接口
4.6. PoseParams_t¶
-
说明
输入参数结构体
-
定义
typedef struct { MI_S32 disp_width; MI_S32 disp_height; MI_FLOAT min_width; MI_FLOAT min_height; MI_FLOAT det_threshold; MI_FLOAT cls_threshold; MI_FLOAT attr_threshold[MAX_POSE_NUM_ATTR]; } PoseParams_t;
-
成员
成员名称 描述 disp_width 显示宽度 disp_height 显示高度 min_width 检测的最小宽度 min_height 检测的最小高度 det_threshold 检测阈值 cls_threshold 识别阈值(人脸姿态识别中无用) attr_threshold 属性阈值:第一位为眼睛睁开的阈值,第二位为嘴巴张开的阈值,阈值越高判断眼睛睁开/嘴巴张开的标准越严格 -
相关数据类型及接口
4.7. HeadPoseAttr_e¶
-
说明
人脸姿态属性信息
-
定义
typedef enum { E_EYE_OPENNESS = 0, E_MOUTH_OPENNESS, E_NUM_HEAD_POSE_ATTR } HeadPoseAttr_e;
-
相关数据类型及接口