bef_effect_ai_hand.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #ifndef _BEF_EFFECT_HAND_DETECT_AI_H_
  2. #define _BEF_EFFECT_HAND_DETECT_AI_H_
  3. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  4. #if BEF_EFFECT_ANDROID_WITH_JNI
  5. #include<jni.h>
  6. #endif
  7. #endif
  8. #include "bef_effect_ai_public_define.h"
  9. //bef_effect_public_hand_define
  10. #define BEF_TT_HAND_GESTURE_HEART_A 0
  11. #define BEF_TT_HAND_GESTURE_HEART_B 1
  12. #define BEF_TT_HAND_GESTURE_HEART_C 2
  13. #define BEF_TT_HAND_GESTURE_HEART_D 3
  14. #define BEF_TT_HAND_GESTURE_OK 4
  15. #define BEF_TT_HAND_GESTURE_HAND_OPEN 5
  16. #define BEF_TT_HAND_GESTURE_THUMB_UP 6
  17. #define BEF_TT_HAND_GESTURE_THUMB_DOWN 7
  18. #define BEF_TT_HAND_GESTURE_ROCK 8
  19. #define BEF_TT_HAND_GESTURE_NAMASTE 9
  20. #define BEF_TT_HAND_GESTURE_PLAM_UP 10
  21. #define BEF_TT_HAND_GESTURE_FIST 11
  22. #define BEF_TT_HAND_GESTURE_INDEX_FINGER_UP 12
  23. #define BEF_TT_HAND_GESTURE_DOUBLE_FINGER_UP 13
  24. #define BEF_TT_HAND_GESTURE_VICTORY 14
  25. #define BEF_TT_HAND_GESTURE_BIG_V 15
  26. #define BEF_TT_HAND_GESTURE_PHONECALL 16
  27. #define BEF_TT_HAND_GESTURE_BEG 17
  28. #define BEF_TT_HAND_GESTURE_THANKS 18
  29. #define BEF_TT_HAND_GESTURE_UNKNOWN 19
  30. #define BEF_TT_HAND_GESTURE_CABBAGE 20
  31. #define BEF_TT_HAND_GESTURE_THREE 21
  32. #define BEF_TT_HAND_GESTURE_FOUR 22
  33. #define BEF_TT_HAND_GESTURE_PISTOL 23
  34. #define BEF_TT_HAND_GESTURE_ROCK2 24
  35. #define BEF_TT_HAND_GESTURE_SWEAR 25
  36. #define BEF_TT_HAND_GESTURE_HOLDFACE 26
  37. #define BEF_TT_HAND_GESTURE_SALUTE 27
  38. #define BEF_TT_HAND_GESTURE_SPREAD 28
  39. #define BEF_TT_HAND_GESTURE_PRAY 29
  40. #define BEF_TT_HAND_GESTURE_QIGONG 30
  41. #define BEF_TT_HAND_GESTURE_SLIDE 31
  42. #define BEF_TT_HAND_GESTURE_PALM_DOWN 32
  43. #define BEF_TT_HAND_GESTURE_PISTOL2 33
  44. #define BEF_TT_HAND_GESTURE_NARUTO1 34
  45. #define BEF_TT_HAND_GESTURE_NARUTO2 35
  46. #define BEF_TT_HAND_GESTURE_NARUTO3 36
  47. #define BEF_TT_HAND_GESTURE_NARUTO4 37
  48. #define BEF_TT_HAND_GESTURE_NARUTO5 38
  49. #define BEF_TT_HAND_GESTURE_NARUTO7 39
  50. #define BEF_TT_HAND_GESTURE_NARUTO8 40
  51. #define BEF_TT_HAND_GESTURE_NARUTO9 41
  52. #define BEF_TT_HAND_GESTURE_NARUTO10 42
  53. #define BEF_TT_HAND_GESTURE_NARUTO11 43
  54. #define BEF_TT_HAND_GESTURE_NARUTO12 44
  55. #define BEF_TT_HAND_GESTURE_SPIDERMAN 45
  56. #define BEF_TT_HAND_GESTURE_AVENGERS 46
  57. #define BEF_TT_HAND_GESTURE_RAISE 47
  58. // 基于序列的动作
  59. #define BEF_HAND_SEQ_ACTION_PUNCHING 1
  60. #define BEF_HAND_SEQ_ACTION_CLAPPING 2
  61. #define BEF_MAX_HAND_NUM 2
  62. #define BEF_HAND_KEY_POINT_NUM 22
  63. #define BEF_HAND_KEY_POINT_NUM_EXTENSION 2
  64. // 静态手势分类下标数组大小
  65. #define BEF_TT_HAND_GETURES_STATIC 48
  66. // 动态手势类型下标数组大小
  67. #define BEF_TT_HAND_GETURES_SEQ 3
  68. typedef struct bef_ai_hand_st {
  69. int id; ///< 手的id
  70. bef_ai_rect rect; ///< 手部矩形框
  71. unsigned int action; ///< 手部动作 bef_hand_types[]的index [0--20)
  72. float rot_angle; ///< 手部旋转角度, 仅手张开是比较准确
  73. float score; ///< 手部动作置信度
  74. float rot_angle_bothhand; ///< 双手夹角
  75. // 手部关键点, 如果没有检测到,则置为0
  76. bef_ai_tt_key_point key_points[BEF_HAND_KEY_POINT_NUM];
  77. // 手部扩展点,如果没有检测到,则置为0
  78. bef_ai_tt_key_point key_points_extension[BEF_HAND_KEY_POINT_NUM_EXTENSION];
  79. unsigned int seq_action; // 0 如果没有序列动作设置为0, 其他为有效值
  80. unsigned char *segment; ///< 手掌分割mask 取值范围 0~255 默认: nullptr
  81. int segment_width; ///< 手掌分割宽 默认: 0
  82. int segment_height; ///< 手掌分割高 默认: 0
  83. } bef_ai_hand, *ptr_bef_ai_hand;
  84. /// @brief 检测结果
  85. typedef struct bef_ai_hand_info_st {
  86. bef_ai_hand p_hands[BEF_MAX_HAND_NUM]; ///< 检测到的手部信息
  87. int hand_count; ///< 检测到的手部数目,p_hands 数组中,只有hand_count个结果是有效的;
  88. } bef_ai_hand_info, *ptr_bef_ai_hand_info;
  89. typedef void *bef_ai_hand_sdk_handle;
  90. typedef enum {
  91. BEF_HAND_REFRESH_FRAME_INTERVAL = 1, // 设置检测刷新帧数, 暂不支持
  92. BEF_HAND_MAX_HAND_NUM = 2, // 设置最多的手的个数,默认为1,目前最多设置为2;
  93. BEF_HAND_DETECT_MIN_SIDE = 3, // 设置检测的最短边长度, 默认192
  94. BEF_HAND_CLS_SMOOTH_FACTOR = 4, // 设置分类平滑参数,默认0.7, 数值越大分类越稳定
  95. BEF_HAND_USE_ACTION_SMOOTH = 5, // 设置是否使用类别平滑,默认1,使用类别平滑;不使用平滑,设置为0
  96. BEF_HAND_ALGO_LOW_POWER_MODE = 6, // 降级模式,默认走高级的版本。如果
  97. BEF_HAND_ALGO_AUTO_MODE = 7, // 降级模式,默认走高级的版本。如果
  98. // 如果设置为 HAND_ALGO_AUTO_MODE 模式,则可以以下参数来设置算法降级的阈值
  99. BEF_HAND_ALGO_TIME_ELAPSED_THRESHOLD = 8, // 算法耗时阈值,默认为 20ms
  100. BEF_HAND_ALGO_MAX_TEST_FRAME = 9, // 设置运行时测试算法的执行的次数, 默认是 150 次
  101. BEF_HAND_IS_USE_DOUBLE_GESTURE = 10, // 设置是否使用双手手势, 默认为true
  102. BEF_HNAD_ENLARGE_FACTOR_REG = 11, // 设置回归模型的输入初始框的放大比列
  103. BEF_HAND_NARUTO_GESTURE = 12, // 设置支持火影忍者手势,默认为false,如果开启,则支持包括火影在内的45类手势识别
  104. } bef_ai_hand_param_type;
  105. typedef enum {
  106. BEF_AI_HAND_MODEL_DETECT = 0x0001, // 检测手,必须加载
  107. BEF_AI_HAND_MODEL_BOX_REG = 0x0002, // 检测手框,必须加载
  108. BEF_AI_HAND_MODEL_GESTURE_CLS = 0x0004, // 手势分类,可选
  109. BEF_AI_HAND_MODEL_KEY_POINT = 0x0008, // 手关键点,可选
  110. BEF_AI_HAND_MODEL_SEGMENT = 0x0010, // 可见性点,可选
  111. BEF_AI_HAND_MODEL_KEY_POINT_3D = 0x0020, // 3D关键点,可选
  112. BEF_AI_HAND_MODEL_LEFTRIGHT = 0x0040, // 左右手分类,可选
  113. BEF_AI_HAND_MODEL_RING = 0x0080, // 手势融合模型,可选
  114. } bef_ai_hand_model_type;
  115. /**
  116. * @brief 创建人脸检测的名柄
  117. * @param [out] handle Created hand detect handle
  118. * 创建的人手检测句柄
  119. * @param [unsigned int] 目前无效
  120. * @return If succeed return BEF_RESULT_SUC, other value please see bef_effect_ai_public_define.h
  121. * 成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_public_define.h
  122. */
  123. BEF_SDK_API bef_effect_result_t
  124. bef_effect_ai_hand_detect_create(
  125. bef_ai_hand_sdk_handle *handle,
  126. unsigned int config
  127. );
  128. /**
  129. * @brief 传入检测图片
  130. * @param [in] handle Created hand detect handle
  131. * 已创建的人手检测句柄
  132. * @param [in] image Image base address
  133. * 输入图片的数据指针
  134. * @param [in] pixel_format Pixel format of input image
  135. * 输入图片的格式
  136. * @param [in] image_width Image width
  137. * 输入图像的宽度 (以像素为单位)
  138. * @param [in] image_height Image height
  139. * 输入图像的高度 (以像素为单位)
  140. * @param [in] image_stride Image stride in each row
  141. * 输入图像每一行的步长 (以像素为单位)
  142. * @param [in] orientation Image orientation
  143. * 输入图像的转向,具体请参考 bef_effect_ai_public_public_define.h 中的 bef_ai_rotate_type
  144. * @param [in] detection_config 请求检测的模块,为 hand_model_type 的按位与操作,目前只有HAND_MODEL_GESTURE_CLS 和 HAND_MODEL_KEY_POINT 是可选的
  145. * @return If succeed return BEF_RESULT_SUC, other value please see bef_effect_ai_public_public_define.h
  146. * 成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_public_define.h
  147. */
  148. BEF_SDK_API bef_effect_result_t
  149. bef_effect_ai_hand_detect(
  150. bef_ai_hand_sdk_handle handle,
  151. const unsigned char *image,
  152. bef_ai_pixel_format pixel_format,
  153. int image_width,
  154. int image_height,
  155. int image_stride,
  156. bef_ai_rotate_type orientation,
  157. unsigned long long detection_config,
  158. bef_ai_hand_info *p_hand_info,
  159. int delayframecount
  160. );
  161. BEF_SDK_API bef_effect_result_t
  162. bef_effect_ai_hand_detect_setmodel(bef_effect_handle_t handle,
  163. bef_ai_hand_model_type type,
  164. const char * strModelPath);
  165. BEF_SDK_API bef_effect_result_t
  166. bef_effect_ai_hand_detect_setparam(bef_effect_handle_t handle,
  167. bef_ai_hand_param_type type,
  168. float value);
  169. /**
  170. * @param [in] handle Destroy the created hand detect handle
  171. * 销毁创建的人手检测句柄
  172. */
  173. BEF_SDK_API void
  174. bef_effect_ai_hand_detect_destroy(
  175. bef_ai_hand_sdk_handle handle
  176. );
  177. /**
  178. * @brief 人手检测授权
  179. * @param [in] handle Created hand detect handle
  180. * 已创建的人手检测句柄
  181. * @param [in] license 授权文件字符串
  182. * @param [in] length 授权文件字符串长度
  183. * @return If succeed return BEF_RESULT_SUC, other value please refer bef_effect_ai_public_public_define.h
  184. * 成功返回 BEF_RESULT_SUC, 授权码非法返回 BEF_RESULT_INVALID_LICENSE ,其它失败返回相应错误码, 具体请参考 bef_effect_ai_public_public_define.h
  185. */
  186. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  187. #if BEF_EFFECT_ANDROID_WITH_JNI
  188. BEF_SDK_API bef_effect_result_t bef_effect_ai_hand_check_license(JNIEnv *env, jobject context,
  189. bef_effect_handle_t handle,
  190. const char *licensePath);
  191. #else
  192. BEF_SDK_API bef_effect_result_t bef_effect_ai_hand_check_license(bef_effect_handle_t handle,
  193. const char *licensePath);
  194. #endif
  195. #else
  196. #ifdef __APPLE__
  197. BEF_SDK_API bef_effect_result_t bef_effect_ai_hand_check_license(bef_effect_handle_t handle,
  198. const char *licensePath);
  199. #endif
  200. #endif
  201. BEF_SDK_API bef_effect_result_t
  202. bef_effect_ai_hand_check_online_license(bef_effect_handle_t handle,
  203. const char *licensePath);
  204. #endif // _BEF_EFFECT_FACE_DETECT_H_