Avatar3d算法可以驱动虚拟形象/人物,进行人体贴纸挂载等,在短视频/拍摄等场景可以实现比较新颖的特效效果。
此为版本4.4.3新增算法。
支持平台 | Android、iOS |
---|---|
支持输入格式 | RGBA8888、BGRA8888、RGB888、BGR888 |
内存占用 | <23M (测试设备OPPO R11) |
检测速度 | <37ms(测试设备OPPO R11) |
人体关键点位图
详细接口说明查看头文件:bef_effect_ai_3d_skeleton.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_3d_skeleton_create(bef_ai_3d_skeleton_handle *handle);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_ai_3d_skeleton_handle* | 创建的avatar3d算法句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_3d_skeleton_load_model(bef_ai_3d_skeleton_handle handle, const char* modelPath);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_ai_3d_skeleton_handle | avatar3d算法句柄 |
modelPath | const char* | avatar3d算法模型路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
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);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_ai_3d_skeleton_handle | avatar3d算法句柄 |
type | bef_ai_3d_skeleton_param_type | avatar3d算法参数类型 |
value | float | avatar3d算法参数值 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
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;
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_ai_3d_skeleton_handle | avatar3d算法句柄 |
args | bef_ai_skeleton_3d_args* | 算法输入参数 |
ret | bef_ai_skeleton3d_ret* | 算法返回值 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
// 离线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);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_ai_3d_skeleton_handle | avatar3d算法句柄 |
licensePath | const char * | 授权文件路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API void bef_effect_ai_3d_skeleton_release(bef_ai_3d_skeleton_handle handle);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_ai_3d_skeleton_handle | avatar3d算法句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
接口说明
详细接口说明查看文件:com.bytedance.labcv.effectsdk.Skeleton3dDetect.java
public int init(Context context, String licensePath, boolean onlineLicense, String modelPath);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
context | Context | 安卓context |
licensePath | String | 授权文件路径 |
onlineLicense | boolean | 配置在线授权或离线授权 |
modelPath | String | avatar3d算法模型路径 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int setParam(int type, float value);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
type | int | 参数设置类型 |
value | float | 参数设置值 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int detectSkeleton3d(InputParam param);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
param | InputParam | 算法输入参数 |
备注
关于InputParam可参考com.effectsar.labcv.effectsdk.Skeleton3dDetect.java,并且其定义与C接口bef_effect_ai_3d_skeleton保持一致。
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public void release()
答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK
错误码请参考错误码表