SLAM+语音机器人DIY系列:(七)语音交互与自然语言处理——2.机器人语音交互实现

摘要                                                    

这一章将进入机器人语音交互的学习,让机器人能跟人进行语音对话交流。这是一件很酷的事情,本章将涉及到语音识别、语音合成、自然语言处理方面的知识。本章内容:

1.语音交互相关技术

2.机器人语音交互实现

3.自然语言处理云计算引擎



2.机器人语音交互实现                        

其实要自己做一款语音对话机器人还是很容易的,我们只需要选择好语音识别、语音合成、自然语言处理的技术,就可以在一款树莓派3开发板上实现了。由于语音交互系统的核心技术是云端自然语言处理技术,所以我们可以选择网上免费提供的语音识别、语音合成等现有方案,将主要精力用在云端自然语言处理技术的研发上。语音识别与语音合成SDK有:科大讯飞、百度语音、Google…,对于我们墙内玩家…(Google头疼)。经过我自己的实测,发现比较好用的免费SDK是科大讯飞家的,所以强烈推荐。为了测试方便,我先推荐图灵机器人API作为云端自然语言处理技术。等大家将整个语音交互系统的工作原理学会后,随时可以将图灵机器人API替换成自己的云端服务器,从而将主要精力转移到云端自然语言处理技术的研发上。说了这么多,我们先来看看咱们的机器人语音交互软硬件实现的真容吧,如图5。

5机器人语音交互软硬件实现

USB麦克风拾取声音,USB声卡和音响播放声音,树莓派3开发板上运行语音识别、语音合成、QA及NLP请求。其中,语音识别和语音合成采用科大讯飞的SDK,QA及NLP请求调用图灵机器人的API接口。

这里特别说明一下,为什么选用USB声卡而不用树莓派自带AV声卡的原因。你可以直接将耳机插口插入树莓派的AV接口试试,肯定很酸爽!杂音太大。这里就需要硬件支持。杂音原因: 因为树莓派3的AV接口是音频和视频合并输出的,这个接口是美标接口,而在中国是国标的,接口的接地和音频是相反的,这就导致根本不能用了。另外对播放器的支持并不完善。

2.1.获取科大讯飞的SDK                                                   

