骨骼检测可实时识别全身18关键点,支持多人检测,支持半身、侧身、背身、部分遮挡等多种复杂场景。
支持平台 | Android、iOS、Windows、Mac |
---|---|
支持输入格式 | RGBA8888、BGRA8888、BGR888、RGB888、NV21、NV12、YUV420P |
支持人数 | 不限,建议不超过3人 |
支持最小输入尺寸 | 短边128 |
内存占用 | <4M(测试设备OppoR11) |
检测速度 | <6ms(测试设备iphone7) |
详细接口说明查看头文件:bef_effect_ai_hand.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_skeleton_create( const char *model_path, bef_effect_handle_t *handle );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
model_path | const char * | 模型文件路径 |
handle | bef_effect_handle_t * | 创建的骨骼检测句柄 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_skeleton_check_license( JNIEnv* env, jobject context, bef_effect_handle_t handle, const char *licensePath );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
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_skeleton_check_license( 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
BEF_SDK_API bef_effect_result_t bef_effect_ai_skeleton_set_detection_inputsize( 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_skeleton_set_tracking_inputsize( 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_skeleton_set_targetnum( bef_effect_handle_t handle, int max_skeleton_num );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 创建的骨骼检测句柄 |
max_skeleton_num | int | 最大检测人体数 |
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API bef_effect_result_t bef_effect_ai_skeleton_detect( bef_effect_handle_t handle, const unsigned char *image, bef_ai_pixel_format pixel_format, int image_width, int image_height, int image_stride, bef_ai_rotate_type orientation, int *skeleton_info_num, bef_skeleton_info **skeleton_info );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 创建的骨骼检测句柄 |
image | const unsigned char * | 输入图像的数据指针 |
pixel_format | bef_ai_pixel_format | 输入图像格式,见备注 |
image_width | int | 输入图像宽度(单位,像素) |
image_height | int | 输入图像高度(单位,像素) |
image_stride | int | 输入图像每一行步长(单位,字节) |
orientation | bef_ai_rotate_type | 输入图像的转向,见备注 |
skeleton_info_num | int | 检测结果数量 |
skeleton_info | bef_skeleton_info ** | 检测结果,见备注 |
备注
pixel_format
使用时参考 bef_ai_pixel_format
typedef enum { BEF_AI_PIX_FMT_RGBA8888, // RGBA 8:8:8:8 32bpp ( 4通道32bit RGBA 像素 ) BEF_AI_PIX_FMT_BGRA8888, // BGRA 8:8:8:8 32bpp ( 4通道32bit RGBA 像素 ) BEF_AI_PIX_FMT_BGR888, // BGR 8:8:8 24bpp ( 3通道32bit RGB 像素 ) BEF_AI_PIX_FMT_RGB888, // RGB 8:8:8 24bpp ( 3通道32bit RGB 像素 ) BEF_AI_PIX_FMT_GRAY8, // GRAY 8bpp ( 1通道8bit 灰度像素 ). 目前还不支持 BEF_AI_PIX_FMT_YUV420P, // YUV 4:2:0 12bpp ( 3通道, 一个亮度通道, 另两个为U分量和V分量通道, 所有通道都是连续的 ). 目前还不支持 BEF_AI_PIX_FMT_NV12, // YUV 4:2:0 12bpp ( 3通道, 一个亮度通道, 另一道为UV分量交错 ). 目前还不支持 BEF_AI_PIX_FMT_NV21 // YUV 4:2:0 12bpp ( 3通道, 一个亮度通道, 另一道为VU分量交错 ). 目前还不支持 } bef_ai_pixel_format;
skeleton_info
检测到的骨骼信息,需要外部申请内存,数量由 skeleton_info_num 确定,使用时参考 bef_skeleton_info
typedef struct bef_skeleton_info { bef_skeleton_point_info keyPointInfos[BEF_MAX_SKELETON_POINT_NUM]; // 检测到的骨骼信息 bef_ai_rect skeletonRect; // 骨骼rect } bef_skeleton_info;
返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h
BEF_SDK_API void bef_effect_ai_skeleton_destroy(bef_effect_handle_t handle);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
handle | bef_effect_handle_t | 创建的骨骼检测句柄 |
public int init( Context context, String modelPath, String licensePath );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
context | Context | 上下文 |
modelPath | String | 模型文件路径 |
licensePath | String | 授权文件路径 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int setDetectionInput( int width, int height );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
width | int | 宽度 |
height | int | 高度 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int setTrackingInput( int width, int height );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
width | int | 宽度 |
height | int | 高度 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public int setTargetNum(int num);
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
num | int | 最多可检测的骨骼数 |
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public BefSkeletonInfo detectSkeleton( ByteBuffer buffer, BytedEffectConstants.PixlFormat pixel_format, int image_width, int image_height, int image_stride, BytedEffectConstants.Rotation orientation );
参数说明
参数名 | 参数类型 | 参数说明 |
---|---|---|
buffer | ByteBuffer | 图像数据 |
pixel_format | BytedEffectConstants.PixlFormat | 图像格式,见备注 |
image_width | int | 图像宽度(单位,像素) |
image_height | int | 图像高度(单位,像素) |
image_stride | int | 图像数据行宽(单位,字节) |
orientation | BytedEffectConstants.Rotation | 图像方向,见备注 |
备注
pixel_format
使用时参考 com.bytedance.labcv.effectsdk.BytedEffectConstants.PixlFormat
public enum PixlFormat { RGBA8888(0), BGRA8888(1), BGR888(2), RGB888(3), BEF_AI_PIX_FMT_YUV420P(5), BEF_AI_PIX_FMT_NV12(6), BEF_AI_PIX_FMT_NV21(7); private int value; PixlFormat(int value) { this.value = value; } public int getValue() { return value; } }
orientation
使用时参考 com.bytedance.labcv.effectsdk.BytedEffectConstants.Rotation
public enum Rotation { /** * 图像不需要旋转,图像中的人脸为正脸 */ CLOCKWISE_ROTATE_0(0), /** * 图像需要顺时针旋转90度,使图像中的人脸为正 */ CLOCKWISE_ROTATE_90(1), /** * 图像需要顺时针旋转180度,使图像中的人脸为正 */ CLOCKWISE_ROTATE_180(2), /** * 图像需要顺时针旋转270度,使图像中的人脸为正 */ CLOCKWISE_ROTATE_270(3); public int id = 0; Rotation(int id) { this.id = id; } }
返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码
public void release();
答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK
答:建议按照以下步骤排查
错误码请参考错误码表