人体姿态识别算法


REVISION HISTORY

Revision No.
Description
Date
100
  • Initial release
  • 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
    • 相关接口

      ALGO_HPOSE_HandleInit

    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 时间戳,可不赋值
    • 相关数据类型及接口

      ALGO_HPOSE_FacePersonDetect

      ALGO_HPOSE_HeadPoseRecognition

      ALGO_HPOSE_BodyPoseRecognition

    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 检测框
    • 相关数据类型及接口

      ALGO_HPOSE_BodyPoseRecognition

    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 检测框
    • 相关数据类型及接口

      ALGO_HPOSE_HeadPoseRecognition

    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

    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的高
    • 相关数据类型及接口

      AlgoHposeInitParam_t