科大讯飞提供用于研究用途的语音识别、语音合成的免费SDK,科大讯飞分发该SDK的形式是库文件(libmsc.so+库授权码(APPID),库文件libmsc.so与库授权码APPID是绑定在一起的,这也是大多说商业软件分发的方式。

注册科大讯飞账号:

首先,前往讯飞开放平台https://www.xfyun.cn),注册科大讯飞账号,注册好后,就可以进入自己的控制台进行设置了,如图6

6注册科大讯飞账号及登录

创建应用:

我们要在科大讯飞的开放平台创建我们需要的应用,这样讯飞就根据应用类型给我们生成对应的SDK库。

进入讯飞开放平台的控制台后,找到左侧栏的[创建应用],按要求填写各个选项,注意[应用平台]一栏填Linux,因为我们用的树莓派3开发板装的是Linux系统,如图7

7创建应用

创建应用完成后,就要给该应用添加相应的AI技能了,由于我们需要讯飞的在线语音合成、在线语音识别(也就是语音听写),所以添加这两个服务就行了。如图8

8添加语音合成与识别服务

申请树莓派3平台对应的Linux SDK库:

由于科大讯飞开放平台默认只提供PCx86架构的Linux库,所以如果我们想在树莓派3(树莓派3ARM架构)上使用科大讯飞的Linux SDK库,就需要另外申请。其实申请方法也很简单,进入科大讯飞中我的语音云页面:

http://www.xfyun.cn/index.php/mycloud/app/linuxCrossCompile

进行树莓派Linux平台文件交叉编译申请,选择应用(必须是linux平台的应用,按照默认勾选全部在线服务,平台架构ARM硬件型号Broadcom BCM2837(树莓派3b型,即树莓派3SOC,其余版本树莓派,树莓派2BroadcomBCM2836,更早的版本为BroadcomBCM2835),处理器位数32,运行内存填了1GB最后记得填上自己的邮箱,提交后,填写无误正确,你的邮箱收到可下载库的链接,下载解压后得到libmsc.so这个库文件就是我们申请的树莓派3平台对应的Linux SDK库了。如图9。关于交叉编译器和编译脚本,从这里http://pan.baidu.com/s/1pLFPTYr下载,具体交叉可以参考这一篇

http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=32028&highlight=

9申请树莓派3平台对应的Linux SDK

关于这个库文件对应的库授权码APPID可以在[我的应用]界面查看,如图10

10查看库文件对应的库授权码APPID

2.2.编译安装讯飞语音交互实例ROSDEMO

利用科大讯飞提供的SDK库文件和官方API说明文档,我们就可以开发出自己的语音交互实例程序,当然也可以开发对应的ROS程序。在我们的miiboo机器人上开发的语音交互ROS功能包叫miiboo_asrmiiboo_asr功能包文件组织结构,如图11。其中lib文件夹下存放科大讯飞提供的libmsc.so库文件,iat.cpp是语音识别节点源文件,tts.cpp是语音合成节点源文件,qa_nlp.cppQA&NLP逻辑处理节点源文件,其他的文件我们可以不用关心。

11miiboo_asr功能包文件组织结构

了解了miiboo_asr功能包的基本情况后,我们就开始编译安装吧。首先,将miiboo_asr包拷贝到~/catkin_ws_apps/src/目录下。然后将上面申请到的树莓派3平台对应的Linux SDKlibmsc.so文件拷贝到miiboo_asr/lib/中,并将miiboo_asr/CMakeLists.txt文件中有关libmsc.so的路径替换为你存放该libmsc.so的实际路径。如图12

12CMakeLists.txt文件中有关libmsc.so的路径修改

接着我们需要将miiboo_asr/launch/xf.launch文件中的各个appid、声卡硬件地址、麦克风硬件地址设置成自己实际的值。关于与libmsc.so库绑定的appid上面已经介绍了查看方法,而声卡硬件地址、麦克风硬件地址的查询也很简单。

麦克风硬件地址的查询直接使用命令arecord -l如图13

 

13麦克风硬件地址的查询

在这里麦克风录制设备处于卡1,设备0于是我们的麦克风硬件地址就是plughw::CameraB409241”。

声卡硬件地址的查询直接使用命令aplay -l,如图14

 

14声卡硬件地址的查询

在这里声卡播放设备有三个,卡0中的设备03.5音频输出,卡0设备1HDMI音频输出,卡2设备0USB声卡输出。这里我推荐使用USB声卡输出,所以我们的声卡硬件地址就是“plughw:DAC”。

在编译miiboo_asr前,我们还需要安装一些依赖项,其实就是麦克风录音和音乐播放工具,安装命令如下:

sudo apt-get update

sudo apt-get install libasound2-dev

sudo apt-get install mplayer

现在可以编译miiboo_asr了,编译命令如下:

cd ~/catkin_ws_apps/

catkin_make -DCATKIN_WHITELIST_PACKAGES=”miiboo_asr”

编译完成后,就可以运行语音交互节点来实现语音对话了,温馨提醒,请确保树莓派已连接网络,因为语音交互节点运行时需要访问网络。启动语音交互各个节点很简单,直接一条命令:

roslaunch miiboo_asr xf.launch

节点都运行起来会听到欢迎语句“你好,欢迎使用miiboo机器人语音控制系统”之后就可以对着麦克风说出自己的指令,语音识别被转换为文本文本经图灵机器人得到应答,并通过语音合成使我们能听到回答的声音。这样一个语音交互的聊天机器人就诞生了,尽情享受和机器人聊天的乐趣吧^_^

这里说明一下,如果你使用我们的miiboo机器人,那么miiboo机器人上已经安装编译好了miiboo_asr功能包,所以只需要上面roslaunch miiboo_asr xf.launch这条启动命令,就可以开始机器人聊天之旅。但是,miiboo机器人上安装的miiboo_asr功能包的libmsc.so的访问次数和频率是有限制的,只能供学习使用。如果大家需要将miiboo_asr功能包用来二次开发或实际应用,就需要按照上面的步骤去科大讯飞官网申请自己的SDK库了。

后记                                                      

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一起讨论学习^_^

猜你喜欢

转载自www.cnblogs.com/hiram-zhang/p/10421162.html