人体姿态识别算法
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
100 | 06/13/2023 |
1. 算法描述¶
人体姿态识别算法主要对人点头,摇头,人体站和躺四种姿态进行识别。
2. 接口调用流程¶
点头,摇头识别流程为 ALGO_HPOSE_CreateHandle->ALGO_HPOSE_HandleInit->ALGO_HPOSE_FacePersonDetect->ALGO_HPOSE_HeadPoseRecognition->ALGO_HPOSE_HandleDeinit->ALGO_HPOSE_ReleaseHandle
站和躺识别流程为 ALGO_HPOSE_CreateHandle->ALGO_HPOSE_HandleInit->ALGO_HPOSE_FacePersonDetect->ALGO_HPOSE_BodyPoseRecognition->ALGO_HPOSE_HandleDeinit->ALGO_HPOSE_ReleaseHandle
同时检测头和人体姿态 ALGO_HPOSE_CreateHandle->ALGO_HPOSE_HandleInit->ALGO_HPOSE_FacePersonDetect->ALGO_HPOSE_HeadPoseRecognition->ALGO_HPOSE_BodyPoseRecognition-> ALGO_HPOSE_HandleDeinit->ALGO_HPOSE_ReleaseHandle
3. 功能模块API¶
API名 | 功能 |
---|---|
ALGO_HPOSE_CreateHandle | 创建句柄 |
ALGO_HPOSE_HandleInit | 句柄初始化 |
ALGO_HPOSE_FacePersonDetect | 人脸和人行检测 |
ALGO_HPOSE_HeadPoseRecognition | 点头和摇头识别 |
ALGO_HPOSE_BodyPoseRecognition | 躺和站识别 |
ALGO_HPOSE_HandleDeinit | 句柄反初始化 |
ALGO_HPOSE_ReleaseHandle | 释放句柄 |
3.1. ALGO_HPOSE_CreateHandle¶
-
功能
创建句柄
-
语法
MI_S32 ALGO_HPOSE_CreateHandle(MI_HPOSE_HANDLE* handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hpose_api.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
3.2. ALGO_HPOSE_HandleInit¶
-
功能
初始化句柄
-
语法
MI_S32 ALGO_HPOSE_HandleInit(MI_HPOSE_HANDLE handle, AlgoHposeInitParam_t* initParam);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 initParam 初始化参数 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hpose_api.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
3.3. ALGO_HPOSE_FacePersonDetect¶
-
功能
人脸和行人检测
-
语法
MI_S32 ALGO_HPOSE_FacePersonDetect(MI_HPOSE_HANDLE handle, AlgoHposeInputInfo_t* stBufInfo, HposeBbox_t** faceBox,MI_S32* faceCount, HposeBbox_t** bodyBox, MI_S32* bodyCount);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 stBufInfo 图片数据640*352 yuv420_nv12 输入 faceBox 人脸框 输出 faceCount 人脸框个数 输出 bodyBox 行人框 输出 bodyCount 行人框个数 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hpose_api.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
3.4. ALGO_HPOSE_HeadPoseRecognition¶
-
功能
人头姿态识别,摇头和点头识别
-
语法
MI_S32 ALGO_HPOSE_HeadPoseRecognition(MI_HPOSE_HANDLE handle, AlgoHposeInputInfo_t* stBufInfo, HposeBbox_t detBox, HposeHeadResult_t* result);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 stBufInfo crop的人脸图,输入64*64 ARGB8888 输入 detBox 人脸检测框 输入 result 姿态识别结果 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hpose_api.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
3.5. ALGO_HPOSE_BodyPoseRecognition¶
-
功能
人体姿态识别,躺和站识别
-
语法
MI_S32 ALGO_HPOSE_BodyPoseRecognition(MI_HPOSE_HANDLE handle, AlgoHposeInputInfo_t* stBufInfo, HposeBbox_t detBox, HposeBodyResult_t* result);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 stBufInfo crop的行人图片,256*192 yuv420_nv12 输入 detBox 行人检测框 输入 result 姿态结果 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_hpose_api.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
3.6. ALGO_HPOSE_HandleDeinit¶
-
功能
句柄反初始化
-
语法
MI_S32 ALGO_HPOSE_HandleDeinit(MI_HPOSE_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_adas_hpose.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
3.7. ALGO_HPOSE_ReleaseHandle¶
-
功能
释放句柄
-
语法
MI_S32 ALGO_HPOSE_ReleaseHandle(MI_HPOSE_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:algo_adas_hpose.h
库文件:libsstaralgo_hpose.so, libsstaralgo_hpose.a
4. 数据类型¶
数据类型 | 定义 |
---|---|
AlgoHposeInitParam_t | 初始化参数 |
AlgoHposeInputInfo_t | 输入图像的信息 |
HposeBodyResult_t | 人体姿态结果结构体 |
HposeHeadResult_t | 头部姿态结果结构体 |
FaceAngle_t | 人头角度结构体 |
HposePoint_t | 关节点的结构体 |
HposeBbox_t | 框的结构体 |
HposeCropInfo_t | 输入crop信息 |
4.1. AlgoHposeInitParam_t¶
-
说明
初始化参数
-
定义
typedef struct AlgoHposeInitParam_ { MI_U8 ipu_firmware_path[IPU_MAX_LENGTH]; MI_U8 hdet_model[MODEL_MAX_LENGTH]; MI_U8 fdet_model[MODEL_MAX_LENGTH]; MI_U8 angle_model[MODEL_MAX_LENGTH]; MI_U8 pose_model[MODEL_MAX_LENGTH]; HposeCropInfo_t disp_area; MI_FLOAT det_threshold; MI_FLOAT pitch_threshold; MI_FLOAT yaw_threshold; }AlgoHposeInitParam_t;
-
成员
成员名称 描述 ipu_firmware_path ipu_firmware_bin路径 hdet_model 行人检测模型路径 fdet_model 人脸加测模型路径 angle_model 角度估计模型路径 pose_model 姿态关键点模型路径 disp_area 显示区域信息 det_threshold 检测阈值 pitch_threshold 点头的阈值建议为10 yaw_threshold 摇头的阈值建议为15 -
相关接口
4.2. AlgoHposeInputInfo_t¶
-
说明
模型输入数据结构体
-
定义
typedef struct AlgoHposeInputInfo_ { void* pt_tensor_data; MI_PHY phy_tensor_addr; MI_U32 bufsize; MI_U32 width; MI_U32 height; MI_S64 pts; }AlgoHposeInputInfo_t;
-
成员
成员名称 描述 pt_tensor_data 虚拟地址 phy_tensor_addr 物理地址 bufsize 数据大小 width 图像宽 height 图像高 pts 时间戳,可不赋值 -
相关数据类型及接口
4.3. HposeBodyResult_t¶
-
说明
行人姿态结果结构体
-
定义
typedef struct HposeBodyResult_ { MI_BOOL stand; MI_BOOL lie; MI_S32 status; HposeBbox_t box; }HposeBodyResult_t;
-
成员
成员名称 描述 stand 站立姿态 lie 躺姿态 status 姿态变化,0:无变化 1:站到躺 2:躺到站 box 检测框 -
相关数据类型及接口
4.4. HposeHeadResult_t¶
-
说明
人头姿态结果结构体
-
定义
typedef struct HposeHeadResult_ { MI_BOOL shake_head; MI_BOOL nod_head; HposeBbox_t box; }HposeHeadResult_t;
-
成员
成员名称 描述 shake_head 摇头 nod_head 点头 box 检测框 -
相关数据类型及接口
4.5. FaceAngle_t¶
-
说明
人脸角度结构体
-
定义
typedef struct FaceAngle_ { MI_FLOAT pitch; MI_FLOAT yaw; MI_FLOAT roll; }FaceAngle_t;
-
成员
成员名称 描述 pitch 俯仰角 yaw 偏转角 roll 翻滚角
4.6. HposePoint_t¶
-
说明
人体关键点的结构体
-
定义
typedef struct HposePoint_ { MI_FLOAT x; MI_FLOAT y; MI_FLOAT score; }HposePoint_t;
-
成员
成员名称 描述 x 关键点横坐标 y 关键点纵坐标 score 关键点分值
4.7. HposeBbox_t¶
-
说明
检测框结构体
-
定义
typedef struct HposeBbox_ { MI_S32 x; MI_S32 y; MI_S32 width; MI_S32 height; MI_FLOAT score; MI_S32 label; MI_S32 id; }HposeBbox_t;
-
成员
成员名称 描述 x 框的左上横坐标 y 框的左上纵坐标 width 框的宽 height 框的高 score 框的分值 label 框的类别 id 框的跟踪id(暂无) -
相关数据类型及接口
4.8. HposeCropInfo_t¶
-
说明
图像crop信息,如果是全图输入,则x,y为0,width和height为原图宽高
-
定义
typedef struct HposeCropInfo_ { MI_S32 x; MI_S32 y; MI_S32 width; MI_S32 height; }HposeCropInfo_t;
-
成员
成员名称 描述 x crop的左上横坐标 y crop的左上纵坐标 width crop的宽 height crop的高 -
相关数据类型及接口