附1 . DuerShow特色能力 手势识别 - dueros/AndroidBotSdkDemo GitHub Wiki
手势识别是小度设备支持的一种交互方式。用户对着设备摄像头,做出预定义手势(比如OK),此时系统可以识别用户手势,并返回手势名称(“GESTURE_OK")给到App。App可以根据系统返回手势名称执行对应业务逻辑。
手势能力工作流程如下:
屏幕首页下拉->点击设置->实验室->手势控制->打开手势开关。
手势功能开启后,可以对小度说:“小度小度,播放短视频”,体验一下小度设备对手势能力的支持。初步了解一下手势功能的效果,对之后开发自己的手势功能会很有帮助。
GESTURE_OK(接听/同意/赞成/确定/继续...) GESTURE_PLAM(挂断/反对/拒绝/取消/暂停...) GESTURE_LEFT(想左/上一个/上一页...) GESTURE_RIGHT(向右/下一个/下一页...).
后续随着版本升级会增加新的手势支持。 附:小度手势定义全集(还未支持完全)
implementation 'com.baidu.duer.botsdk:bot-sdk-android:1.39.0'
/**
* 注册当前场景支持的手势列表到系统,如果当前场景不支持手势功能,请传入参数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所示,支持手势模式的浮层提示。
手势结果通过IBotMessageListener
的onHandleIntent
方法回传给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));
}
输出结果如下图:
可以根据意图名称AI_DUER_SHOW_GESTURE_RECOGNIZED
+ 槽位信息:name=recognizedGestureName,value=GESTURE_OK 确定当前用户做出了GESTURE_OK 手势,然后就可以根据用户手势完成相应业务逻辑.