bef_effect_ai_bach_skeleton.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #ifndef BEF_EFFECT_AI_BACH_SKELETON_H
  2. #define BEF_EFFECT_AI_BACH_SKELETON_H
  3. #include "bef_effect_ai_public_define.h"
  4. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  5. #include<jni.h>
  6. #endif
  7. #define BEF_AI_MAX_BACH_SKELETON_POINT_NUM 63
  8. #define BEF_AI_MAX_BACH_SKELETON_NUM 2
  9. typedef struct bef_ai_bach_skeleton_point_info_st {
  10. float x; // 对应 cols, 范围在 [0, width] 之间
  11. float y; // 对应 rows, 范围在 [0, height] 之间
  12. bool is_detect; // 如果该值为 0, 则 x,y 无意义
  13. float score; // 对应点的分数
  14. } bef_ai_bach_skeleton_point_info;
  15. typedef struct bef_ai_bach_skeleton_info_st {
  16. int id;
  17. int orientation;
  18. bef_ai_bach_skeleton_point_info keyPointInfos[BEF_AI_MAX_BACH_SKELETON_POINT_NUM]; // 检测到的骨骼信息
  19. bef_ai_rect skeletonRect; // 骨骼rect
  20. } bef_ai_bach_skeleton_info;
  21. /**
  22. * @brief 模型参数类型
  23. *
  24. */
  25. typedef enum {
  26. BEF_AI_BACH_SKELETON_BODY_MAX_COUNT = 0, // 最大可检测的人体数量(最多为5), int。
  27. BEF_AI_BACH_SKELETON_FORCE_DETECT = 1, // 设置跟踪模式,int。
  28. // 0: 非强制检测(跟踪模式,默认值)
  29. // 1: 强制每帧检测
  30. BEF_AI_BACH_SKELETON_IMAGE_MODE = 2, // 设置检测模式
  31. // 0: 视频模式(检测+跟踪,默认值)
  32. // 1:图片模式(无跟踪)
  33. } bef_ai_bach_skeleton_param_type;
  34. bef_effect_result_t BachSkeleton_ReleaseHandle(bef_effect_handle_t handle);
  35. /**
  36. * @brief 创建骨骼的句柄
  37. * @param [in] model_path 模型文件路径
  38. * @param [out] handle Created skeleton handle
  39. * 创建的骨骼句柄
  40. * @return If succeed return BEF_RESULT_SUC, other value please see bef_effect_ai_public_define.h
  41. * 成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
  42. */
  43. BEF_SDK_API bef_effect_result_t
  44. bef_effect_ai_bach_skeleton_create(bef_effect_handle_t *handle);
  45. BEF_SDK_API
  46. bef_effect_result_t bef_effect_ai_bach_skeleton_init(bef_effect_handle_t handle, const char *modelPath);
  47. /**
  48. * @brief 人体关键点检测
  49. * @param [in] handle Created skeleton handle
  50. * 已创建的骨骼句柄
  51. * @param [in] image Image base address
  52. * 输入图片的数据指针
  53. * @param [in] pixel_format Pixel format of input image
  54. * 输入图片的格式
  55. * @param [in] image_width Image width
  56. * 输入图像的宽度 (以像素为单位)
  57. * @param [in] image_height Image height
  58. * 输入图像的高度 (以像素为单位)
  59. * @param [in] image_stride Image stride in each row
  60. * 输入图像每一行的步长 (以像素为单位)
  61. * @param [in] orientation Image orientation
  62. * 输入图像的转向,具体请参考 bef_effect_ai_public_define.h 中的 bef_rotate_type
  63. * @param [in, out] skeleton_info_num 不可为 NULL, 如果传入*skeleton_info为NULL,传入数据无意义,会返回检测的骨骼数量
  64. * 如果*skeleton_info不为NULL,表示skeleton_info的长度,
  65. * 如果 skeleton_info_num 大于 *skeleton_info长度,则 返回*skeleton_info长度
  66. * @param [in, out] bach_skeleton_info skeleton_info不可为nullptr,如果传入*skeleton_info为NULL,则内部会分配内存,需要调用者使用delete[] (*skeleton_info)释放
  67. * 如果*skeleton_info不为NULL,则长度为*skeleton_info_num,
  68. * 会根据检测结果最多填充*skeleton_info_num个骨骼数据
  69. * @return If succeed return BEF_RESULT_SUC, other value please see bef_effect_ai_public_define.h
  70. * 成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
  71. */
  72. BEF_SDK_API bef_effect_result_t
  73. bef_effect_ai_bach_skeleton_detect(
  74. bef_effect_handle_t handle,
  75. const unsigned char *image,
  76. bef_ai_pixel_format pixel_format,
  77. int image_width,
  78. int image_height,
  79. int image_stride,
  80. bef_ai_rotate_type orientation,
  81. int *skeleton_bach_info_num,
  82. bef_ai_bach_skeleton_info **bach_skeleton_info
  83. );
  84. /**
  85. * @brief 检测骨骼个数, 最大数设置为 BEF_MAX_SKELETON_NUM 为 2
  86. * @param [in] handle Created skeleton handle
  87. * 已创建的骨骼句柄
  88. * @param [in] max_skeleton_num 设置检测最大g骨骼数 range in [1, 2]
  89. * @return If succeed return BEF_RESULT_SUC, other value please refer bef_effect_ai_public_define.h
  90. * 成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
  91. */
  92. BEF_SDK_API
  93. bef_effect_result_t bef_effect_ai_bach_skeleton_set_paramI(bef_effect_handle_t handle, bef_ai_bach_skeleton_param_type type, int value);
  94. /**
  95. * @param [in] handle Destroy the created skeleton handle
  96. * 销毁创建的骨骼句柄
  97. */
  98. BEF_SDK_API
  99. bef_effect_result_t bef_effect_ai_bach_skeleton_release(bef_effect_handle_t handle);
  100. /**
  101. * @brief 人体关键点授权
  102. * @param [in] handle Created skeleton detect handle
  103. * 已创建的骨骼检测句柄
  104. * @param [in] license 授权文件字符串
  105. * @param [in] length 授权文件字符串长度
  106. * @return If succeed return BEF_RESULT_SUC, other value please refer bef_effect_ai_public_define.h
  107. * 成功返回 BEF_RESULT_SUC, 授权码非法返回 BEF_RESULT_INVALID_LICENSE ,其它失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
  108. */
  109. BEF_SDK_API
  110. bef_effect_result_t bef_effect_ai_bach_skeleton_check_license(bef_effect_handle_t handle, const char *licensePath);
  111. BEF_SDK_API
  112. bef_effect_result_t bef_effect_ai_bach_skeleton_check_online_license(bef_effect_handle_t handle, const char *licensePath);
  113. #endif // BEF_EFFECT_AI_BACH_SKELETON_H