bef_effect_ai_dynamic_action.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #ifndef ANDROIDDEMO_BEF_EFFECT_AI_DYNAMIC_ACTION_H
  2. #define ANDROIDDEMO_BEF_EFFECT_AI_DYNAMIC_ACTION_H
  3. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  4. #include <jni.h>
  5. #endif
  6. #include "bef_effect_ai_public_define.h"
  7. #define BEF_AI_DYNAMIC_ACTION_MAX_PERSON_NUM_ALLOWED 20
  8. #define BEF_AI_DYNAMIC_ACTION_PERSON_KEY_POINT_NUM 18 // skeleton
  9. // 人检测的返回结构体
  10. // 结构体有默认值 调用方需要根据返回值是否是默认值 判断是否有相应的检测结果
  11. typedef struct bef_ai_dynamic_action_info_st {
  12. int id; ///< 人的id,track_id
  13. int person_id; ///< 人的id,来自于skeleton
  14. bef_ai_rect rect; ///< 人矩形框 默认: 0
  15. bef_ai_rect rect_stl; ///< 人矩形框 默认: 0
  16. unsigned int action; ///< 动态类别, 默认: 0
  17. unsigned int action_duration; ///< 动态类别的中间停留帧数, 默认: 0
  18. float action_score; ///< 动态类别置信度 默认: 0
  19. } bef_ai_dynamic_action_info, *p_bef_ai_dynamic_action_info;
  20. typedef struct bef_ai_dynamic_action_sk_info_st {
  21. int id; // 人的 id
  22. bef_ai_rect rect; // 人体框
  23. bef_ai_tt_key_point key_points[BEF_AI_DYNAMIC_ACTION_PERSON_KEY_POINT_NUM]; // 人体关键点
  24. } bef_ai_dynamic_action_sk_info;
  25. // dynamic action from skeleton
  26. #define BEF_AI_DYNAMIC_ACTION_NO_ACTION 0 // NoAction: 无动作
  27. #define BEF_AI_DYNAMIC_ACTION_PUSH_UP 1 // PushUp: 俯卧撑
  28. #define BEF_AI_DYNAMIC_ACTION_SIT_UP 2 // SitUp: 仰卧起坐
  29. #define BEF_AI_DYNAMIC_ACTION_ROW_FAST 3 // RowFast: 半身快速划船
  30. #define BEF_AI_DYNAMIC_ACTION_ROW_SLOW 4 // RowSlow: 半身慢速划船
  31. #define BEF_AI_DYNAMIC_ACTION_SQUAT_FRONT 5 // SquatFront: 正面下蹲
  32. #define BEF_AI_DYNAMIC_ACTION_ROW_SLOW_FULL 6 // RowSlowFull: 全身慢速划船
  33. #define BEF_AI_DYNAMIC_ACTION_ROW_FAST_FULL 7 // RowFastFull: 全身快速划船
  34. #define BEF_AI_DYNAMIC_ACTION_JUMP_JACK 8 // JumpJack: 开合跳
  35. #define BEF_AI_DYNAMIC_ACTION_SQUAT_PROFILE 9 // SquatProfile: 侧面下蹲
  36. /// @brief 检测结果
  37. typedef struct bef_ai_dynamic_action_result_st {
  38. // 检测到的人信息
  39. bef_ai_dynamic_action_info p_persons[BEF_AI_DYNAMIC_ACTION_MAX_PERSON_NUM_ALLOWED];
  40. // 检测到的人数目,p_persons 数组中,只有前person_count个结果是有效的,后面的是无效
  41. int person_count;
  42. } bef_ai_dynamic_action_result, *p_bef_ai_dynamic_action_result;
  43. typedef struct bef_ai_dynamic_action_sk_st {
  44. bef_ai_dynamic_action_sk_info sk_infos[BEF_AI_DYNAMIC_ACTION_MAX_PERSON_NUM_ALLOWED];
  45. int person_count;
  46. } bef_ai_dynamic_action_sk;
  47. typedef enum {
  48. BEF_AI_DYNAMIC_ACTION_REFRESH_FRAME_INTERVAL = 1, // 设置检测刷新帧数, 暂不支持
  49. BEF_AI_DYNAMIC_ACTION_MAX_PERSON_NUM = 2, // 设置最多人的个数,默认为1,目前最多设置为20;
  50. } bef_ai_dynamic_action_param_type;
  51. typedef enum {
  52. BEF_AI_DYNAMIC_ACTION_MODEL_SK = 0x0001, // 人体skeleton模型
  53. BEF_AI_DYNAMIC_ACTION_MODEL_DETECT = 0x0002, // 人体detection模型 (TODO)
  54. BEF_AI_DYNAMIC_ACTION_MODEL_DYNAMIC_ACTION = 0x0004, // 动态姿态模型 (TODO)
  55. } bef_ai_dynamic_action_model_type; // TODO: 其实这里以需要加载的能力为划分更好
  56. BEF_SDK_API bef_effect_result_t
  57. bef_effect_ai_dynamic_action_create(
  58. bef_effect_handle_t *handle,
  59. unsigned int config
  60. );
  61. BEF_SDK_API bef_effect_result_t
  62. bef_effect_ai_dynamic_action_set_param(
  63. bef_effect_handle_t handle,
  64. bef_ai_dynamic_action_param_type type,
  65. float value
  66. );
  67. BEF_SDK_API bef_effect_result_t
  68. bef_effect_ai_dynamic_action_load_model(
  69. bef_effect_handle_t handle,
  70. bef_ai_dynamic_action_model_type type,
  71. const char *model_path
  72. );
  73. BEF_SDK_API bef_effect_result_t
  74. bef_effect_ai_dynamic_action_detect(
  75. bef_effect_handle_t handle,
  76. const unsigned char *image,
  77. bef_ai_pixel_format pixel_format,
  78. int image_width,
  79. int image_height,
  80. int image_stride,
  81. bef_ai_rotate_type orientation,
  82. unsigned long long detect_config,
  83. int delay_framecount,
  84. bef_ai_dynamic_action_result *result,
  85. bef_ai_dynamic_action_sk *sk_result
  86. );
  87. BEF_SDK_API bef_effect_result_t
  88. bef_effect_ai_dynamic_action_release(
  89. bef_effect_handle_t handle
  90. );
  91. /**
  92. * @brief 通用物体检测授权
  93. * @param [in] handle Created hand detect handle
  94. * 已创建的人手检测句柄
  95. * @param [in] license 授权文件字符串
  96. * @param [in] length 授权文件字符串长度
  97. * @return If succeed return BEF_RESULT_SUC, other value please refer bef_effect_ai_public_public_define.h
  98. * 成功返回 BEF_RESULT_SUC, 授权码非法返回 BEF_RESULT_INVALID_LICENSE ,其它失败返回相应错误码, 具体请参考 bef_effect_ai_public_public_define.h
  99. */
  100. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  101. BEF_SDK_API bef_effect_result_t bef_effect_ai_dynamic_action_check_license(JNIEnv* env, jobject context,
  102. bef_effect_handle_t handle, const char *licensePath);
  103. #else
  104. #ifdef __APPLE__
  105. BEF_SDK_API bef_effect_result_t bef_effect_ai_dynamic_action_check_license(bef_effect_handle_t handle,
  106. const char *licensePath);
  107. #endif
  108. #endif
  109. #endif //ANDROIDDEMO_BEF_EFFECT_AI_DYNAMIC_ACTION_H