宠物姿态识别算法
REVISION HISTORY¶
Revision No. | Description | Date |
---|---|---|
102 | Initial release | 02/10/2025 |
1. 算法描述¶
宠物姿态识别算法主要对8种姿态进行识别:(注:目前" 摇尾巴"识别尚未ready)
- 正对镜头吐舌(E_PET_POSE_TONGUE_OUT);
- 舔毛/清洁(E_PET_POSE_CLEAN);
- 蜷缩身体(E_PET_POSE_CURL);
- 舒展身体(E_PET_POSE_STRETCH);
- 双脚站立(E_PET_POSE_STAND_UP);
- 吃东西(E_PET_POSE_EAT);
- 上厕所(E_PET_POSE_POOP);
- 摇尾巴(E_PET_POSE_SHAKE_TAIL, not ready);
2. 接口调用流程¶
算法接口调用流程为 ALGO_PetPose_CreateHandle->ALGO_PetPose_InitHandle->ALGO_PetPose_GetInputAttr->ALGO_PetPose_SetParams->ALGO_PetPose_Detect->ALGO_PetPose_Cls->ALGO_PetPose_DeinitHandle->ALGO_PetPose_ReleaseHandle.
3. 功能模块API¶
API名 | 功能 |
---|---|
ALGO_PetPose_CreateHandle | 创建句柄 |
ALGO_PetPose_InitHandle | 初始化句柄 |
ALGO_PetPose_GetInputAttr | 获取输入属性 |
ALGO_PetPose_SetParams | 设置参数 |
ALGO_PetPose_Detect | 宠物姿态检测 |
ALGO_PetPose_Cls | 宠物姿态识别 |
ALGO_PetPose_DeinitHandle | 句柄反初始化 |
ALGO_PetPose_ReleaseHandle | 释放句柄 |
3.1. ALGO_PetPose_CreateHandle¶
-
功能
创建句柄
-
语法
MI_S32 ALGO_PetPose_CreateHandle(void** handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.2. ALGO_PetPose_InitHandle¶
-
功能
初始化句柄
-
语法
MI_S32 ALGO_PetPose_InitHandle(void *handle, const PoseInit_t *init);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 init 初始化参数 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.3. ALGO_PetPose_GetInputAttr¶
-
功能
获取输入属性
-
语法
MI_S32 ALGO_PetPose_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_PetPose_SetParams¶
-
功能
设置参数
-
语法
MI_S32 ALGO_PetPose_SetParams(void *handle, const PoseParams_t* params);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 params 参数 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.5. ALGO_PetPose_Detect¶
-
功能
宠物姿态检测
-
语法
MI_S32 ALGO_PetPose_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_PetPose_Cls¶
-
功能
宠物姿态识别,识别8类宠物姿态中的哪种姿态
-
语法
MI_S32 ALGO_PetPose_Cls(void *handle, const PoseInput_t *input, PoseBox_t* box, PoseCls_t* cls);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 input 识别模型输入数据224*224 yuv420_nv12 输入 box 宠物姿态检测框 输入 cls 宠物姿态结果 输出 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.7. ALGO_PetPose_DeinitHandle¶
-
功能
句柄反初始化
-
语法
MI_S32 ALGO_PetPose_DeinitHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
0:成功。
非0:失败。
-
依赖
头文件:sgs_pose_api.h
库文件:libsgsalgo_pose.so, libsgsalgo_pose.a
3.8. ALGO_PetPose_ReleaseHandle¶
-
功能
释放句柄
-
语法
MI_S32 ALGO_PetPose_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 | 输入参数结构体 |
PetPoseClass_e | 宠物姿态类别信息 |
PetKeyPoint_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 检测模型路径 cls_model 识别模型路径 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 宠物姿态类别(对应关系见PetPoseClass_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. PetPoseClass_e¶
-
说明
宠物姿态类别信息
-
定义
typedef enum { E_PET_POSE_NONE = 0, E_PET_POSE_TONGUE_OUT, E_PET_POSE_CLEAN, E_PET_POSE_CURL, E_PET_POSE_STRETCH, E_PET_POSE_STAND_UP, E_PET_POSE_EAT, E_PET_POSE_POOP, E_PET_POSE_SHAKE_TAIL, E_NUM_PET_POSES } PetPoseClass_e;
-
相关数据类型及接口
4.8. PetKeyPoint_e¶
-
说明
宠物姿态关键点类别信息
-
定义
typedef enum { E_PET_LEFT_EYE = 0, E_PET_RIGHT_EYE, E_PET_NOSE, E_PET_LEFT_MOUTH, E_PET_RIGHT_MOUTH, E_PET_LEFT_FRONT_THIGH, E_PET_LEFT_FRONT_KNEE, E_PET_LEFT_FRONT_PAW, E_PET_RIGHT_FRONT_THIGH, E_PET_RIGHT_FRONT_KNEE, E_PET_RIGHT_FRONT_PAW, E_PET_LEFT_BACK_THIGH, E_PET_LEFT_BACK_KNEE, E_PET_LEFT_BACK_PAW, E_PET_RIGHT_BACK_THIGH, E_PET_RIGHT_BACK_KNEE, E_PET_RIGHT_BACK_PAW, E_PET_TAIL_ROOT, E_PET_TAIL_END, E_PET_TONGUE, E_NUM_PET_KEYPTS } PetKeyPoint_e;
-
相关数据类型及接口