【Dueross|开发日记Nov.6】自定义Python SDK 插件
D****s · D****s 发布于2017-12-10 13:10 浏览:1592 回复:1

如果你看过分享日记的第一、二、三、四、五以上几篇,那恭喜你,你也可以分享你自己的调试日记了。接下来分享下如何实现Python SDK 插件。

1、Python SDK代码架构

image.png

2、配置插件    

打开dueros_core.py文件,这里会对插件进行调用。默认的只调用了speech_synthesizer、alerts、audio_player、speaker以及system插件。现在我们添加上屏幕显示插件。

    2.1 引入屏幕插件image.png

接下来找到Dueros的构造方法__init__添加如下代码:

self.screen = Screen(self)

    2.2 调用插件

Python SDK 调用插件只要在dueros_core.py文件的

__namespace_convert
__name_convert

这两个方法。_namespace_convert用来匹配DCS协议中Header的namespace并转换成自己插件。_name_convert用来匹配DCS协议中Header的name并转换成插件的对应方法。我们来看下现有的这两个方法的实现如下:

image.png

image.png

接下来我们打开DCS 协议文档,找到屏幕展示的协议文档,我们现在主要关心红框数据

image.png

解析了我们配置屏幕显示插件,修改_namespace_convert和_name_convert方法:

image.pngimage.png

这样屏幕展示插件配置已经完成了,接下来我们要实现自己的屏幕显示插件。

3、编写自己的插件

    打卡interface/screen_display.py,模仿alerts.py编写自己的插件。代码如下:

# -*- coding: utf-8 -*-
'''
屏幕展示
参考:http://open.duer.baidu.com/doc/dueros-conversational-service/device-interface/screen_markdown
'''

import os
import datetime
import dateutil.parser
from threading import Timer
import uuid
import webbrowser

class Screen(object):
	'''
	屏幕展示
	'''
	def __init__(self, dueros):
		self.namespace = 'ai.dueros.device_interface.screen'
		self.dueros = dueros
		self.token = ""
		self.url = ""


	def html_view(self,directive):
		
		if 'dialogRequestId' in directive['header']:		
			self.token = directive['payload']['token']
			self.url = directive['payload']['url']
    		webbrowser.open(self.url)

	@property
	def context(self):
	    '''
	    获取模块上下文(模块状态)
	    :return:
	    '''
	    return {
 			"header": {
				"namespace": self.namespace,
				"name": "ViewState"
			},
			"payload": {
				"token": self.token
			}
		}


4、唤起自己的插件

./wakeup_trigger_start.sh

image.png

到此,自己已经实现了插件功能。Python SDK还有其他的插件没有实现,你可以自己DIY下。比如简单的智能设备控制插件,预祝好运!!!接下来会分享技能平台开发的个人经验,欢迎点赞。


上一篇:

【Dueross|开发日记Nov.5】Python SDK 更换唤醒词


【Dueross|开发日记Nov】Dueros、Python SDK开发日记目录

点赞  ( 0 )
收藏
评论(1)
共1条回复 最后由****aj回复于2017-12-19 21:07
#2****aj回复于2017-12-19 21:07:26

这个必须好好学习一下啊!

0
TOP