You need to enable JavaScript to run this app.
导航
3D肢体(Avatar3d)算法
最近更新时间:2025.03.17 14:05:45首次发布时间:2025.03.17 14:05:45
我的收藏
有用
有用
无用
无用
简介

Avatar3d算法可以驱动虚拟形象/人物,进行人体贴纸挂载等,在短视频/拍摄等场景可以实现比较新颖的特效效果。
此为版本4.4.3新增算法。

技术规格
支持平台Android、iOS
支持输入格式RGBA8888、BGRA8888、RGB888、BGR888
内存占用<23M (测试设备OPPO R11)
检测速度<37ms(测试设备OPPO R11)
人体关键点及平均骨骼说明

人体关键点位图
Image

  • 对于每一帧图像,sdk会输出一个3+24x4维的向量
  • 前3维表示虚拟形象的位移。所在的坐标系为X->右,Y->上,Z->后
  • 后24x4维表示24个关节旋转四元数,所在坐标系为X->左,Y->上,Z->前。
C接口说明

详细接口说明查看头文件:bef_effect_ai_3d_skeleton.h

1.创建avatar3d算法句柄

BEF_SDK_API bef_effect_result_t
bef_effect_ai_3d_skeleton_create(bef_ai_3d_skeleton_handle *handle);

参数说明

参数名参数类型参数说明
handlebef_ai_3d_skeleton_handle*创建的avatar3d算法句柄

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

2.加载avatar3d算法模型

BEF_SDK_API bef_effect_result_t
bef_effect_ai_3d_skeleton_load_model(bef_ai_3d_skeleton_handle handle, const char* modelPath);

参数说明

参数名参数类型参数说明
handlebef_ai_3d_skeleton_handleavatar3d算法句柄
modelPathconst char*avatar3d算法模型路径

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

3.设置avatar3d算法内置参数

BEF_SDK_API bef_effect_result_t
bef_effect_ai_3d_skeleton_set_param(bef_ai_3d_skeleton_handle handle, bef_ai_3d_skeleton_param_type type, float value);

参数说明

参数名参数类型参数说明
handlebef_ai_3d_skeleton_handleavatar3d算法句柄
typebef_ai_3d_skeleton_param_typeavatar3d算法参数类型
valuefloatavatar3d算法参数值

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

4.avatar3d算法检测

BEF_SDK_API bef_effect_result_t
bef_effect_ai_3d_skeleton_detect(bef_ai_3d_skeleton_handle handle, bef_ai_skeleton_3d_args* args, bef_ai_skeleton3d_ret* ret);

typedef struct bef_ai_skeleton_3d_args{
    const unsigned char *image;
    bef_ai_pixel_format pixel_format;
    int image_width;
    int image_height;
    int image_stride;
    bef_ai_rotate_type rotation;
    float points2d[AI_3D_SKELETON_MAX_TARGET_NUM*AI_3D_SKELETON_INPUT_KEYPOINT2D_NUM*2]; // 2D关键点位置
    int point_valid[AI_3D_SKELETON_MAX_TARGET_NUM*AI_3D_SKELETON_INPUT_KEYPOINT2D_NUM]; // 2D关键点是否有效
    int keypoint_num; // 2D关键点个数
    int target_num; // 目标个数
}bef_ai_skeleton_3d_args;

typedef struct bef_ai_skeleton3d_ret {
    bef_ai_skeleton3d_target targets[AI_3D_SKELETON_MAX_TARGET_NUM]; // 目标列表
    int target_num; // 目标个数
    float focal_length; // 摄像机焦距
    int tracking; // 下一帧是tracking模式还是detect模式,detect模式下需要输入人体2D关键点坐标得到人体bbox,tracking模式下通过前一帧的3D关键点结果计算人体bbox
}bef_ai_skeleton3d_ret;

参数说明

参数名参数类型参数说明
handlebef_ai_3d_skeleton_handleavatar3d算法句柄
argsbef_ai_skeleton_3d_args*算法输入参数
retbef_ai_skeleton3d_ret*算法返回值

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

5.avatar3d算法授权

// 离线license检测方式
BEF_SDK_API bef_effect_result_t bef_effect_ai_3d_skeleton_check_license(bef_ai_3d_skeleton_handle handle, const char *licensePath);

// 在线license检测方式
BEF_SDK_API bef_effect_result_t
bef_effect_ai_3d_skeleton_check_online_license(bef_ai_3d_skeleton_handle handle, const char *licensePath);

参数说明

参数名参数类型参数说明
handlebef_ai_3d_skeleton_handleavatar3d算法句柄
licensePathconst char *授权文件路径

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

6.avatar3d算法释放

BEF_SDK_API void
bef_effect_ai_3d_skeleton_release(bef_ai_3d_skeleton_handle handle);

参数说明

参数名参数类型参数说明
handlebef_ai_3d_skeleton_handleavatar3d算法句柄

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

Java 接口说明

接口说明
详细接口说明查看文件:com.bytedance.labcv.effectsdk.Skeleton3dDetect.java

1.初始化avatar3d句柄

public int init(Context context, String licensePath, boolean onlineLicense,  String modelPath);

参数说明

参数名参数类型参数说明
contextContext安卓context
licensePathString授权文件路径
onlineLicenseboolean配置在线授权或离线授权
modelPathStringavatar3d算法模型路径

返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码

2.avatar3d算法参数设置

public int setParam(int type, float value);

参数说明

参数名参数类型参数说明
typeint参数设置类型
valuefloat参数设置值

返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码

3.avatar3d算法处理

public int detectSkeleton3d(InputParam param);

参数说明

参数名参数类型参数说明
paramInputParam算法输入参数

备注
关于InputParam可参考com.effectsar.labcv.effectsdk.Skeleton3dDetect.java,并且其定义与C接口bef_effect_ai_3d_skeleton保持一致。
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码

4.释放avatar3d句柄

public void release()
FAQ

1.如果出现任何异常,请查看是否有以下类型日志

答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK

2.如果有其他比如骨骼顶点变换问题,请联系对应的技术支持

错误码

错误码请参考错误码表