特效SDK针对视频或者图片进行特效处理,包括美颜、美形、美体、美妆、滤镜和各种有趣的贴纸,主要应用在短视频、直播、图片修图等场景。
| 项目 | 具体规格 |
|---|---|
| 支持平台 | Android、iOS、Windows、Mac、Linux |
| 支持输入 | Texture2D、YUV、RGBA |
支持CPU架构 | 手机端支持(armeabi-v7,arm64-v8a),PC端支持(x86) |
| 支持角度 | yaw ≤ ±90° pitch ≤ ±90° |
| 支持最大人脸数 | 10 |
| 支持距离 | 视频模式,人脸占屏幕短边1/8以上;图片模式,人脸占屏幕短边1/16以上 |
| 人脸检测速度 | <2ms(测试设备iphone7) |
| 系统版本 | Android 6及以上,iOS 10及以上,Windows 7及以上,Mac 10.11 及以上 支持intel和m系列架构 |
我们的接口支持的输入和输出格式如下表所示:
| 格式 |
|---|
| glTexture2D |
| RGBA8888 |
| BGRA8888(仅支持输入) |
| NV21 |
| NV12 |
| YUV420P |
因为图像特效类算法主要在GPU中完成图像的处理和渲染过程,因此我们建议使用glTexture2D作为输入,从而减少数据在CPU内存和显存中进出导致的时间损耗;如果使用其他格式的数据作为输入,我们在底层使用Shader完成buffer数据向纹理的转换,再执行特效处理,这种方式会增加性能开销。
特效是多个功能的集合, 包括美颜、滤镜、美妆和贴纸等,其相关接口定义在头文件bef_effect_ai_api.h中。特效算法同时支持纹理输入和Buffer数据输入,具体支持的格式参考。 接口说明
BEF_SDK_API bef_effect_result_t bef_effect_ai_create( bef_effect_handle_t *handle );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t* | 创建特效句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
#ifdef __ANDROID__ BEF_SDK_API bef_effect_result_t bef_effect_ai_check_license( JNIEnv* env, jobject context, bef_effect_handle_t handle, const char *license_path ); #else BEF_SDK_API bef_effect_result_t bef_effect_ai_check_license( bef_effect_handle_t handle, const char *license_path ); #endif
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| env | JNIEnv * | jni环境指针 |
| context | jobject | jni对象 |
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| licensePath | const char * | 授权文件路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
在对特效句柄进行后续调用前,必须对该句柄进行授权码的验证,否则,后续调用都会失败。
BEF_SDK_API bef_effect_result_t bef_effect_ai_init( bef_effect_handle_t handle, int width, int height, const char *strModelDir, const char * deviceName );
初始化特效句柄时,请确保strModelDir是包含我们提供的深度学习模型的 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| width | int | 输入纹理的宽度 |
| height | int | 输入纹理的高度 |
| strModelDir | const char * | 资源文件目录路径 |
| deviceName | const char * | 设备名一般输入空字符串即可"" |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
如果需要使用叠加特效功能(美颜、美形、美体、美妆等),还需要再进行 composer 初始化或者设置 composer 与贴纸共存,使用方式参考 18. 设置叠加特效是否与贴纸共存 19. 初始化 composer。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_width_height( bef_effect_handle_t handle, int width, int height );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| width | int | 纹理的宽度 |
| height | int | 纹理的高度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
设置手机的设备旋转角度,在处理图像数据之前必须设置手机当前的旋转角度。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_orientation( bef_effect_handle_t handle, bef_ai_rotate_type orientation );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| orientation | bef_ai_rotate_type | 旋转角度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
设置美颜(磨皮、锐化)的资源
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_beauty( bef_effect_handle_t handle, const char *strBeautyName );
此接口适用于 2.6 版本及之前设置美颜,在 2.7 版本之后请务必使用 bef_effect_ai_composer_set_nodes 接口设置美颜等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| strBeautyName | const char * | 美颜资源路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_buildin_makeup( bef_effect_handle_t handle, const char* strMakeupName );
此接口适用于 2.6 版本及之前设置美妆,在 2.7 版本之后请务必使用 bef_effect_ai_composer_set_nodes 接口设置美妆等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| strMakeupName | const char * | 美妆资源路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_reshape_face( bef_effect_handle_t handle, const char *strPath );
此接口适用于 2.6 版本及之前设置美形,在 2.7 版本之后请务必使用 bef_effect_ai_composer_set_nodes 接口设置美形等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| strPath | const char * | 塑形资源路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_update_reshape_face( bef_effect_handle_t handle, const float fIntensity );
此接口适用于 2.6 版本及之前设置美形强度,在 2.7 版本之后请务必使用 bef_effect_ai_composer_update_node 接口设置美形强度等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| fIntensity | const float | 塑形强度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_update_reshape_face_intensity( bef_effect_handle_t handle, const float eyeIntensity, const float cheekIntensity );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| eyeIntensity | const float | 大眼强度 |
| cheekIntensity | const float | 瘦脸强度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_switch_color_filter_v2( bef_effect_handle_t handle, const char *leftFilterPath, const char *rightFilterPath, float position );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| leftFilterPath | const char * | 左边资源路径 |
| rightFilterPath | const char * | 右边资源路径 |
| position | float | 分割位置 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_color_filter_v2( bef_effect_handle_t handle, const char *strPath );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| strPath | const char * | 滤镜资源路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_effect( bef_effect_handle_t handle, const char *strPath );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| strPath | const char * | 特效资源路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景(可使用设置贴纸的方式去设置虚拟背景或者绿幕背景的素材包)。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_render_cache_texture( bef_effect_handle_t handle, const char* key, const char* path);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 特效句柄 |
| key | const char* | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| path | const char* | 传入图片绝对路径,SDK 会将其解析成纹理 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_render_cache_texture_with_buffer( bef_effect_handle_t handle, const char* key, bef_ai_image* image);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 特效句柄 |
| key | const char* | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| image | bef_ai_image | 图像数据,包含buffer,width,height,format等信息 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
BEF_SDK_API bef_effect_result_t bef_effect_ai_remove_render_cache_external_texture( bef_effect_handle_t handle, const char* key);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 特效句柄 |
| key | const char* | 虚拟背景的Key,固定为*"BCCustomBackground"* |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
4.7.1新增接口。
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_render_cache_external_texture( bef_effect_handle_t handle, const char* key, int texture, int width, int height);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 特效句柄 |
| key | const char* | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| texture | int | 图像纹理ID |
| width | int | 纹理宽 |
| height | int | 纹理高 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
4.7.1新增接口。
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_render_cache_external_texture_with_rotation( bef_effect_handle_t handle, const char* key, int texture, int width, int height, bef_ai_rotate_type rotation);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 特效句柄 |
| key | const char* | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| texture | int | 图像纹理ID |
| width | int | 纹理宽 |
| height | int | 纹理高 |
| rotation | bef_ai_rotate_type | 旋转角度 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
支持纹理输入的接口
BEF_SDK_API bef_effect_result_t bef_effect_ai_algorithm_texture( bef_effect_handle_t handle, unsigned int textureid_src, double timeStamp );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| textureid_src | unsigned int | 输入纹理 |
| timeStamp | double | 纹理时间戳 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
支持 buffer 输入接口
该接口无法支持并行渲染,如有需要,直接使用 bef_effect_ai_algorithm_texture_with_buffer
BEF_SDK_API bef_effect_result_t bef_effect_ai_algorithm_buffer( bef_effect_handle_t handle, const unsigned char *img_in, bef_ai_pixel_format fmt_in, int image_width, int image_height, int image_stride, double timestamp );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| img_in | const unsigned char * | 输入 buffer |
| fmt_in | bef_ai_pixel_format | 输入 buffer 格式 |
| image_width | int | 输入 buffer 宽 |
| image_height | int | 输入 buffer 高 |
| timestamp | double | 时间戳 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
支持纹理和算法同时输入
本接口可同时传入纹理和 buffer,也可单独传入纹理或 buffer,单独传纹理时,效果与 bef_effect_ai_algorithm_texture 一致。
BEF_SDK_API bef_effect_result_t bef_effect_ai_algorithm_texture_with_buffer(bef_effect_handle_t handle, unsigned int texture, const unsigned char *buffer, bef_ai_pixel_format buffer_format, int buffer_width, int buffer_height, int buffer_stride, double timeStamp);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| textureid_src | unsigned int | 输入纹理 |
| img_in | const unsigned char * | 输入 buffer |
| fmt_in | bef_ai_pixel_format | 输入 buffer 格式 |
| image_width | int | 输入 buffer 宽 |
| image_height | int | 输入 buffer 高 |
| buffer_stride | int | 输入 buffer 步长 |
| timestamp | double | 时间戳 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
支持纹理输入的接口
BEF_SDK_API bef_effect_result_t bef_effect_ai_process_texture( bef_effect_handle_t handle, unsigned int srcTexture, unsigned int dstTexture, double timeStamp );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| srcTexture | unsigned int | 输入纹理 |
| dstTexture | unsigned int | 输出纹理 |
| timeStamp | double | 纹理时间戳 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_intensity( bef_effect_handle_t handle, bef_intensity_type intensityType, float fIntensity );
此接口适用于 2.6 版本及之前设置美颜强度 在 2.7 版本之后请务必使用 bef_effect_ai_composer_update_node 接口设置美颜强度 所有版本设置滤镜强度都使用此接口 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| intensityType | bef_intensity_type | 强度类型 |
| fIntensity | float | 强度 [0.0, 1.0] 如果设为0则不工作 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_composer_set_nodes( bef_effect_handle_t handle, const char *nodePaths[], int nodeNum );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| nodePaths | const char * [] | 特效资源路径的数组 |
| nodeNum | int | 特效资源路径的数组长度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_composer_update_node( bef_effect_handle_t handle, const char *nodePath, const char *nodeTag, float value );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| nodePaths | const char * | 特效资源的路径 |
| nodeTag | const char * | 特效的key |
| value | float | 设置组合特效的单个节点的强度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
说明 本函数早期版本可用,410以上版本该接口无效,叠加情况请使用composer_set_nodes接口。 本函数需要在初始化时设置。
BEF_SDK_API bef_effect_result_t bef_effect_ai_composer_set_mode( bef_effect_handle_t handle, int mode, int orderType);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| mode | int | 模式,0:composer 与贴纸不可共存,1:二者可以共存 |
| orderType | int | 特效与贴纸渲染顺序,暂时不支持 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
说明 在 SDK 中存在两种特效,分别是叠加特效(包括美颜、美形、美体、美妆等)和贴纸(包括贴纸、animoji 等),在叠加特效与贴纸不共存的环境中(是否共存需要通过 bef_effect_ai_composer_set_mode 设置,默认不共存),如果需要使用叠加特效的功能,需要先调用此函数初始化 composer ,而在特效与贴纸共存的环境中,无须调用此函数。
BEF_SDK_API bef_effect_result_t bef_effect_ai_set_composer( bef_effect_handle_t handle, const char *strPath );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| strPath | const char * | composer资源文件路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_get_face_detect_result( bef_effect_handle_t handle, bef_ai_face_info* result);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| result | bef_ai_face_info * | 人脸检测结果指针 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
4.8.1 新增接口
BEF_SDK_API bef_effect_result_t bef_effect_ai_get_face_occlusion_result(bef_effect_handle_t handle, bef_ai_face_occlusion_info* result);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的人脸检测句柄 |
| p_occ_info | bef_ai_face_occlusion_info* | 人脸遮挡结果 |
BEF_SDK_API bef_effect_result_t bef_effect_ai_get_hand_detect_result( bef_effect_handle_t handle, bef_ai_hand_info *result);
参数说明
| 参数名 | 参数说明 | |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| result | bef_ai_hand_info * | 人手检测结果指针 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_get_skeleton_detect_result( bef_effect_handle_t handle, bef_ai_skeleton_result *result);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| result | bef_ai_skeleton_result * | 人体检测结果指针 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
有些贴纸会使用到触摸事件,此时调用此函数将上层捕获到的事件传递给 sdk 以保证贴纸效果正常触发。
BEF_SDK_API bef_effect_result_t bef_effect_ai_process_touch_event(bef_effect_handle_t handle, float x, float y);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| x | float | 触摸点位置,宽高界限以传入的图像宽高为准 |
| y | float | 触摸点位置,宽高界限以传入的图像宽高为准 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
默认关,开启之后 sdk 内部会将算法检测和特效渲染放在不同线程处理,以加速 sdk 处理。
BEF_SDK_API bef_effect_result_t bef_effect_ai_use_pipeline_processor(bef_effect_handle_t handle, bool usePipeline);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| usePipeline | bool | 是否开启并行渲染 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
并行渲染开启后,由于算法检测和特效渲染非线性,为了支持多线程处理,需要避免处理过程中连续帧的纹理 id/buffer 内存为同一个。 当该开关关闭时,表示上层传进来的连续帧纹理 id/buffer 内存为同一个,sdk 则会对传进来的纹理/buffer进行拷贝,以避免互相影响。 当该开关开启时,表示上层对传进来的纹理/buffer做了处理,sdk 不会再进行拷贝。(如上层维护一个纹理数组,循环传入以避免连续帧纹理相同问题,可参考 demo 实现) 默认关闭。
注意:该接口存在兼容问题,已废弃
BEF_SDK_API bef_effect_result_t bef_effect_ai_use_3buffer(bef_effect_handle_t handle, bool use3buffer);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
| use3buffer | bool | 是否使用了多输入 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
并行渲染开启后,由于算法检测和特效渲染非线性,为了支持多线程处理,sdk 内部会保存上一帧的图像。当画面有可能会不连续(如切换相机,暂停等)的时候,可能会出现画面重新开始播放时闪现上一次画面最后一帧的情况,此时可以在画面不连续的时候调用此函数,清空 sdk 内部的缓存。
BEF_SDK_API bef_effect_result_t bef_effect_ai_clean_pipeline_processor_task(bef_effect_handle_t handle)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API void bef_effect_ai_destroy( bef_effect_handle_t handle );
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| handle | bef_effect_handle_t | 已创建的特效句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
4.7.3新增接口。
bool bef_effect_ai_gpu_is_support()
返回值
支持返回true,不支持返回false。
特效是多个功能的集合,目前包括美颜、美形、美体、美妆、滤镜、贴纸、Animoj和AR扫一扫。对应的类文件RenderManager.java。
// 默认初始化方式,打开并行渲染,使用离线授权,gles20版本 public int init(Context context, String modelDir, String licensePath); // 使用离线鉴权方式,外部设置是否开启并行渲染与gles版本 public int init(Context context, String modelDir, String licensePath, boolean usePipeline,int renderApi); // 标准初始化方式 public int init(Context context, String modelDir, String licensePath, boolean usePipeline, boolean onlineLicense,int renderApi); // 设置模型缓存路径 public int init(Context context, String modelDir, String licensePath, String modelCachePath, boolean usePipeline, boolean onlineLicense,int renderApi); // 设置是否将模型放在asset下进行读取 public int init(Context context, String modelDir, String licensePath, boolean usePipeline, boolean onlineLicense, boolean loadModelFromAsset, int renderApi); // 设置模型缓存路径和是否将模型放在asset下进行读取 public int init(Context context, String modelDir, String licensePath, String modelCachePath, boolean usePipeline, boolean onlineLicense, boolean loadModelFromAsset, int renderApi);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| context | Context | 上下文 |
| modelDir | String | 模型文件的根目录,注意不是模型文件的绝对路径,该目录下文件层次和目录名称必须和Demo中提供的完全一致 |
| licensePath | String | 授权文件绝对路径 |
| usePipeline | boolean | 是否开启并行渲染 |
| onlineLicense | boolean | 是否在线授权还是离线授权 |
| renderApi | int | 设置gles版本,0为gles20,1为gles30 |
| modelCachePath | String | 模型缓存路径 |
| loadModelFromAsset | boolean | 是否从asset中读取模型 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public boolean setBeauty(String resourcePath)
此接口适用于 2.6 版本及之前设置美颜,在 2.7 版本之后请务必使用 setComposerNodes 接口设置美颜等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| String | resourcePath | 素材绝对路径 如果传null或者空字符,则取消美颜效果 |
返回值
成功返回true,否则返回对应的错误码
public boolean setReshape(String resourcePath)
此接口适用于 2.6 版本及之前设置美形,在 2.7 版本之后请务必使用 setComposerNodes 接口设置美形等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| String | resourcePath | 素材绝对路径 如果传null或者空字符,则取消塑形效果 |
返回值
成功返回true,否则返回对应的错误码
public boolean setFilter(String resourcePath)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| String | resourcePath | 素材绝对路径 如果传null或者空字符,则取消滤镜效果 |
返回值
成功返回true,否则返回对应的错误码
public boolean setMakeUp(String resourcePath)
此接口适用于 2.6 版本及之前设置美妆,在 2.7 版本之后请务必使用 setComposerNodes 接口设置美妆等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| String | resourcePath | 素材绝对路径 如果传null或者空字符,则取消美妆效果 |
返回值
成功返回true,否则返回对应的错误码
public boolean setSticker(String resourcePath)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| String | resourcePath | 素材绝对路径 如果传null或者空字符,则取消贴纸效果 |
返回值
成功返回true,否则返回对应的错误码
调用该接口,已设置的贴纸素材将被重置,序列帧重新开始播放
public boolean resetSticker()
返回值 成功返回true,失败返回false
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景(可使用设置贴纸的方式去设置虚拟背景或者绿幕背景的素材包)。
/** * 设置虚拟背景图 * @param key 虚拟背景的key,固定为"BCCustomBackground" * @param path 背景图的绝对地址,贴纸内默认的图为chroma_matting_bg/AmazingFeature/image/background.png * @return */ public int setRenderCacheTexture(String key, String path);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| key | String | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| path | String | 传入图片绝对路径,SDK 会将其解析成纹理 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景。
/** * 设置虚拟背景纹理 * @param key 虚拟背景的key,固定为"BCCustomBackground" * @param buffer 背景图的buffer * @param width 宽 * @param height 高 * @param stride 步长 * @param format 格式 * @param rotation 旋转角度 * @return */ public int setRenderCacheTextureWithBuffer( String key, ByteBuffer buffer, int width, int height, int stride, EffectsSDKEffectConstants.PixlFormat format, EffectsSDKEffectConstants.Rotation rotation);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| key | String | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| buffer | ByteBuffer | 传入ByteBuffer,SDK 会将其解析成纹理 |
| width | int | 宽 |
| height | int | 高 |
| stride | int | 步长 |
| format | PixlFormat | 只支持RGBA |
| rotation | Rotation | 旋转角度 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
/** * 移除虚拟背景纹理 * @param key 虚拟背景的key,固定为"BCCustomBackground" * @return */ public int removeRenderCacheExternalTexture(String key);
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| key | String | 虚拟背景的Key,固定为*"BCCustomBackground"* |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
4.7.1新增接口。
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景。
/** * 设置虚拟背景纹理 * @param key 虚拟背景的key,固定为"BCCustomBackground" * @param textureid 纹理ID * @param width 纹理宽 * @param height 纹理高 * @return */ public int setRenderCacheExternalTexture(String key, int textureid, int width, int height)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| key | String | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| textureid | int | 纹理ID |
| width | int | 宽 |
| height | int | 高 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
4.7.1新增接口。
该接口可用于更新虚拟背景或者绿幕背景,使用前请先设置虚拟背景或者绿幕背景。
/** * 设置虚拟背景纹理 * @param key 虚拟背景的key,固定为"BCCustomBackground" * @param textureid 纹理ID * @param width 纹理宽 * @param height 纹理高 * @param rotation 旋转角度 * @return */ public int setRenderCacheExternalTextureWithRotation(String key, int textureid, int width, int height, EffectsSDKEffectConstants.Rotation rotation)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| key | String | 虚拟背景的Key,固定为*"BCCustomBackground"* |
| textureid | int | 纹理ID |
| width | int | 宽 |
| height | int | 高 |
| rotation | Rotation | 旋转角度 |
返回值
成功返回BEF_RESULT_SUC,失败返回错误码
public boolean processTexture( int srcTextureId, int dstTextureId, int width, int height, BytedEffectConstants.Rotation rotation, double timestamp)
说明 该接口接收纹输入,经过SDK处理后完成特效的渲染,需要注意如下问题: 1、请确保输入纹理是texure2d格式,并且图像中人脸已经转正,一般Android设备采集到的纹理格式为GL_TEXTURE_EXTERNAL_OES,并且存在一定角度的旋转(前置270度,后置90度) 2、关于前置摄像头加镜像问题,请在输入纹理进入该接口之前进行镜像处理 3、时间戳是从SurfaceTexture对象中获取到的,如果无法获取SurfaceTexture的时间戳,请咨询我们的技术支持同学 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| srcTextureId | int | 输入纹理ID,格式为Texture2D |
| dstTextureId | int | 输出纹理ID,格式为Texture2D |
| width | int | 纹理宽度 |
| height | int | 纹理高度 |
| rotation | BytedEffectConstants.Rotation | 纹理旋转角 |
| timestamp | double | 时间戳,从SurfaceTexture对象中获取 |
返回值
成功返回true,否则返回false
说明 特效SDK不建议使用buffer输入,原因在输入输出格式中有相关说明。
public boolean processBuffer( ByteBuffer inputdata, BytedEffectConstants.Rotation orient, int in_pixformat, int imagew, int imageh, int imagestride, byte[] outdata, int out_pixformat, double timestamp)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| inputdata | int | 输入数据 |
| orient | int | 旋转角,参考{@link BytedEffectConstants.Rotation |
| in_pixformat | int | 数据格式 参考{@link BytedEffectConstants |
| imagew | int | 图片宽度 |
| imageh | int | 图片高度 |
| outdata | byte[] | 输出数据 |
| imagestride | int | 图片步长 |
| out_pixformat | int | 输出结果格式 |
| timestamp | double | 时间戳 |
返回值
成功返回true,否则返回false
说明 此方法需要与 11.执行特效渲染 一起使用,并在其之前调用。它们在一起使用的效果与直接使用单一的 8.处理纹理输入 或 9.处理buffer输入 效果一致,只是把上述两个方法进行了拆分,使得算法检测和特效处理可以分别传入不同的数据类型,以及自由决定调用时间。 处理纹理输入 此方法支持对输入的纹理进行算法检测,也可以同时把对应的 buffer 传递进去,进行加速。
public boolean algorithmTextureWithBuffer(int texture, ByteBuffer buffer, BytedEffectConstants.Rotation orient, int pixelFormat, int width, int height, int stride, long timeStamp)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| texture | int | 输入纹理 |
| buffer | int | 输入数据 |
| orient | int | 旋转角,参考{@link BytedEffectConstants.Rotation |
| pixelFormat | int | 数据格式 参考{@link BytedEffectConstants |
| width | int | 图片宽度 |
| height | int | 图片高度 |
| stride | int | 图片步长 |
| timestamp | double | 时间戳 |
返回值
成功返回true,否则返回false
处理 buffer 输入
此方法支持对输入的 buffer 进行算法检测。
public boolean algorithmBuffer(ByteBuffer buffer, BytedEffectConstants.Rotation orient, int pixelFormat, int width, int height, int stride, long timeStamp)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| buffer | int | 输入数据 |
| orient | int | 旋转角,参考{@link BytedEffectConstants.Rotation |
| pixelFormat | int | 数据格式 参考{@link BytedEffectConstants |
| width | int | 图片宽度 |
| height | int | 图片高度 |
| stride | int | 图片步长 |
| timestamp | double | 时间戳 |
返回值
成功返回true,否则返回false
说明 此方法需要与 10.执行算法检测 一起使用,否则无法正常渲染。
processTextureOnly(int srcTexture, int dstTexture, int width, int height, BytedEffectConstants.Rotation rotation, long timeStamp)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| srcTexture | int | 输入纹理 |
| dstTexture | int | 输出纹理 |
| width | int | 图片宽度 |
| height | int | 图片高度 |
| rotation | int | 旋转角,参考{@link BytedEffectConstants.Rotation |
| timestamp | double | 时间戳 |
返回值
成功返回true,否则返回false
public boolean updateIntensity( int intensitytype, float intensity)
此接口适用于 2.6 版本及之前设置美颜强度 在 2.7 版本之后请务必使用 updateComposerNodes 接口设置美颜强度 所有版本设置滤镜强度都使用此接口 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| cheekintensity | float | 瘦脸强度 0-1 |
| eyeintensity | float | 大眼参数 0-1 |
返回值
成功返回BEF_RESULT_SUC, 其他返回值查看{@link BytedEffectConstants}
public boolean updateReshape( float cheekintensity, float eyeintensity)
此接口适用于 2.6 版本及之前设置美形强度,在 2.7 版本之后请务必使用 updateComposerNodes 接口设置美形强度等 参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| cheekintensity | float | 瘦脸强度 0-1 |
| eyeintensity | float | 大眼参数 0-1 |
返回值
成功返回BEF_RESULT_SUC, 其他返回值查看{@link BytedEffectConstants}
public int setComposerNodes(String[] composerNodes)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| composerNodes | String[] | 所选特效素材路径数组 |
返回值
成功返回BEF_RESULT_SUC, 其他返回值查看{@link BytedEffectConstants}
public int updateComposerNodes( String path, String key, float value)
参数说明
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| path | String | 特效素材对应路径 |
| key | String | 特效 KEY |
| value | float | 强度值,0~1 |
返回值
成功返回BEF_RESULT_SUC, 其他返回值查看{@link BytedEffectConstants}
public BefFaceInfo getFaceDetectResult();
返回值 成功返回 BefFaceInfo 对象,失败返回 null。
4.8.1 新增接口
public BefFaceInfo getFaceOcclusionResult ()
返回值
成功返回 BefFaceInfo ,包含人脸遮挡信息
public BefHandInfo getHandDetectResult();
返回值 成功返回 BefHandInfo 对象,失败返回 null。
public BefSkeletonInfo getSkeletonDetectResult();
返回值 成功返回 BefSkeletonInfo 对象,失败返回 null。
public void release()
4.7.3新增接口。
public static boolean gpuIsSupport()
返回值 支持返回true,不支持返回false。