这一章将进入机器人语音交互的学习,让机器人能跟人进行语音对话交流。这是一件很酷的事情,本章将涉及到语音识别、语音合成、自然语言处理方面的知识。本章内容:
1.语音交互相关技术
2.机器人语音交互实现
3.自然语言处理云计算引擎
其实要自己做一款语音对话机器人还是很容易的,我们只需要选择好语音识别、语音合成、自然语言处理的技术,就可以在一款树莓派3开发板上实现了。由于语音交互系统的核心技术是云端自然语言处理技术,所以我们可以选择网上免费提供的语音识别、语音合成等现有方案,将主要精力用在云端自然语言处理技术的研发上。语音识别与语音合成SDK有:科大讯飞、百度语音、Google…,对于我们墙内玩家…(Google头疼)。经过我自己的实测,发现比较好用的免费SDK是科大讯飞家的,所以强烈推荐。为了测试方便,我先推荐图灵机器人API作为云端自然语言处理技术。等大家将整个语音交互系统的工作原理学会后,随时可以将图灵机器人API替换成自己的云端服务器,从而将主要精力转移到云端自然语言处理技术的研发上。说了这么多,我们先来看看咱们的机器人语音交互软硬件实现的真容吧,如图5。
(图5)机器人语音交互软硬件实现
USB麦克风拾取声音,USB声卡和音响播放声音,树莓派3开发板上运行语音识别、语音合成、QA及NLP请求。其中,语音识别和语音合成采用科大讯飞的SDK,QA及NLP请求调用图灵机器人的API接口。
这里特别说明一下,为什么选用USB声卡而不用树莓派自带AV声卡的原因。你可以直接将耳机插口插入树莓派的AV接口试试,肯定很酸爽!杂音太大。这里就需要硬件支持。杂音原因: 因为树莓派3的AV接口是音频和视频合并输出的,这个接口是美标接口,而在中国是国标的,接口的接地和音频是相反的,这就导致根本不能用了。另外对播放器的支持并不完善。
科大讯飞提供用于研究用途的语音识别、语音合成的免费SDK,科大讯飞分发该SDK的形式是库文件(libmsc.so)+库授权码(APPID),库文件libmsc.so与库授权码APPID是绑定在一起的,这也是大多说商业软件分发的方式。
利用科大讯飞提供的SDK库文件和官方API说明文档,我们就可以开发出自己的语音交互实例程序,当然也可以开发对应的ROS程序。在我们的miiboo机器人上开发的语音交互ROS功能包叫miiboo_asr。miiboo_asr功能包文件组织结构,如图11。其中lib文件夹下存放科大讯飞提供的libmsc.so库文件,iat.cpp是语音识别节点源文件,tts.cpp是语音合成节点源文件,qa_nlp.cpp是QA&NLP逻辑处理节点源文件,其他的文件我们可以不用关心。
(图11)miiboo_asr功能包文件组织结构
了解了miiboo_asr功能包的基本情况后,我们就开始编译安装吧。首先,将miiboo_asr包拷贝到~/catkin_ws_apps/src/目录下。然后将上面申请到的树莓派3平台对应的Linux SDK库libmsc.so文件拷贝到miiboo_asr/lib/中,并将miiboo_asr/CMakeLists.txt文件中有关libmsc.so的路径替换为你存放该libmsc.so的实际路径。如图12。
(图12)CMakeLists.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中的设备0为3.5音频输出,卡0设备1为HDMI音频输出,卡2设备0为USB声卡输出。这里我推荐使用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库了。
如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加QQ技术交流群(117698356)