智能语音:好玩的语音控制是怎么实现的?学习笔记01
智能音箱的技术架构
智能音箱主要涉及拾音、前端信号处理、语音识别、自然语言处理和语音合成等技术,现在一些产品甚至提供了声纹识别技术。
当然,智能音箱最重要的是提供各种功能,完成一些任务,比如控制电灯的开和关,这被称为技能。
整体的技术架构如下图所示:
拾音
通过麦克风获取你的语音。智能音箱上一般采用麦克风阵列(Mic Array),也就是按照一定规则排列的多个麦克风,比如Amazon Echo由 7 个麦克风组成的阵列(绿色圆圈部分)。
前端语音信号处理
为了获取到相对干净的语音信号,提高后面的语音识别的准确率。相关技术如图。
语音唤醒
语音唤醒(Keyword Spotting,KWS):就是通过特定的唤醒词来激活智能音箱,以便进行后续的语音交互任务。如”小爱同学“。
语音识别
语音识别(Automatic Speech Recognition,ASR):就是将语音转换成文本,也被称为 STT(Speech to Text)。
自然语言理解
自然语言理解(Natural Language Understanding,NLU):是对语音识别生成的文本进行处理,识别用户的意图,并生产结构化的数据。
技能
技能(Skills):一般要借助后端云平台的强大能力,云平台可以提供知识图谱、家居设备远程控制和音频资源等能力。
自然语言生成
自然语言生成(Natural Language Generation,NLG):是将各种技能的响应结果组织成文本语言。比如当你询问天气时,根据获取的天气状况和温度等信息生成“北京今天晴,最高温度 5°,最低温度 -6°”这样的语句。自然语言生成和自然语言理解都属于自然语言处理(Natural Language Processing,NLP)的范畴。
语音合成
语音合成(Speech Synthesis):就是将自然语言生成的文本转换为语音的形式,提供给智能音箱播放出来,给人的感觉就像和音箱在对话。这个过程也叫做 TTS(Text to Speech)。
智能音箱的开发
麦克风阵列
麦克风阵列我使用的是 ReSpeaker 2-Mics Pi HAT,它的 2 个麦克风分布在模组的两边。我们现在来配置一下,让它可以在树莓派上正常工作。
你可以通过下面的命令安装它的驱动程序。首先,你最好切换一下树莓派的软件安装源,将它切换到国内的腾讯云安装源,这样下载安装的速度比较快。运行下面的命令修改配置文件:
$ sudo vim /etc/apt/sources.list
将文件修改为下面的内容:
deb https://mirrors.cloud.tencent.com/raspbian/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
deb-src https://mirrors.cloud.tencent.com/raspbian/raspbian/ buster main contrib non-free rpi
修改另一个软件安装源的配置文件,命令如下所示:
$ sudo vim /etc/apt/sources.list.d/raspi.list
修改后的文件内容如下:
deb https://mirrors.cloud.tencent.com/raspberrypi/ buster main
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
deb-src https://mirrors.cloud.tencent.com/raspberrypi/ buster main
然后,你需要运行下面的命令更新安装源:
$ sudo apt-get clean all
$ sudo apt-get update
现在,你可以运行下面命令安装麦克风阵列的驱动程序。因为这个驱动依赖的 wm8960 编解码器没有包含在树莓派系统的内核里面,需要重新加载内核,编译驱动,所以整个过程比较久。在等待的过程中,你可以先阅读这一讲的其他部分。
$ sudo apt-get install git
$ git clone --depth=1 https://github.com/respeaker/seeed-voicecard
$ cd seeed-voicecard
$ sudo ./install.sh
$ sudo reboot
树莓派重启之后,你可以在树莓派终端输入下面的命令,查看音频的输入和输出设备是否正常工作。
$ arecord -l
$ aplay -l
如果一切正常,我们就可以测试录音和播放功能了。在 ReSpeaker 2-Mics Pi HAT 的耳机插口上插入耳机或者扬声器,运行下面的命令,并说几句话。
$ arecord -d 5 test.wav
$ aplay test.wav
另外,你也可以通过软件 AlsaMixer(命令 alsamixer)来配置声音设置和调整音量,左、右箭头键用于选择通道或设备,向上、向下箭头控制当前所选设备的音量。退出程序使用 ALT + Q,或者按 Esc 键。
为了简化开发,也考虑到麦克风硬件的限制,我们这里就先不关注前端语音信号处理的相关开发了。接下来,我们直接来到实现语音唤醒的环节。
语音唤醒
为了实现语音唤醒,我们需要选择一个轻量级的、可以在树莓派上运行的唤醒词监测器软件。
我选择的是Mycroft Precise,它是一个基于 RNN 神经网络的语音唤醒工具。
接下来,我们在树莓派安装 Mycroft Precise。因为需要训练唤醒词模型,我们需要基于源代码来编译、安装。
首先,我们通过 git 命令把 Mycroft Precise 的源代码下载到树莓派的 /home/pi 目录:
$ cd ~
$ git clone https:/