版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TOC\o"1-3"\h\u1273930929311591.1.1麦克风配置249001.1.2音响配置262551.1.3声卡配置293821.1.4录音播放测试1895981551.2.1现有唤醒词组合方式研究238531.2.2醒词语音要素研究133161.2.3训练唤醒词251571.2.4降低误唤醒率及回声消除249921.2.5提高语音识别准确率7653286811.3.1robot工作机制7591.3.2技能插件类型50041.3.3辅助模块547015761.1.1结合语音理解NLU的对话功能241191.1.2清除缓存功能284721.1.3天气查询技能264571.1.4沉浸式音乐播放器229008157本文中的智能音箱的硬件搭建和软件下载及其安装都已经在完成了,然而比硬件搭建和软件的下载更重要的就是安装配置文件。配置文件又分为硬件配置与软件配置。硬件配件为麦克风及音箱,检测声音接收信息的完整度和播放的完整度。软件配置文件主要分为项目的配置和插件的配置,其中包含网络配置,唤醒词的配置,连接平台的配置问题。上述内容,已经详细的描述了本文选择的硬件平台及其搭建,选择的麦克风和音箱,但在于树莓派来说,硬件连接只是第一步,还需要进行硬件配置。1.1.1麦克风配置对于树莓派配置麦克风来说,是必不可少的一个步骤。需要更改配置文件让usb的声卡作为默认的音频输入。测试麦克风之前,查看录音设备:arecord-l如图4-1是执行命令后出现的设备显示,出现已有的录音设备。图4-1识别到的录音设备当麦克风使用的是Respeaker2MicsPiHAT时,也需要安装相应的驱动如下:gitclone/respeaker/seeed-voicecard.gitcdseeed-voicecardsudo./install.shreboot1.1.2音响配置配置完耳朵以后,就需要配置输出的硬件耳朵——也就是音响装置了,播放音响的配置与麦克风设置有异曲同工的地方。只有查查找识别到相应的设备后,才可以进行声卡的配置。测试播放器之前,查看播放设备:aplay-l图4-2识别到的播放设备则将会出现已经连接到的播放设备,如图4-2所示。综上,已经找到了播放和录音设备的card和其代码,接下来则可以开始设置声卡。1.1.3声卡配置首先,在用户目录下编辑文件~/.asoundrc,如果内置文件里没有这个文件就新建一个:touch/home/gec/.asoundrc修改默认设备:sudo/.asoundrc可通过修改配置文件,改为当前插入的USB声卡。修改为图4-3的配置内容后保存到~/.asoundrc文件。图4-3修改声卡配置其中,如果保存文件为playback.pcm{typeplugslave.pcm"hw:0,0"}capture.pcm{typeplugslave.pcm"hw:1,0"},则对应配置内容的意思就是音频输入使用声卡1(也就是usb声卡),输出使用的声卡0,即板载声卡。依据此方法可以找到相应的配置声卡。当使用的是二阵列麦克风时,装驱动完毕后,进行对应配置,和上诉步骤相同,使用aplay-l命令查看是否有录音设备,再使用alsamixer进行调整。开启后,先重点设置好Headphone、Speaker、Playback的音量,3D也可以适当开一些,可以加强其效果。结束后再按F4键可以切换到录音设置界面,最后一步再把Capture也开大,综上步骤后,关于Respeaker2MicsPiHAT的配置也完成。1.1.4录音播放测试声卡配置完毕后,需要查看配置是否正确或者是需要更改,而后可以通过录音、播放来检测。接下来就是介绍录音及其播放。在终端输入:rectemp.wav即可录音,按Ctrl+C结束录音。或者可以输入测试录音3秒:arecord-d3temp.wav。若声卡配置正确的话,则会出现如图4-4的界面录音界面。图4-4录音测试界面录音结束后,进行播放测试。在终端输入:aplaytemp.wav即可播放录音看看效果,如果顺利的话,就可以听到刚刚录音的声音。录音测试结果,若发现录入的声音很小,并且得靠话筒很近时,可以设置麦克风效果加强一些,但是对应的会带来一定的噪音,可以输入指令:alsamixer,会出现如图4-5界面,可以进行声音大小的调节。图4-5音量调节界面如果效果理想,此时可以将当前配置保存,输入如下指令:sudoalsactl--file=asound.statestore。但也遇到了时常重启后,配置丢失的现象,故为了避免开机音量被重置,可以将asound.state文件拷贝到/var/lib/alsa目录下:sudocpasound.state/var/lib/alsa/,防止配置丢失。传统的人机交互方式常常需要通过手动按钮来启动,然而这样的方式在需要解放双手和远场的环境中显得使用不到位,而且在使用中,设备也难以做到监听并迅速翻译说话的内容并理解分析语句意思,那么这里需要一个触发机制,触发后设备就开始分析用户需求,否则设备处于待机状态[23]。影响语音唤醒成功因素分为输入和输出。对于输入的影响来说,主要因素有唤醒词和唤醒方法。输出的影响因素有四个方面,分别是唤醒响应速度、唤醒反应方式、唤醒成功率[19]。如下图4-6所示,语音交互流程被划分为五个环节——唤醒、响应、输入、理解、反馈。而其中设置一个合适的唤醒词也是重中之重,接下来就开始研究唤醒词和其设计。图4-6语音交互流程图可以了解到,整个交互过程中里唤醒是每一次用户与语音产品交互的第一个接触点也就是唤醒体验至关重要[26],其体验直接影响用户对说话者“第一印象”的智能。根据2018年时,百度人工智能交互设计院针对唤醒词所展开的唤醒率实验研究,主要通过以下两个方面进行了剖析与研究:第一,现有唤醒词组合的研究;第二,则是唤醒词语音要素研究[27]。1.2.1现有唤醒词组合方式研究现如今,风靡全球的各款智能音箱,均有一个耳熟能详的唤醒词,包括“小度小度”“小爱同学”“叮咚叮咚”等等,然而他们的取名也是各有考究各有学问。研究人员在市场上各款的智能音箱中,从各种语音交互设备里分解了各唤醒词的组合,并为用户们提供了根据其个人喜好进行评估的唤醒的各种组合。如图4-7所示的即是在“名字”基础上的不同八种组合的归纳,根据实验结果可以了解到,在以不同组合唤醒词方式中,“名字+名字”的组合方式最受用户喜欢;而“品牌+名字”的形式最不被用户喜欢。例如百度智能音箱所采用的唤醒词“小度小度”,就是“名字+名字”与“小+字”相配合的唤醒词范例[29]。图4-7现有的唤醒词归纳1.2.2醒词语音要素研究除开用户喜欢唤醒词类型的程度来说,设置唤醒词的另一个关键部分是唤醒词念起来的流畅感。对大众来说,音节是听觉上最容易分辨出来的语音单位,汉字中一个汉字读音就是一个音节,如图4-8音节构成的示图,每个基本音节都是由声调、声母和韵母三个部分构成[30]。在理想条件下,对唤醒词每一音节的声调、声母和韵母进行研究,但是由于音节数的增加,研究变量数将大幅度增长,实验复杂程度也是不言而喻。从生活经验来说,人们在起名的时候,都会考虑尾音节的发音。图4-8音节的构成示图研究人员调查结果表明,首先从声调方面,用户最喜欢的声调为阴平(1声);另外相较“仄声”来说(3声上声、4声去声),用户更加喜欢的为“平声”(1声阴平、2声阳平)。在声母方面,用户更多喜欢的是尾音声母为零声母。最后对于韵母方面,从韵母发音时的开口口型来研究,用户更喜欢开口口型较大的齐齿呼和开口呼[30]。1.2.3训练唤醒词通过上文的介绍,接下来就可以设置个性化的唤醒词。首先,需要创建一个配置文件以便于方便配置唤醒词,这个工作可以交给wukong-robot辅助完成。在终端输入指令:cdwukong-robot来打开wukong-robot文件夹,接下来在wukong-robot的根目录下执行:python3wukong.py。第一次启动后,提示用户目录下创建一个配置文件,输入y即可。配置文件将会保存在~/.wukong/config.yml中。hotword:全局唤醒词。默认设置为“孙悟空”(wukong.pmdl)/do_not_bother/on_hotword:让wukong-robot进入勿扰模式的唤醒词。默认为“悟空别吵”文件名为“悟空别吵.pmdl”。/do_not_bother/off_hotword:让wukong-robot结束勿扰模式的唤醒词。默认为“悟空醒醒”文件名为“悟空醒醒.pmdl”。对于设置个性化的唤醒词,第一步登录/网站中,训练个性化的模型。第二步下载pmdl模型并放到~/.wukong中。第三步,就是修改config.yml的model配置,修改为已经训练好的模型的文件名。如图4-9显示的就是个性化的snowboy唤醒词训练界面,需要三个语音示例训练唤醒词,合成一个.pmdl文件即为训练成的上传文件。图4-9个性化唤醒词设置界面此外,snowboy的唤醒准确率与录制时的设备环境也有很大的关系,不同的设备录制出来的唤醒词模型相对应的使用效果也会大打折扣。1.2.4降低误唤醒率及回声消除设置好唤醒词后,就会出现误唤醒的现象。由于设备唤醒的高灵敏,更容易触发更多的误唤醒。当使用者在聊天或者看电视之时,就时常遇到身边的智能音箱突然被唤醒,导致使用者被“插话”,让使用者不胜其烦。而降低误唤醒率也是至关重要的一个环节。降低唤醒率在不改变硬件条件的情况下,暂时有三种方法,分别为有几种策略可以优化这个问题:第一是重新训练唤醒词,第二是适当调低snowboy敏感度,第三开启回声消除。关于训练唤醒词,在前面的章节已经详细的描述,如果设置的唤醒词不恰当,导致容易误唤醒,那么下一个唤醒词应该选择发音比较丰富,从而不容易被唤醒的词。比如“孙悟空”就比“悟空”要好,相对比于“叮当叮当”来说“你好叮当”就更恰当一些。第二种方法来说,当唤醒词已调整至合适时,仍易被误唤醒,可以适当调低snowboy的敏感度。在配置文件($HOME/.wukong/config.yml)中,snowboy可以更改以下配置指令:#snowboy离线唤醒sensitivity:0.4#灵敏度silent_threshold:15#判断为静音的阈值,环境吵闹时可变换recording_timeout:5#录制语音最大长度(秒)其中,sensitivity是snowboy的灵敏度。灵敏度设置与离线唤醒的成功率与误唤醒率有着直接的关系。如果灵敏度调得太高,wukong-robot可以很容易被唤醒,但是对于被误唤醒的概率也会相应增大。但是如果调得太低,也可能会导致误唤醒率大幅降低,更可能导致wukong-robot很难被唤醒,所以需要多次尝试找到一个合适的数值。第三种方法时声学回声消除(AcousticEchoCancellation,AEC),从方法上简单来说就是从麦克风录入的声音中消去音响的输出的声音。AEC解决网络电话中这样一个问题:A与B进行通话,A处有麦克风和扬声器用来分别采集A的声音和此刻播放B的声音,而B处也有麦克风和扬声器用来分别采集B的声音和此刻播放A的声音。为了消除这样类似于回声的声音,想要采用声学回声消除方法,在Linux上,首先需要安装ec:sudoapt-get-yinstalllibasound2-devlibspeexdsp-devgitclone/voice-engine/ec.git然而,对于respeaker2MicHAT来说并不支持硬音频回路。所以需要使用软件的方式来进行回声消除,可以应用脚本,用来实现回声消除:pacmdload-modulemodule-pipe-sinksink_name=ec.sinkformat=s16rate=16000channels=1file=/tmp/ec.input将之保存为$HOME/start_ec.sh。在启动wukong-robot前,先执行这个脚本:shstart_ec.shCopytoclipboardErrorCopied此处则需要测试以下,是否arecord,aplay都处于正常工作状态,如果没有问题,再启动wukong-robot。此时将可以看到ec输出内容为:defaultpipesize:65536newpipesize:8192skipframes200EnableAEC当输出为以上内容时,可以说明回声消除已经启用。1.2.5提高语音识别准确率语音识别的应用中不同的厂商,都各自提供了录入自己的词库以提升识别率的方案。本文采用的是百度ASR,那么以百度ASR为例,可以将常用的指令成一个command.txt文件,登录应用管理页面,在“自定义设置”中“语音识别词库设置”项目中,点击“进行设置”的按键,上传该指令文件。文件内容为音乐、下一首歌、下首歌、切歌、上一首歌、上首歌、停止、绕口令、笑话、搜索等等文字。设置完最主要的唤醒词后,唤醒智能音箱后需要干什么,则就需要用到智能音箱的互动技能了。所采用到的所谓技能如唱歌、查询天气,就用到了各个功能插件。插件是一种应用程序接口,其遵循着一定的规范来编写的程序。能运行在程序规定的系统平台下,也支持同时多个平台,但是并不能脱离指定的平台单独运行。接下来简要介绍,本文中所配置的各个插件及其功能。1.3.1robot工作机制本文中所用到的插件具体是怎么实现的,存放在哪里,就基于wukong-robot的工作机制。接下来就介绍wukong-robot的工作机制,以及具体是怎么进行插件执行的。首先wukong-robot被唤醒后,用户的语音指令语音转换识别。接着wukong-robot会对识别到的文本再进一步进行语义理解(NLU),得到解析结果。接着轮询每个可用插件,进行相应的技能匹配,交给适合处理该指令的技能插件去处理。插件处理过程中,还可以根据需要使用TTS引擎进行合成成语音,最后播放给用户[28]。轮询是一种由CPU来决策应该如何提供周边的设备服务的方式。轮询法的意思是从CPU发出定时的询问,而后依序询问每一个周边的设备判断其是否需要服务,如果有需要就给予服务,等待服务结束后再询问下一个周边设备,以此循环[30]。如图4-10为wukong-robot的工作机制图示。图4-10wukong-robot工作机制示图在第3步中,对此处插件的轮询机制简要介绍:在初始化阶段时,依次扫描plugins目录、$HOME/.wukong/contrib目录与$HOME/.wukong/custom目录下的可用插件。其中,可用插件的判定标准为:是一个Plugin类包含继承了AbstractPlugin基类。在配置文件中没有将这个插件的enable设为false。在扫描过程中,若存在某插件设置了PRIORITY的属性,则将对其优先级进行重排。默认都为0,PRIORITY值设得越大,则优先级越高。在轮询过程中,wukong-robot会根据优先级逐个执行插件的isValid()方法,如果值为True,则调用该插件的handle()方法进入处理。1.3.2技能插件类型本文中,wukong-robot支持两类技能插件,即为普通技能插件和沉浸式技能插件对于普通技能,适用于普通查询。在正常模式下,交互模式是唤醒wukong-robot,说出命令并激活技能,这将完成处理并报告结果。如果非要向用户提问,可以使用self.activeListen()方法进入主动聆听,从而完成多轮对话。第二个是沉浸式技能插件,适用于音乐,广播。交互的通常方式是唤醒说出命令并激活技能,这将进入更广泛的技能场景。在这个能力的最广泛的场景中,用户唤醒wukong-robot后,允许它更多地响应指令来执行丰富的操作(例如“下一首歌曲”、“这是什么歌曲”等指令)。如果只是唤醒后的简单对话,则允许wukong-robot在响应后恢复更广泛的技能场景例如,用户在音乐场景中唤醒wukong-robot并问完时间后,wukong-robot可以自动恢复音乐播放)。简单的功能插件应该只实现两个接口,isValid()和handle(),用于判断用户命令是否适合功能插件处理以及如何处理。综合能力插件基于常用的能力插件,需要将IS_IMMERSIVE成员属性设置为true。此外,可以根据需要实现isValidImmersive()、restore()和pause(),用于支持更多沉浸模式下的命令。1.3.3辅助模块wukong-robot种提供了多个便利模块,可以用于完成读取用户的配置、相关目录和文件位置、发送邮件、打日志、音频格式转换、文件读写等等任务。在动手开发wukong-robot的技能前,首先重要的是了解这些模块,才有助于灵活地实现自己要的功能。robot.config:配置模块,用于获取wukong-robot的配置信息。最常用的是get()方法,可以用于获取指定的配置的值,并允许提供一个默认值。robot.constants:用于获取wukong-robot相关的目录和文件的位置信息。robot.logging:日志模块,用于打印日志。robot.utils:其他辅助脚本的集合,包含了邮件发送、文件读写、wav/mp3音频格式互转、缓存管理等方法。robot.sdk.unit:百度UNIT模块,可用于将用户指令解析成结构化数据,并支持提取意图、词槽和回复文本。经过上文的研究后,已经基本明白了wukong-robot的工作机制、拥有的技能插件类型和研发插件的辅助模块。那么接下来,主要做的就是技能开发的研究了,技能开发也顾名思义,智能音箱可以做点什么了。1.1.1结合语音理解NLU的对话功能结合语音理解NLU的对话功能整个对话的设计如图4-11的流程框图,如下开始进行详细的步骤解析。图4-11语义理解对话流程框图第一步可以先设计一个最简单的版本,首先通过关键词“打个招呼”来触发这个插件响应,无需任何配置项,需处理用户的指令,直接回复“helloworld”。这个最简单的版本实现与解析如下:fromrobot.sdk.AbstractPluginimportAbstractPlugin#将插件的基类robot.sdk.AbstractPlugin引入classPlugin(AbstractPlugin)#写一个名为Plugin的类,这个类集成了AbstractPlugin基类。defhandle(self,text,parsed)#实现了AbstractPlugin的接口handle()。这里的handle()用于执行处理。self.say('helloworld!',cache=True)#插件的处理过程就是说一句“helloworld”cache参数为True则将这句话缓存下来,再运行时直接播放缓存语音。defisValid(self,text,parsed)#实现了AbstractPlugin的接口isValid()用于判断用户的指令是否适合交给这个插件处理。return"打个招呼“intext”#设置让用户的指令中包含了“打个招呼”关键词就执行响应。编辑完毕后,将其保存到custom目录下,并取名为HelloWorld.py,设置完毕后可以试试唤醒后进行交互。当想要更智能的版本,则可以结合NLU自然语言理解,可以让对象在指令中包含人名,并支持对某人问好,如“跟王力宏打个招呼”等等。经过这样操作,当wukong-robot接收到这个指令时,首先判断是否适合交给这个插件执行。如果是,再进一步提取出人名,并说“您好,<人名>”。因为在轮询插件之前,wukong-robot会先对用户的指令交给百度UNIT解析,并将解析得到的结构化信息作为parsed参数传给插件。第一步要做的,就是训练百度平台UNIT的技能,首先在百度UNIT中训练这个技能。注册登录百度UNIT后,在“我的技能”面板中点击“新建技能”按钮,在弹出的窗口中填好信息,完成创建。下一步,需要来创建一个对话意图。进入这个技能后,点击“新建对话意图”,新建一个叫做HELLO_WORLD的意图,并填好相关的信息。如图4-12是上述的百度UNIT的新建技能面板。图4-12新建技能面板在上面中已经定义了一个叫做user_person的可选词槽,用来去确定要向谁问好。在创建的时候,可以复用UNIT自带的sys_pe其中可以是人物,包含虚拟人物在内的各类人名的系统词槽,还可以根据需要再添加多一些自定义词典。接下来在左侧面板点击“训练数据”的“对话样本集”,在对话样本集面板中点击“新建对话样本集”,创建样本集。如图4-13中已经创建好的样本,在这个样本集中尽可能丰富对话语料,并确保正确标定。图4-13创建对话样本集创建好对话样本集后,训练UNIT技能这一步也已经完成了,完成后就可以对该技能进行训练和测试,应该要先确保模型正常工作,并且不会被误判为其他技能。如果判断不理想,可以继续补充,直到结果符合预期为止。训练好UNIT技能后,就要开始使用了,在wukong-robot中利用这个技能来对普通文本进行解析,判断是否是HELLO_WORLD意图,并提取出user_person这个词槽里的值。此时,使用时应该首先确保配置文件里的unit配置,如图4-14为UNIT的对话配置文件。图4-14UNIT的对话配置文件对于编辑程序,如图4-15中,在isValid()的实现中,使用unit.hasIntent()方法从百度UNIT解析的结果中判断是否包含HELLO_WORLD意图,如果是,则命中这个技能。在handle()的实现中,先通过unit.getSlots()方法取出所有词槽,再利用词槽的name属性和normalized_word属性遍历词槽找出名为user_person的词槽对应的人名。如果能找到,就语音反馈“你好,<人名>”;若查询失败,则说“helloworld”。图4-15对话功能插件代码以上都配置完成,则完成了结合NLU的对话功能,如果有需要更多的对话,也可以按照这个方法,在百度UNIT上继续载入自己的样本集。1.1.2清除缓存功能清楚缓存这个功能对于计算机来说,是必不可少的,可以增加使用寿命、避免卡顿,清除缓存可以说是一个有真正用途的普通技能插件。为了节省用于TTS所消耗的时间,wukong-robot支持将语音文件缓存到temp目录,但是如果使用时间久了,目录里的文件数量就会越来越多,会占用大量的设备存储空间。另外,如果TTS配置改了发音人的音色,没有清理已有的缓存语音,也会导致wukong-robot使用过程中混杂着多种音色的奇怪体验。由此,这里可以开发一个插件,来帮助清除缓存。整个过程如图4-16的流程框图。图4-16清除缓存设置流程框图其中的第四步骤里的配置文件里设置清除文件,则如图4-17为清除缓存的配置文件。图4-17清除缓存配置文件本文中将此插件设计成只要指令中包含关键词“清除缓存”、“清空缓存”或者“清缓存”就触发这个插件响应。且无需任何配置项,无需处理用户的指令,直接清除缓存,并告知用户“缓存目录已清空”。紧接着就是编辑程序,首先我们需要修改isValid()的实现,将这个判断规则改为判断指令文本中是否包含“清除缓存”、“清空缓存”或者“清缓存”中的任意一个。我们可以改成这样:defisValid(self,text,parsed):returnany(wordintextforwordin["清除缓存",u"清空缓存",u"清缓存"])接下再设置handle()方法,现在需要修改为删除缓存并说“缓存已清空”。constants模块的TEMP_PATH变量提供了temp目录的绝对路径,而utils模块则给予了检查并删除文件/文件夹的方法check_and_delete(),这里可以利用这些实现一个删除缓存目录的功能。程序代码中引入了一些必要的模块,对于具体的编程内容,这里放到附录部分展示。1.1.3天气查询技能对于对话功能来说,查询天气插件也属于普通插件技能,但是要复杂的多,这个插件包含了自定义配置项、网络请求和百度UNIT解析。要实现天气预报功能,更需要查询现有的一些开放的天气API。本文采用的是一款免费的天气API为心知天气。其中逐日天气预报是免费的,可以利用来实现我们要的天气预报查询技能。如图4-18是天气查询的设置的大体过程流程框图,可以按照如图来设置天气查询技能。图4-18天气查询设置流程框图选择心知天气的另一个原因是是其API文档非常详细,如图4-19是官方提供的一个Python版的示例:图4-19心知天气API文档示例先是定义了一个fetchWeather()函数,该函数使用requests模块发起API请求。这里的API是心知天气API的地址;KEY则是心知天气的API密钥,每个注册账户都有一个密码;location是城市名,例如深圳就是深圳或者shenzhen;而language和unit分别表示语言和单位,是可选参数。那么接下来,就需要设计插件了。只要百度UNIT判断为天气查询意图,即认为适合交给本插件进行处理。APIkey可以作为这个插件的一个配置项,而城市名称则可以在使用时从用户的指令中提取出城市词槽。第一步,先修改isValid()实现,将这个判断规则改为判断是否属于天气意图。一种简单的思路是直接通过诸如“天气”之类的关键词来判断,不过这样可能会误判。例如,如果用户说的是“如果明天天气好,我就出去骑车”,此时突然回复天气就显得不太恰当。所以,更智能的方案是使用百度UNIT来帮判断意图。在写上述对话技能中,就可以了解到UNIT技能的训练方法。如图4-20是百度UNIT自带的预置技能,其中就包括天气技能。图4-20百度UNIT天气技能界面于是,可以直接利用这个技能来实现对于天气查询功能。将该技能添加到UNIT机器人中。如对于下列程序的修改:defisValid(self,text,parsed):returnunit.hasIntent(parsed,'USER_WEATHER')第二步,对于handle()的实现方法,在这个方法中,需要解决两个任务。一是将APIkey作为这个插件的一个配置项,而城市名称则可以在使用时从用户的指令中提取出城市词槽。如果取不到,再从配置文件location选项中读取;二需要尝试从指令中提取出城市信息,如果有提取到,那么将其作为fetchWeather()的location参数;如果没提取到,就将配置文件中的location配置作为fetchWeather()的location参数,调用心知天气的API,取出天气信息并读给用户。紧接着先把APIKey放进配置项如图4-21中配置。接下来可以设计如下的配置,将其加进$HOME/.wukong/config.yml中。图4-21心知天气的配置文件其中,weather是我们刚刚给这个技能定义的SLUG。如果没有显式定义,那这里就应该写Weather,因为此处插件文件名是Weather.py;key是心知天气的APIKey。由于这个插件比较复杂,又涉及到网络调用,为了方便调试和定位问题,引入了robot.logging模块帮助我们打log。且调用了前面编写的fetch_weather()成员方法来获取天气数据,这个接口会直接返回未来三天的天气,所以我们在还将三天的结果拼成三句话并朗读给用户。对于全部的编程内容,就放到附录部分展示。1.1.4沉浸式音乐播放器前面的几个技能都是普通技能,那么接下来的选择一个沉浸式技能插件。有别于普通技能插件,沉浸式技能插件特点在于能技能服务时,响应更多类型的指令,且具唤醒后自动恢复技能的能力。如图4-21是设置沉浸音乐播放器设置流程框图。沉浸式技能最典型的是音乐播放器。通常的交互模式是唤醒后,说出指令并触发技能,进入该技能的沉浸式场景。在该技能的沉浸式场景下,可以响应更多指令来完成更丰富的操作,例如“下一首歌”、“这是什么歌”等等。如果唤醒后只是简单的聊天,而不是进入其他技能,那么还允许wukong-robot在回答后恢复该技能的沉浸式场景,例如用户在音乐场景中唤醒wukong-robot并问完时间后,wukong-robot可以自动恢复音乐播放。图4-21沉浸音乐播放器设置流程框图编写一个沉浸式技能插件和普通技能插件大同小异,仅仅只需要设置IS_IMMERSIVE成员属性为True,根据需求实现多三个方法:isValidImmersive()方法、restore()方法和pause()方法即可,这三个方法分别用来支持沉浸模式下更多指令的响应、恢复技能和暂停技能。其中除了上文已经运用提到过的isValid()的实现、config.yml中的配置以及handle()的实现,也出现了沉浸式插件还有额外的两个问题,分别对应了isValidImmersive()问题在在该技能工作的过程中,还可以唤醒响应后哪些其他指令和restore()问题在于如果在该技能工作的过程中打断了这个技能,后期继续这个技能方法。本文的设置思路如下:第一、把音乐路径作为一个配置项path,例如:##本地音乐插件LocalPlayer:path:"/home/pi/musics";第二、扫描该目录下的.mp3格式的音乐,得到音乐列表,从第一个开始播放音乐;第三、在音乐播放模式下,还能支持响应如“上一首”、“下一首”、“停止播放”、“大声一点”、“小声一点”等等指令;第四、如果播放过程中唤醒打断了技能,还可以恢复播放。如图4-15,程序中设置了一个IS_IMMERSIVE成员变量,并将值改为True。用于告知wukong-robot这是一个沉
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建农林大学《金融学基础题库》2025-2026学年期末试卷
- 闽南理工学院《中医耳鼻喉》2025-2026学年期末试卷
- 皖北卫生职业学院《保险法》2025-2026学年期末试卷
- 南昌航空大学《外国法制史》2025-2026学年期末试卷
- 安徽绿海商务职业学院《国际结算》2025-2026学年期末试卷
- 华东交通大学《西方经济学题库》2025-2026学年期末试卷
- 福建船政交通职业学院《新媒体概论》2025-2026学年期末试卷
- 福建农林大学金山学院《学前卫生学》2025-2026学年期末试卷
- 贵州特岗政治试题及答案
- 铁合金炉外法冶炼工安全生产知识考核试卷含答案
- 耳鼻喉科门诊服务优化
- 2025年10月自考04184线性代数经管类试题及答案含评分参考
- 传热学章熙民课件
- 批生产记录填写培训
- 焊接有毒害气体防护措施 (一)
- 2025年广东省高职院校五年一贯制转段考试文化课测试(数学)
- 期货交易指标应用策略及实战分析
- 下载食品安全法课件
- 表面处理工艺规定
- 2025年事业编e类护理类试题及答案
- 2026春夏·淘宝天猫运动户外鞋服趋势白皮书
评论
0/150
提交评论