头发分割SDK提供从图像中实时提取头发轮廓的能力,支持多人同时分割,具备稳定性高、性能开销低、速度快等特点,常应用于染发特效中。
支持平台 | Android、iOS、Windows、Mac |
---|---|
支持输入格式 | RGBA8888、BGRA8888、BGR888、RGB888、NV21、NV12、YUV420P |
支持最小输入尺寸 | 短边128 |
内存占用 | <3M (测试设备OppoR11) |
检测速度 | <7ms(测试设备iPhone7) |
详细接口说明查看头文件:bef_effect_ai_hairparser.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_create(bef_effect_handle_t *handle);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 创建的头发分割的检测句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_init_model( bef_effect_handle_t handle, const char* param_path);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 头发分割的检测句柄 |
param_path | const char* | 模型文件的路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_set_param( bef_effect_handle_t handle, int net_input_width, int net_input_height, bool use_tracking, bool use_blur);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 头发分割的检测句柄 |
net_input_width | int | 神经网络传入的宽:HairParser 128 |
net_input_height | int | 神经网络传入的高:HairParser 224 |
use_tracking | bool | 算法内部参数,目前传入 true 即可 |
use_blur | bool | 算法内部参数,目前传入 true 即可 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_get_output_shape( bef_effect_handle_t handle, int* output_width, int* output_height, int* channel);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 头发分割的检测句柄 |
output_width | int* | 神经网络输出的宽:HairParser |
output_height | int* | 神经网络输出的高:HairParser |
channel | int* | 神经网络输出的通道,目前始终返回1 |
备注
channel为返回通道数,目前始终返回1,未来可能扩展
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_do_detect( bef_effect_handle_t handle, const unsigned char* src_image_data, bef_ai_pixel_format pixel_format, int width, int height, int image_stride, bef_ai_rotate_type orient, unsigned char* dst_alpha_data, bool need_flip_alpha);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 头发分割的检测句柄 |
src_image_data | const unsigned char* | 为传入图像的大小,图像大小任意 |
pixel_format | bef_ai_pixel_format | 传入图像的类型 |
width | int | 传入图像的宽 |
height | int | 传入图像的高 |
image_stride | int | 传入图像的步长 |
orient | bef_ai_rotate_type | 传入图像旋转角 |
dst_alpha_data | unsigned char* | 传出图像 |
need_flip_alpha | bool | 传出图像是否需要翻转 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_destroy(bef_effect_handle_t handle);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 头发分割的检测句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_hairparser_check_license( JNIEnv* env, jobject context, bef_effect_handle_t handle, const char *licensePath);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 头发分割的检测句柄 |
licensePath | const char * | 授权文件字符串 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
接口说明
详细接口说明查看文件:com.bytedance.labcv.effectsdk.HairParser.java
public int init( Context context, String modelpath, String licensePath)
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
context | Context | 应用上下文 |
modelpath | const char * | 模型文件绝对路径 |
licensePath | const char * | 授权文件绝对路径 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int setParam( int width, int height, boolean useTracking, boolean useBlur)
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
width | int | 输入图像的宽度 |
height | int | 输入图像的高度 |
useTracking | boolean | 是否跟踪 传入true |
useBlur | boolean | 是否模糊 传入true |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public HairMask parseHair( ByteBuffer imgdata, BytedEffectConstants.PixlFormat pixel_format, int width, int height, int stride, BytedEffectConstants.Rotation orientation, boolean needFlipAlpha)
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
imgdata | ByteBuffer | 输入图像数据 |
pixel_format | BytedEffectConstants.PixlFormat | 输入数据格式 |
width | int | 输入图像宽度 |
height | int | 输入图像高度 |
stride | int | 输入图像步长 |
orientation | BytedEffectConstants.Rotation | 输入图像旋转角 |
needFlipAlpha | boolean | 输出图像是否需要翻转 |
备注
类HairMask详细情况可以参考com.bytedance.labcv.effectsdk.HairParser.java
/** * 头发分割结果 */ public class HairMask { private int width; private int height; private byte[] buffer; private int channel; public byte[] getBuffer() { return buffer; } public int getWidth() { return width; } public int getHeight() { return height; } @Override public String toString() { return String.format("l: %d w:%d, h:%d", buffer.length, width, height); } } private long mNativePtr; private boolean inited = false;
返回值
成功返回 类HairMask-头发分割结果
public void release()
答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK
答:建议按以下步骤排查下
错误码请参考错误码表