(原创)用讯飞语音实现人机交互的功能

目前在作一款车载的项目,其中有一个需求是在开车的时候实现人与手机的对话,全过程不须要用手,只用语音操控。git

这个就相似于人与机器人的对话,机器人在后台一直待命,用户说话 机器人作出对应的反映。github

但因为用户手机电源的宝贵性,又不能让用户一直开着录音监听,这样很耗费资源。所以使用了讯飞语音提供的唤醒功能。设计

具体怎么作呢?blog

看一张流程图吧:这张流程图使用了讯飞的大部分技术(语音唤醒、语音唤醒+命令词识别、语义识别、语音合成),不废话,看图资源

流程图已经写的很清晰了,简单介绍下it

在程序启动的时候先启动唤醒,这个时候用户说唤醒词就会将机器唤醒,并 聆听命令。但若是这个时候有播报信息的话会优先播报信息,播报的时候会将唤醒暂停,播报完成后再启动唤醒。这么作有一个重要的缘由是讯飞的唤醒是一直占用录音资源的,而这个时候去播报语音会断断续续,据说这个能够设置,但播报的时候用于通常也不会去说唤醒词。后台

讯飞的唤醒有两种模式:单纯的唤醒和唤醒+命令词识别语法

单纯的唤醒会有一个唤醒成功的回调,比较简单程序

而唤醒+命令词识别不只可以唤醒,若是你在说唤醒词的同时说了一个命令,那么他也会识别这个命令,你能够很干脆的收到这个命令去执行,而不须要在启动什么语义识别后在执行命令了,这对用户来讲也是很爽的。im

可是命令词有必定的限制,就是命令词使用以前必须先构建语法,而命令词的内容必须得是提早知道的。可是若是用户说了一个 石河子大学怎么走,这个命令在你的命令词构建的语法文件里没有!怎么办?这时候你就得提示用户让用户去语义输入了。

因此我这里的构想是:用户说命令词,启动唤醒,而后识别命令词。识别命令词成功执行命令,识别命令词错误启动语义识别。

这有个缺点就是用户说了唤醒词+语义识别的内容,语义识别的内容被命令词消耗掉了,用户只有再说一次语义识别的内容才能够识别语义。

为了不这个问题,咱们在唤醒词识别后,若是命令词不能识别的时候,用合成语音提示如下用户“请问有什么能够帮您”,这个就表明机器没有识别到用户刚才的语义内容,须要 用户从新说,我是否是很奸诈o(∩_∩)o 

接下来就是语义识别了,这个没什么说的,主要的一点就是若是用户不说话你要一直让它保持录音状态吗?固然不行啊,这多耗电啊!为了帮用户省电,我还设计了一个用户不说话20s自动进入等待唤醒的状态的流程。20s怎么来?使用时间戳啊!就是每次用户命令识别成功或者唤醒成功的时候记录一个时间戳。而后下次再启动语义识别前先判断当前时间和时间戳时间是否相差大于20s,若是小于20s则继续启动语义识别,若是大于20s则启动唤醒,准备让用户说命令词来唤醒吧。

好了,差很少了。不要问我为何不一直让用户说唤醒词再执行对应的命令。若是你要干某一件事情以前老是还要说唤醒词,我估计你会疯掉的,即便你不疯别人也会认为你是神经病的。没有贬义,开玩笑,o(∩_∩)o 哈哈

 

 

个人github地址:https://github.com/dongweiq/study

欢迎关注,欢迎star o(∩_∩)o 。有什么问题请邮箱联系 dongweiqmail@gmail.com qq714094450