人体分割SDK提供从图像中实时提取人体轮廓的能力,支持多人同时分割,具备稳定性高、性能开销低、速度快等特点。
支持平台 | Android、iOS、Windows、Mac |
---|---|
支持输入格式 | RGBA8888、BGRA8888、BGR888、RGB888 |
支持最小输入尺寸 | 短边128 |
内存占用 | <4M (测试设备OppoR11) |
速度 | <11ms(测试设备iPhone7) |
详细接口说明查看头文件:bef_effect_ai_portrait_matting.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_portrait_matting_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_portrait_matting_init_model( bef_effect_handle_t handle, bef_ai_matting_model_type type, const char* param_path);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 人体分割的检测句柄 |
type | bef_ai_matting_model_type | 模型类型,目前分大小模型 |
param_path | const char* | 模型文件的路径 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_portrait_matting_set_param( bef_effect_handle_t handle, bef_ai_matting_param_type type, int value);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 人体分割的检测句柄 |
type | bef_ai_matting_param_type | 算法参数,用来设置边界的模式、强制预测、短边长度 |
value | int | 默认为1 |
备注
bef_ai_matting_param_type 详细见bef_effect_ai_portrait_matting.h
/* * @brief SDK参数 * edge_mode: * 算法参数,用来设置边界的模式 * - 0: 不加边界 * - 1: 加边界 * - 2: 加边界, 其中, 2 和 3 策略不太一样,但效果上差别不大,可随意取一个 * fresh_every: * 算法参数,设置调用多少次强制做预测,目前设置 15 即可 * MP_OutputMinSideLen: * 返回短边的长度, 默认值为128, 需要为16的倍数; * MP_OutputWidth 不设置,只做GetParam 兼容之前的调用 * MP_OutputHeight 不设置,只做GetParam 兼容之前的接口; **/ enum bef_ai_matting_param_type { BEF_MP_EdgeMode = 0, BEF_MP_FrashEvery = 1, BEF_MP_OutputMinSideLen = 2, BEF_MP_OutputWidth = 3, BEF_MP_OutputHeight = 4, };
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_portrait_matting_get_output_shape( bef_effect_handle_t handle, int width, int height, int *output_width, int *output_height);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 人体分割的检测句柄 |
width | int | 输入图的宽度 |
height | int | 输入图的高度 |
output_width | int* | 输出mask的宽度 |
output_height | int* | 输出mask的高度 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_portrait_matting_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, bool need_flip_alpha, bef_ai_matting_ret *ret);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
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 | 传入图像旋转角 |
need_flip_alpha | bool | 传出图像是否需要翻转 |
ret | bef_ai_matting_ret* | 传出图像 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_portrait_matting_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_portrait_matting_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.PortraitMatting.java
public int init( Context context, String modelpath, BytedEffectConstants.PortraitMatting modelType, String licensePath)
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
context | Context | 应用上下文 |
modelpath | String | 模型文件绝对路径 |
modelType | BytedEffectConstants.PortraitMatting | 使用模型类型 |
licensePath | String | 授权文件绝对路径 |
备注
{@link BytedEffectConstants}
BEF_PORTAITMATTING_LARGE_MODEL(0), 大模型,耗时比小模型稍长;
BEF_PORTAITMATTING_SMALL_MODEL(1); 小模型,较快;
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int setParam( BytedEffectConstants.PorraitMattingParamType paramType , int paramValue)
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
paramType | BytedEffectConstants.PorraitMattingParamType | sdk设置参数类型 |
paramValue | int | sdk设置参数值 |
备注
详见BytedEffectConstants.PorraitMattingParamType
public enum PorraitMattingParamType { /** * 算法参数,用来设置边界的模式 * - 0: 不加边界 * - 1: 加边界 * - 2: 加边界, 其中, 2 和 3 策略不太一样,但效果上差别不大,可随意取一个 */ BEF_MP_EdgeMode(0), /** * 算法参数,设置调用多少次强制做预测,目前设置 15 即可 */ BEF_MP_FrashEvery(1), /** * 返回短边的长度, 默认值为128, 需要为16的倍数; */ BEF_MP_OutputMinSideLen(2); private int value; PorraitMattingParamType(int v){this.value = v;} public int getValue(){return value;} }
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public MattingMask detectMatting( 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.PortraitMatting.java
/** * 人体分割结果, 单通道灰度图 */ public class MattingMask { private int width; private int height; private byte[] buffer; 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); } }
返回值
成功返回 MattingMask-人体分割结果,单通道灰度图
public void release()
答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK
答:建议按以下步骤排查下
答:我们SDK 输出的byte[]中的值在0-255范围中,255表示人体部分,0表示背景部分,(0,255)中间的值表示的是人体的边缘部分。
错误码请参考错误码表