手势识别算法


REVISION HISTORY

Revision No.
Description
Date
100
  • Initial release
  • 06/12/2023

    1. 算法描述

    手势识别算法主要对4种手势进行识别:YES(耶)、OK、L、STOP。

    2. 接口调用流程

    算法接口调用流程为 ALGO_HGR_CreateHandle->ALGO_HGR_HandleInit->ALGO_HGR_HandPersonDetect->ALGO_HGR_HandPoseRecognition->ALGO_HGR_HandleDeinit->ALGO_HGR_ReleaseHandle.

    3. 功能模块API

    API名 功能
    ALGO_HGR_CreateHandle 创建句柄
    ALGO_HGR_HandleInit 初始化句柄
    ALGO_HGR_HandPersonDetect 人手部检测
    ALGO_HGR_HandPoseRecognition 手势识别
    ALGO_HGR_HandleDeinit 句柄反初始化
    ALGO_HGR_ReleaseHandle 释放句柄

    3.1. ALGO_HGR_CreateHandle

    • 功能

      创建句柄

    • 语法

      MI_S32 ALGO_HGR_CreateHandle(MI_HGR_HANDLE* handle);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输出
    • 返回值

      0:成功。

      非0:失败。

    • 依赖

      头文件:algo_hgr_api.h

      库文件:libsstaralgo_hgr.so, libsstaralgo_hgr.a

    3.2. ALGO_HGR_HandleInit

    • 功能

      初始化句柄

    • 语法

      MI_S32 ALGO_HGR_HandleInit(MI_HGR_HANDLE handle, AlgoHgrInitParam_t* initParam);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      initParam 初始化参数 输入
    • 返回值

      0:成功。

      非0:失败。

    • 依赖

      头文件:algo_hgr_api.h

      库文件:libsstaralgo_hgr.so, libsstaralgo_hgr.a

    3.3. ALGO_HGR_HandPersonDetect

    • 功能

      人手部检测

    • 语法

      MI_S32 ALGO_HGR_HandPersonDetect(MI_HGR_HANDLE handle, AlgoHgrInputInfo_t* stBufInfo, HgrBbox_t** detBox,MI_S32* count);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      stBufInfo 模型输入数据640*352 yuv420_nv12 输入
      detBox 检测框结果 输出
      count 检测框个数 输出
    • 返回值

      0:成功。

      非0:失败。

    • 依赖

      头文件:algo_hgr_api.h

      库文件:libsstaralgo_hgr.so, libsstaralgo_hgr.a

    3.4. ALGO_HGR_HandPoseRecognition

    • 功能

      手部姿态识别,识别4种手势中的哪种手势

    • 语法

      MI_S32 ALGO_HGR_HandPoseRecognition(MI_HGR_HANDLE handle,  AlgoHgrInputInfo_t* stBufInfo, HgrBbox_t detBox, HgrPoint_t** output, MI_S32* count, AlgoHgrResult_t* hgrResult);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      stBufInfo crop的手部图像数据,256*256 yuv420_nv12 输入
      detBox 手部检测框 输入
      output 手部关键点 输出
      count 手部关键点个数 输出
      hgrResult 手部姿态结果 输出
    • 返回值

      0:成功。

      非0:失败。

    • 依赖

      头文件:algo_hgr_api.h

      库文件:libsstaralgo_hgr.so, libsstaralgo_hgr.a

    3.5. ALGO_HGR_HandleDeinit

    • 功能

      句柄反初始化

    • 语法

      MI_S32 ALGO_HGR_HandleDeinit(MI_HGR_HANDLE handle);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
    • 返回值

      0:成功。

      非0:失败。

    • 依赖

      头文件:algo_hgr_api.h

      库文件:libsstaralgo_hgr.so, libsstaralgo_hgr.a

    3.6. ALGO_HGR_ReleaseHandle

    • 功能

      释放句柄

    • 语法

      MI_S32 ALGO_HGR_ReleaseHandle(MI_HGR_HANDLE handle);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
    • 返回值

      0:成功。

      非0:失败。

    • 依赖

      头文件:algo_adas_hgr.h

      库文件:libsstaralgo_hgr.so, libsstaralgo_hgr.a

    4. 数据类型

    数据类型 定义
    AlgoHgrInitParam_t 初始化参数结构体
    AlgoHgrInputInfo_t 输入图像数据结构体
    AlgoHgrResult_t 手势识别结果结构体
    HgrPoint_t 手部关键点结构体
    HgrBbox_t 手部检测框结构体
    HgrCropInfo_t 图片crop的信息

    4.1. AlgoHgrInitParam_t

    • 说明

      初始化参数结构体

    • 定义

      typedef struct AlgoHgrInitParam_
      {
          MI_U8 ipu_firmware_path[IPU_MAX_LENGTH];
          MI_U8 det_model[MODEL_MAX_LENGTH];
          MI_U8 land_model[MODEL_MAX_LENGTH];
          HgrCropInfo_t disp_area;
          MI_FLOAT thredhold;
      }AlgoHgrInitParam_t;
      
    • 成员

      成员名称 描述
      ipu_firmware_path ipu_firmware_bin路径
      det_model 检测模型路径
      land_model 关键点模型路径
      disp_area 显示区域信息
      thredhold 检测阈值
    • 相关接口

      ALGO_HGR_HandleInit

    4.2. AlgoHgrInputInfo_t

    • 说明

      输入图像数据结构体

    • 定义

      typedef struct AlgoHgrInputInfo_
      {
          void* pt_tensor_data;
          MI_PHY phy_tensor_addr;
          MI_U32 bufsize;
          MI_U32 width;
          MI_U32 height;
          MI_S64 pts;
      }AlgoHgrInputInfo_t;
      
    • 成员

      成员名称 描述
      pt_tensor_data 虚拟地址
      phy_tensor_addr 物理地址
      bufsize 数据大小
      width 图片宽
      height 图片高
      pts 时间戳可不赋值
    • 相关数据类型及接口

      ALGO_HGR_HandPersonDetect

      ALGO_HGR_HandPoseRecognition

    4.3. AlgoHgrResult_t

    • 说明

      手势识别结果结构体

    • 定义

      typedef struct AlgoHgrResult_
      {
          MI_BOOL hg_ok;
          MI_BOOL hg_L;
          MI_BOOL hg_yes;
          MI_BOOL hg_stop;
          HgrBbox_t bbox;
      }AlgoHgrResult_t;
      
    • 成员 ​

      成员名称 描述
      hg_ok ok手势结果
      hg_L L手势结果
      hg_yes yes手势结果
      hg_stop stop手势结果
      bbox 手部框
    • 相关数据类型及接口

      ALGO_HGR_HandPoseRecognition

    4.4. HgrPoint_t

    • 说明

      手部关节点结构体

    • 定义

      typedef struct HgrPoint_
      {
          MI_FLOAT x;
          MI_FLOAT y;
      }HgrPoint_t;
      
    • 成员

      成员名称 描述
      x 节点横坐标
      y 节点纵坐标
    • 相关数据类型及接口

      ALGO_HGR_HandPoseRecognition

    4.5. HgrBbox_t

    • 说明

      手部框结构体

    • 定义

      typedef struct HgrBbox_
      {
          MI_S32 x;
          MI_S32 y;
          MI_S32 width;
          MI_S32 height;
          MI_FLOAT score;
          MI_S32 label;
      }HgrBbox_t;
      
    • 成员

      成员名称 描述
      x 框的左上横坐标
      y 框的左上纵坐标
      width 框的宽
      height 框的高
      score 框的分值
      label 框的类别
    • 相关数据类型及接口

      AlgoHgrResult_t

      ALGO_HGR_HandPersonDetect

      ALGO_HGR_HandPoseRecognition

    4.6. HgrCropInfo_t

    • 说明

      crop图片信息,如果是原图,则x=0,y=0,宽高为图像宽高

    • 定义

      typedef struct HgrCropInfo_
      {
          MI_S32 x;
          MI_S32 y;
          MI_S32 width;
          MI_S32 height;
      }HgrCropInfo_t;
      
    • 成员

      成员名称 描述
      x 左上横坐标
      y 左上纵坐标
      width
      height
    • 相关数据类型及接口

      AlgoHgrInitParam_t