附1 . DuerShow特色能力 手势识别 - dueros/AndroidBotSdkDemo GitHub Wiki

1.手势识别功能介绍

手势识别是小度设备支持的一种交互方式。用户对着设备摄像头,做出预定义手势(比如OK),此时系统可以识别用户手势,并返回手势名称(“GESTURE_OK")给到App。App可以根据系统返回手势名称执行对应业务逻辑。

手势能力工作流程如下: 手势内容描述

2.在小度设备上开启并体验手势功能

2.1 开启手势功能

屏幕首页下拉->点击设置->实验室->手势控制->打开手势开关。

2.2 体验小度手势控制功能

手势功能开启后,可以对小度说:“小度小度,播放短视频”,体验一下小度设备对手势能力的支持。初步了解一下手势功能的效果,对之后开发自己的手势功能会很有帮助。

2.2.1 打开短视频后,屏幕中央上方出现“支持手势模式”的提示

支持手势模式

2.2.2 对摄像头做出GESTURE_PLAM手势,可以暂停视频播放。之后对摄像头做出GESTURE_OK手势,可以继续视频播放。

暂停视频播放

2.3 当前小度设备支持的手势

GESTURE_OK(接听/同意/赞成/确定/继续...) GESTURE_PLAM(挂断/反对/拒绝/取消/暂停...) GESTURE_LEFT(想左/上一个/上一页...) GESTURE_RIGHT(向右/下一个/下一页...).

后续随着版本升级会增加新的手势支持。 附:小度手势定义全集(还未支持完全)

手势全集

3.App开发,增加手势支持

3.1 升级BotSdk版本到1.39.0

implementation 'com.baidu.duer.botsdk:bot-sdk-android:1.39.0'

3.2 向DuerOS注册当前场景支持的手势列表

   /**
    * 注册当前场景支持的手势列表到系统,如果当前场景不支持手势功能,请传入参数null.
    * <b>因为支持手势,系统侧需要运行视觉相关服务,切到不支持手势的页面,请清空手势列表,节省系统资源</b>
    */
   BotMessageProtocol.GestureRegisterParams gestureRegisterParams =new BotMessageProtocol.GestureRegisterParams();
   gestureRegisterParams.enabledGestures = new ArrayList<>();
   gestureRegisterParams.enabledGestures.add(BotMessageProtocol.AiDuerGesture.GESTURE_OK);
   gestureRegisterParams.enabledGestures.add(BotMessageProtocol.AiDuerGesture.GESTURE_PALM);
   gestureRegisterParams.enabledGestures.add(BotMessageProtocol.AiDuerGesture.GESTURE_LEFT);
   gestureRegisterParams.enabledGestures.add(BotMessageProtocol.AiDuerGesture.GESTURE_RIGHT);
   BotSdk.getInstance().triggerDuerOSCapacity(
        BotMessageProtocol.DuerOSCapacity.AI_DUER_SHOW_GESTURE_REGISTER,
        JsonUtil.toJson(gestureRegisterParams));

如上代码执行完毕,屏幕上会出现类似章节2.2.1所示,支持手势模式的浮层提示。

3.3 接收DuerOS返回的手势结果

手势结果通过IBotMessageListeneronHandleIntent方法回传给App.可以通过如下方式打印手势识别结果的返回内容:

/**
     * 意图下发。开发者在<a herf="">DBP平台</a>上面开发的意图,在匹配到对应用户query之后,会封装对应意图成为Intent下发下来。
     * APP通过{@link BotIntent#name}来确定意图名称,之后开发对应的逻辑。同时APP还可以通过{@link BotIntent#slots}解析参数
     * @param token 指令的token,token是一个场景的标识符,在打开的时候,token会塞到intent中,key为"bot:accessToken"
     *              可以通过token来区别这个指令是否是当前场景需要处理的指令
     * @param identity BotID参考,包含packageName和accessToken
     * @param intent 意图内容,参考{@link BotIntent} 包含意图名称和槽位参数
     * @param customData 自定义数据,结构化数据。参考 <a herf="http://icode.baidu.com/repos/baidu/duer/open-platform-api-doc/blob/master:dueros-conversational-service/device-interface/bot-app-sdk-private.md">BotSDK协议文档</a>
     */
    @Override
    public void onHandleIntent(String token, BotIdentity identity, BotIntent intent, String customData) {
        String intentResult = "指令名称:%s\n槽位信息:%s\n自定义信息:%s";
        mResultIntentTv.setText(String.format(intentResult, intent.name, intent.slots, customData));
    }

输出结果如下图: 识别结果

3.4 意图识别结果指令解析:

可以根据意图名称AI_DUER_SHOW_GESTURE_RECOGNIZED + 槽位信息:name=recognizedGestureName,value=GESTURE_OK 确定当前用户做出了GESTURE_OK 手势,然后就可以根据用户手势完成相应业务逻辑.

⚠️ **GitHub.com Fallback** ⚠️