You need to enable JavaScript to run this app.
导航

骨骼检测

最近更新时间2023.11.02 17:05:16

首次发布时间2022.02.25 17:16:51

简介

骨骼检测可实时识别全身18关键点,支持多人检测,支持半身、侧身、背身、部分遮挡等多种复杂场景。

骨骼检测关键点索引图

骨骼检测关键点索引图.jpg

技术规格
支持平台Android、iOS、Windows、Mac
支持输入格式RGBA8888、BGRA8888、BGR888、RGB888、NV21、NV12、YUV420P
支持人数不限,建议不超过3人
支持最小输入尺寸短边128
内存占用<4M(测试设备OppoR11)
检测速度<6ms(测试设备iphone7)
C 接口

详细接口说明查看头文件:bef_effect_ai_hand.h

1. 创建骨骼检测句柄

BEF_SDK_API bef_effect_result_t
bef_effect_ai_skeleton_create(
	const char *model_path,
	bef_effect_handle_t *handle
	);

参数说明

参数名参数类型参数说明
model_pathconst char *模型文件路径
handlebef_effect_handle_t *创建的骨骼检测句柄

返回值

成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

2. 骨骼检测授权

1. android

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
	);

参数说明

参数名参数类型参数说明
envJNIEnv *jni 环境指针
contextjobjectjni 对象
handlebef_effect_handle_t创建的骨骼检测句柄
licensePathconst char *授权文件路径

返回值

成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

2. ios

BEF_SDK_API bef_effect_result_t
bef_effect_ai_skeleton_check_license(
	bef_effect_handle_t handle, 
	const char *licensePath
	);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的骨骼检测句柄
licensePathconst char *授权文件路径

返回值

成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

3. 设置检测算法的输入尺寸

BEF_SDK_API bef_effect_result_t
bef_effect_ai_skeleton_set_detection_inputsize(
	bef_effect_handle_t handle,
	int width,
	int height
	);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的骨骼检测句柄
widthint宽度
heightint高度

返回值

成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

4. 设置跟踪算法的输入尺寸

BEF_SDK_API bef_effect_result_t
bef_effect_ai_skeleton_set_tracking_inputsize(
	bef_effect_handle_t handle,
	int width,
	int height
	);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的骨骼检测句柄
widthint宽度
heightint高度

返回值

成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

5. 设置最多可检测骨骼数

BEF_SDK_API bef_effect_result_t
bef_effect_ai_skeleton_set_targetnum(
	bef_effect_handle_t handle,
	int max_skeleton_num
	);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的骨骼检测句柄
max_skeleton_numint最大检测人体数

返回值

成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

6. 检测骨骼

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
	);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的骨骼检测句柄
imageconst unsigned char *输入图像的数据指针
pixel_formatbef_ai_pixel_format输入图像格式,见备注
image_widthint输入图像宽度(单位,像素)
image_heightint输入图像高度(单位,像素)
image_strideint输入图像每一行步长(单位,字节)
orientationbef_ai_rotate_type输入图像的转向,见备注
skeleton_info_numint检测结果数量
skeleton_infobef_skeleton_info **检测结果,见备注

备注

  1. 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;
  1. 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

7. 销毁骨骼检测句柄

BEF_SDK_API void
bef_effect_ai_skeleton_destroy(bef_effect_handle_t handle);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的骨骼检测句柄
Java 接口

1. 创建骨骼检测句柄

public int init(
	Context context,
	String modelPath,
	String licensePath
	);

参数说明

参数名参数类型参数说明
contextContext上下文
modelPathString模型文件路径
licensePathString授权文件路径

返回值

成功返回BEF_RESULT_SUC,否则返回对应的错误码

2. 设置检测算法的输入

public int setDetectionInput(
  int width,
	int height
	);

参数说明

参数名参数类型参数说明
widthint宽度
heightint高度

返回值

成功返回BEF_RESULT_SUC,否则返回对应的错误码

3. 设置跟踪算法的输入

public int setTrackingInput(
	int width,
	int height
	);

参数说明

参数名参数类型参数说明
widthint宽度
heightint高度

返回值

成功返回BEF_RESULT_SUC,否则返回对应的错误码

4. 设置最多可检测骨骼数

public int setTargetNum(int num);

参数说明

参数名参数类型参数说明
numint最多可检测的骨骼数

返回值

成功返回BEF_RESULT_SUC,否则返回对应的错误码

5. 检测骨骼

public BefSkeletonInfo detectSkeleton(
	ByteBuffer buffer,
	BytedEffectConstants.PixlFormat pixel_format,
	int image_width,
	int image_height,
	int image_stride,
	BytedEffectConstants.Rotation orientation
	);

参数说明

参数名参数类型参数说明
bufferByteBuffer图像数据
pixel_formatBytedEffectConstants.PixlFormat图像格式,见备注
image_widthint图像宽度(单位,像素)
image_heightint图像高度(单位,像素)
image_strideint图像数据行宽(单位,字节)
orientationBytedEffectConstants.Rotation图像方向,见备注

备注

  1. 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;
    }
}
  1. 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,否则返回对应的错误码

6. 销毁骨骼检测句柄

public void release();

FAQ

1.如果出现任何异常,请查看是否有以下类型日志

答:建议首先查看以下tag输出Error类型的日志:

bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK

2.骨骼检测设置后没有效果

答:建议按照以下步骤排查

  • 请确认骨骼检测句柄初始化是否成功
  • 请确认骨骼检测句柄已经授权成功
  • 如果初始化成功,请检查设置的输入图像数据完整且类型支持

错误码

错误码请参考错误码表