摘要
这一章将进入机器人语音交互的学习,让机器人能跟人进行语音对话交流。这是一件很酷的事情,本章将涉及到语音识别、语音合成、自然语言处理方面的知识。本章内容: 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库: 由于科大讯飞开放平台默认只提供PC端x86架构的Linux库,所以如果我们想在树莓派3(树莓派3为ARM架构)上使用科大讯飞的Linux SDK库,就需要另外申请。其实申请方法也很简单,进入科大讯飞中我的语音云页面: http://www.xfyun.cn/index.php/mycloud/app/linuxCrossCompile 进行树莓派Linux平台库文件交叉编译申请,选择应用(必须是linux平台的应用),按照默认勾选全部在线服务,平台架构ARM硬件型号Broadcom BCM2837(树莓派3代b型,即树莓派3的SOC,其余版本树莓派,树莓派2为BroadcomBCM2836,更早的版本为BroadcomBCM2835),处理器位数32,运行内存填了1GB。最后记得填上自己的邮箱,提交后,如填写无误正确,你的邮箱将收到可下载库的链接,下载解压后得到libmsc.so,这个库文件就是我们申请的树莓派3平台对应的Linux SDK库了。如图9。关于交叉编译器和编译脚本,从这里下载,具体交叉可以参考这一篇 http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=32028&highlight=
(图9)申请树莓派3平台对应的Linux SDK库
关于这个库文件对应的库授权码APPID,可以在[我的应用]界面查看,如图10。
(图10)查看库文件对应的库授权码APPID
2.2.编译安装讯飞语音交互实例ROS版DEMO
利用科大讯飞提供的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库了。