bef_effect_ai_3d_skeleton.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #ifndef BEF_EFFECT_AI_3D_SKELETON_H
  2. #define BEF_EFFECT_AI_3D_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. typedef unsigned long long bef_ai_3d_skeleton_handle;
  8. #define AI_3D_SKELETON_JOINT_NUM 24 // 身体3D关键点个数
  9. #define AI_3D_SKELETON_SHAPE_COEFF_DIM 10 // 身体shape系数的维数
  10. #define AI_3D_SKELETON_ONE_HAND_JOINT_NUM 21 // 单个手3D关键点个数
  11. #define AI_3D_SKELETON_EXTENDED_JOINT_NUM 64 // 身体+双手3D关键点个数
  12. #define AI_3D_SKELETON_MAX_TARGET_NUM 5 // 所允许的最多目标个数
  13. #define AI_3D_SKELETON_INPUT_KEYPOINT2D_NUM 18 // 输入的2D关键点个数
  14. #define AI_3D_SKELETON_HEATMAP_KEYPOINT_NUM 27
  15. /**
  16. * @brief 模型参数类型
  17. *bef_ai_3d_skeleton_WHOLEBODY: 0 upper body; 1 whole body
  18. */
  19. typedef enum bef_ai_3d_skeleton_param_type {
  20. bef_ai_3d_skeleton_WHOLEBODY = 0, ///< TODO: 根据实际情况修改
  21. bef_ai_3d_skeleton_WITHHANDS = 1,
  22. bef_ai_3d_skeleton_MAXTARGETNUM = 2,
  23. bef_ai_3d_skeleton_TARGETSPEFRAME = 3,
  24. bef_ai_3d_skeleton_WRISTSCORETHRES = 4,
  25. bef_ai_3d_skeleton_HSWRISTSCORETHRES = 5,
  26. bef_ai_3d_skeleton_CHECKROOTINVERSE = 6,
  27. bef_ai_3d_skeleton_TASKPERTICK = 7,
  28. bef_ai_3d_skeleton_SMOOTHWINSIZE = 8,
  29. bef_ai_3d_skeleton_SMOOTHORIGINSIGMAXY = 9,
  30. bef_ai_3d_skeleton_SMOOTHORIGINSIGMAZ = 10,
  31. bef_ai_3d_skeleton_WITHWRISTOFFSET = 11,
  32. bef_ai_3d_skeleton_HANDPROBTHRES = 12,
  33. bef_ai_3d_skeleton_CHECKWRISTROT = 13,
  34. bef_ai_3d_skeleton_SMOOTHSIGMABETAS = 14,
  35. bef_ai_3d_skeleton_FITTINGENABLE = 15,
  36. bef_ai_3d_skeleton_FITTINGROOTENABLE = 16
  37. } bef_ai_3d_skeleton_param_type;
  38. typedef struct bef_ai_skeleton_3d_args{
  39. const unsigned char *image;
  40. bef_ai_pixel_format pixel_format;
  41. int image_width;
  42. int image_height;
  43. int image_stride;
  44. bef_ai_rotate_type rotation;
  45. float points2d[AI_3D_SKELETON_MAX_TARGET_NUM*AI_3D_SKELETON_INPUT_KEYPOINT2D_NUM*2]; // 2D关键点位置
  46. int point_valid[AI_3D_SKELETON_MAX_TARGET_NUM*AI_3D_SKELETON_INPUT_KEYPOINT2D_NUM]; // 2D关键点是否有效
  47. int keypoint_num; // 2D关键点个数
  48. int target_num; // 目标个数
  49. }bef_ai_skeleton_3d_args;
  50. /**
  51. * @brief 封装Avatar3D单个目标信息的结构体
  52. *
  53. */
  54. typedef struct bef_ai_skeleton3d_target {
  55. float quaternion[AI_3D_SKELETON_EXTENDED_JOINT_NUM*4]; // 3D关键点四元数
  56. float betas[10]; // blendshape系数
  57. float root[3]; // 根3D关键点在相机坐标下的位置
  58. float joints[AI_3D_SKELETON_EXTENDED_JOINT_NUM*3]; // 3D关键点在相机坐标下的位置
  59. float scores[AI_3D_SKELETON_EXTENDED_JOINT_NUM]; // 3D关键点的置信度,仅提供(L-shoulder, R-shoulder, L-elbow, R-elbow, L-wrist, R-wrist, L-knee, R-knee, L-ankle, R-ankle)10个3D关键点的置信度,其它点为默认值0
  60. float joint_valid[AI_3D_SKELETON_EXTENDED_JOINT_NUM]; // 关键点是否有效, whole_body下全为1, 非whole_body下半身3D关键点为0
  61. float heatmap_kpts_2d[AI_3D_SKELETON_HEATMAP_KEYPOINT_NUM*2];
  62. float box[4]; // 输入网络的人体框
  63. int joint_num; // 3D关键点个数
  64. int tracking_id; // 目标id
  65. int new_target; // 是否是新目标
  66. }bef_ai_skeleton3d_target;
  67. /**
  68. * @brief 封装预测接口的返回值
  69. *
  70. * @note 不同的算法,可以在这里添加自己的自定义数据
  71. */
  72. typedef struct bef_ai_skeleton3d_ret {
  73. bef_ai_skeleton3d_target targets[AI_3D_SKELETON_MAX_TARGET_NUM]; // 目标列表
  74. int target_num; // 目标个数
  75. float focal_length; // 摄像机焦距
  76. int tracking; // 下一帧是tracking模式还是detect模式,detect模式下需要输入人体2D关键点坐标得到人体bbox,tracking模式下通过前一帧的3D关键点结果计算人体bbox
  77. }bef_ai_skeleton3d_ret;
  78. /**
  79. * @brief 创建3d骨骼的句柄
  80. * @param [in] model_path 模型文件路径
  81. * @param [out] handle Created skeleton handle
  82. * 创建的3d骨骼句柄
  83. * @return If succeed return BEF_RESULT_SUC, other value please see bef_effect_ai_public_define.h
  84. * 成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
  85. */
  86. BEF_SDK_API bef_effect_result_t
  87. bef_effect_ai_3d_skeleton_create(bef_ai_3d_skeleton_handle *handle);
  88. BEF_SDK_API bef_effect_result_t
  89. bef_effect_ai_3d_skeleton_load_model(bef_ai_3d_skeleton_handle handle, const char* modelPath);
  90. BEF_SDK_API bef_effect_result_t
  91. bef_effect_ai_3d_skeleton_set_param(bef_ai_3d_skeleton_handle handle, bef_ai_3d_skeleton_param_type type, float value);
  92. BEF_SDK_API bef_effect_result_t
  93. bef_effect_ai_3d_skeleton_detect(bef_ai_3d_skeleton_handle handle, bef_ai_skeleton_3d_args* args, bef_ai_skeleton3d_ret* ret);
  94. BEF_SDK_API void
  95. bef_effect_ai_3d_skeleton_release(bef_ai_3d_skeleton_handle handle);
  96. /**
  97. * @brief 3d人体关键点授权
  98. * @param [in] handle Created skeleton detect handle
  99. * 已创建的骨骼检测句柄
  100. * @param [in] license 授权文件字符串
  101. * @param [in] length 授权文件字符串长度
  102. * @return If succeed return BEF_RESULT_SUC, other value please refer bef_effect_ai_public_define.h
  103. * 成功返回 BEF_RESULT_SUC, 授权码非法返回 BEF_RESULT_INVALID_LICENSE ,其它失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
  104. */
  105. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  106. BEF_SDK_API bef_effect_result_t bef_effect_ai_3d_skeleton_check_license(JNIEnv* env, jobject context, bef_ai_3d_skeleton_handle handle, const char *licensePath);
  107. #else
  108. #ifdef __APPLE__
  109. BEF_SDK_API bef_effect_result_t bef_effect_ai_3d_skeleton_check_license(bef_ai_3d_skeleton_handle handle, const char *licensePath);
  110. #endif
  111. #endif
  112. BEF_SDK_API bef_effect_result_t
  113. bef_effect_ai_3d_skeleton_check_online_license(bef_ai_3d_skeleton_handle handle, const char *licensePath);
  114. #endif