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

动态手势

最近更新时间2023.06.28 14:42:30

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

简介

识别和检测动态手势类型,可识别17类动态手势,如左滑/右滑。

技术规格
支持平台Android、iOS
支持输入格式RGBA8888、BGRA8888、BGR888、RGB888
内存占用<12M (测试设备OPPO R11)
检测速度<5ms(测试设备OPPO R11)
C接口说明

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

1.创建动态手势句柄

BEF_SDK_API bef_effect_result_t  
bef_effect_ai_dynamic_gesture_create(bef_effect_handle_t *handle);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t创建的动态手势算法句柄

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

2.从文件初始化模型参数

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

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t动态手势算法句柄
model_pathconst char*模型文件所在的文件夹路径

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

3.设置SDK参数

备注

预留接口,但是暂不支持外部参数设置

4.进行动态手势操作

BEF_SDK_API bef_effect_result_t
bef_effect_ai_dynamic_gesture_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,
    bef_ai_dynamic_gesture_ret *result);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t动态手势算法的句柄
imageconst unsigned char*为传入图像的大小
pixel_formatbef_ai_pixel_format传入图像的类型
image_widthint传入图像的宽
image_heightint传入图像的高
image_strideint传入图像的步长
orientationbef_ai_rotate_type传入图像旋转角
resultbef_ai_dynamic_gesture_ret*算法处理返回结果

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

备注

bef_ai_dynamic_gesture_ret 详细见bef_effect_ai_dynamic_gesture.h

/**
 * @brief 封装预测接口的返回值
 *
 * @note 不同的算法,可以在这里添加自己的自定义数据
 */
typedef struct {
    int action;
    float action_score;
} bef_ai_dynamic_gesture_info;

/// @brief 检测结果
typedef struct {
    bef_ai_dynamic_gesture_info p_gestures[BEF_MAX_GESTURE_HAND_NUM]; ///< 检测到的动态手势信息
    int gesture_count;                                                ///< 检测到的手势数量;
} bef_ai_dynamic_gesture_ret;

5.释放句柄

BEF_SDK_API bef_effect_result_t
bef_effect_ai_dynamic_gesture_release(bef_effect_handle_t handle);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t动态手势算法的句柄

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

6.动态手势授权

// 离线license检测方式
BEF_SDK_API bef_effect_result_t
bef_effect_ai_dynamic_gesture_check_license(
    bef_effect_handle_t handle,
    const char *licensePath);

// 在线license检测方式
BEF_SDK_API bef_effect_result_t
bef_effect_ai_dynamic_gesture_check_online_license(
    bef_effect_handle_t handle,
    const char *licensePath);

参数说明

参数名参数类型参数说明
handlebef_effect_handle_t动态手势算法的句柄
licensePathconst char *授权文件字符串

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

Java 接口说明

接口说明
详细接口说明查看文件:com.bytedance.labcv.effectsdk.DynamicGestureDetect.java

1.初始化动态手势句柄

public int init(
    Context context,
    String modelPath,
    String licensePath,
    boolean onlineLicense)

参数说明

参数名参数类型参数说明
contextContext应用上下文
modelpathString模型文件绝对路径
licensePathString授权文件绝对路径
onlineLicenseboolean授权类型

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

2.设置SDK参数

备注

预留接口,但是暂不支持外部参数设置

3.动态手势

public BefDynamicGestureInfo detect(
    ByteBuffer buffer,
    BytedEffectConstants.PixlFormat pixelFormat,
    int imageWidth,
    int imageHeight,
    int imageStride,
    BytedEffectConstants.Rotation orientation)

参数说明

参数名参数类型参数说明
bufferByteBuffer输入图像数据
pixelFormatBytedEffectConstants.PixlFormat输入数据格式
imageWidthint输入图像宽度
imageHeightint输入图像高度
imageStrideint输入图像步长
orientationBytedEffectConstants.Rotation输入图像旋转角

备注

类BefDynamicGestureInfo详细情况可以参考com.bytedance.labcv.effectsdk.BefDynamicGestureInfo.java,并且其定义与C接口bef_ai_dynamic_gesture_ret保持一致。

/**
 * 动态手势算法结果
 */
public class BefDynamicGestureInfo {

  /**
   * 动态手势数组
   * Array of Dynamic Gesture
   */
  private GestureInfo[] gestureInfos;

  /**
   * 检测到动态手势数
   * Amount of Gesture
   */
  private int gestureNum;

  public GestureInfo[] getGestureInfos() {
    return gestureInfos;
  }

  public void setGestureInfos(GestureInfo[] gestureInfos) {
    this.gestureInfos = gestureInfos;
  }

  public int getGestureNum() {
    return gestureNum;
  }

  public void setGestureNum(int gestureNum) {
    this.gestureNum = gestureNum;
  }

  public static class GestureInfo {

    private int actionType = 0;
    private float actionScore = 0.0f;

    public int getActionType() {
        return actionType;
    }

    public float getActionScore() {
        return actionScore;
    }

    @Override
    public String toString() {
        return "GestureInfo{" +
                "actionType=" + actionType +
                ", actionType=" + actionType +
                '}';
    }
  }
}

返回值
成功返回 类BefDynamicGestureInfo-动态手势结果

4.释放动态手势句柄

public void release()

FAQ

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

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

bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK

错误码

错误码请参考错误码表