Jasper的安装、配置与使用
什么是Jasper?
参考Jasper官网:http://jasperproject.github.io/documentation/
Jasper是一个开源的,旨在发展“常开(always-on)”的语音控制的应用。它主要有三大特点:
声控:用户用语音发出指令,询问信息,更新社交网络,远程控制家用电器等等。
常开:Jasper总是在运行着的,时刻静候用户的命令。你可以从几米之外对它发号施令。
开源:Jasper完全开源,用户可以用现成的硬件来构建它,并编写自己的模块。
所需的硬件软件:
硬件:BananaPro、PC(通过PC连接Pro进行操作,也可以在Pro上连接鼠标、键盘、显示屏进行操作。)麦克风,耳机或音响。
软件:Raspbianfor Banana Pro系统。
一、Jasper的安装
安装Jasper分成四部分:安装前的准备工作,安装Jasper本体软件,安装STT引擎,安装TTS引擎。
1. 用apt-get指令下载一些Jasper所需的库文件
$ sudoapt-get install vim git-core python-dev python-pip bison libasound2-devlibportaudio-dev python-pyaudio --yes
$ sudoapt-get install subversion autoconf libtool automake gfortran g++ --yes
2. ALSA的配置与测试
用vim,vi或nano等工具打开并修改ALSA(下面示例指令使用的是VIM)
$ sudo vim/etc/modprobe.d/alsa-base.conf
配置文件界面如下:
并把上图文件中被红框框起的一行 即
options snd-usb-audio index=-2
改为:
options snd-usb-audio index=0
保存
$ :w
并退出。
$ :q
接着使用指令重新加载ALSA,使ALSA配置文件的改动生效:
$ sudoalsa force-reload
然后通过alsa-utils工具,测试alsa的配置与录音放音工作情况。
(参照alsa-utils工具的使用:http://blog.chinaunix.net/uid-26588712-id-3054726.html)
.使用arecord指令测试录音工作情况
$ arecord -twav -f S16_LE -c 2 -d 10 -r 24000 temp.wav
-t 录音文件的类型,这里录音文件类型为wav;
-f 文件格式,格式为S16_LE;
-c 声道,这里设为2,双声道;
-r 设置波特率,波特率为24000;
-d 录音时间,录音时间为10秒。
b.使用aplay指令测试放音工作情况
$ aplay temp.wav
3. 添加库的链接路径
nano ~/.bash_profile
使用nano编辑器打开.bash_profile文件(不存在的话这样会创建一个.bash_profile文件。)
把如下两行加入文件:
export LD_LIBRARY_PATH="/usr/local/lib"
source .bashrc
保存,按下Ctrl+O 。
退出,按下Ctrl+X 。
同样,使用nano编辑器打开 ~/.bashrc 或 ~/.bash_profile文件,即
$ nano~/.bashrc
或
$ nano ~/.bash_profile
把如下四行加入文件:
LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
PATH=$PATH:/usr/local/lib/
export PATH
按下Ctrl+O保存,Ctrl+X退出。
4. 安装Jasper
克隆Jasper的源代码,
$ gitclone https://github.com/jasperproject/jasper-client.git jasper
下载Jasper所需的多种Python库文件,
$ sudo pipinstall --upgrade setuptools
sudo pipinstall -r jasper/client/requirements.txt
使jasper.py可执行
chmod +xjasper/jasper.py
5. 安装STT 引擎
为了让Jasper能够正常运行,我们需要下载并安装一个STT(speech-to-text)引擎,它的功能是将输入的语音信号转化为书面文本。可供选择的STT引擎如下:
Pocketsphinx Google STT AT&T STT Wit.ai STT Julius
本次实验我们选择的是可以脱机工作的PocketsphinxSTT 引擎,因为在这五个引擎中,Google STT、AT&TSTT、Wit.ai STT是无法脱机工作的,它们会把你输入的语音信号通过网络传输给服务器,造成信息隐私安全方面的问题。而Julius语音库需要用户自行建立声学模型,这是一个十分繁琐的过程,因此我们选择PocketsphinxSTT引擎。
接下来介绍Pocketsphinx STT引擎。
PocketSphinx语音识别系统的编译、安装和使用
下载网址:http://sourceforge.net/projects/cmusphinx/files/
a.安装sphinxbase —— Pocketsphinx所需要的支持库,用于提取语音信号的特征
wget http://downloads.sourceforge.net/project/cmusphinx/sphinxbase/0.8/sphinxbase-0.8.tar.gz //从网络上下载sphinxbase-0.8.tar.gz 压缩文件
tar -zxvfsphinxbase-0.8.tar.gz //解压sphinxbase-0.8.tar.gz文件
cd~/sphinxbase-0.8/ //转到解压出来的sphinxbase-0.8文件夹
./configure //配置
make //编译
sudo makeinstall //安装
b. 安装pocketsphinx——用C语言编写的轻量级识别库。
$ exportLD_LIBRARY_PATH=/usr/local/lib
$ exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig
//首先要把Sphinxbase的库的路径放进环境变量中
环境变量的设置只对当前的终端窗口有效,新建一个新的终端或者重启系统之后,需要重新设置 PKG_CONFIG_PATH。所以我们可以通过编辑系统的链接文件/etc/ld.so.conf去使其长期有效,如下:
$ vi /etc/ld.so.conf
打开后,在新的一行添加(每一个路径一行):
/usr/local/lib
/usr/local/lib/pkgconfig
然后,执行:
$ ldconfig //将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用
使其生效。
然后开始编译安装:
$ tar -xzfpocketsphinx-0.7.tar.gz //解压
$ cdpocketsphinx-0.7 //转到解压出来的pocketsphinx-0.7文件夹
$ ./configure //配置
$ make //编译
$ sudomake install //安装
默认安装在/usr/local/bin下。
测试下安装结果:
$ pocketsphinx_continuous
若反馈如下图,说明安装成功。
c. 安装CMUCLMTK——语言模型训练工具
下载cmuclmtk-0.7.tar.gz:https://sourceforge.net/projects/cmusphinx/files/cmuclmtk/0.7/cmuclmtk-0.7.tar.gz/download
tar -xzfcmuclmtk-0.7.tar.gz //解压
cd ~/cmuclmtk-0.7 //转到解压出来的cmuclmtk-0.7文件夹
./configure //配置
make //编译
sudomake install //安装
默认安装在/usr/local/bin下
d. 安装sphinxtrain——声学模型训练工具
sphinxtrain包含了用来训练声学模型的Perl和Python脚本,还有一些工具命令,为了使用这些脚本,我们还需要下载Perl和Python工具。
apt-get install perl
apt-get install python
然后安装sphinxtrain
tar -xzfsphinxtrain-1.0.7.tar.gz
cd sphinxtrain-1.0.7
./configure
make
获得语言模型和声学模型
语言模型和声学模型的来源有以下三个方面(这里我们主要说中文的模型):
1) 源代码自带模型:
pocketsphinx-0.7/model/hmm/zh/tdt_sc_8k目录下是中文的声学模型;
pocketsphinx-0.7/model/lm/zh_CN目录下是中文的语言模型。
这些模型已经被安装(拷贝)到了/usr/local/share/pocketsphinx/model目录下:
(hmm表示隐马尔可夫声学模型,lm表示language model语言模型)
2) 通过网络下载:
CMU sphinx的官网提供了各种语言的声学模型和语言模型的下载,具体见:
http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/
其中的中文语言的模型:
中文声学模型:zh_broadcastnews_16k_ptm256_8000.tar.bz2
中文语言模型:zh_broadcastnews_64000_utf8.DMP
中文字典文件:zh_broadcastnews_utf8.dic
3) 自行训练得到:由于每个人的说话发音,音色,所使用词汇范围等的不同,现有的语言模型和声学模型可能无法满足每一个人的需求,这时自行训练可以建立适合自己的语音库。
使用语言模型和声学模型
运行 pocketsphinx进行语音识别需要指定三个文件:声学模型、语言模型和字典文件。我们以通过网络下载得到的这三个文件为例子说明如何使用它们进行语音识别。
声学模型:zh_broadcastnews_16k_ptm256_8000.tar.bz2
语言模型:zh_broadcastnews_64000_utf8.DMP
字典文件:zh_broadcastnews_utf8.dic
先把以上三个文件放在同一个目录下,再把声学模型解压:
tar -xjfzh_broadcastnews_16k_ptm256_8000.tar.bz2
然后执行:
pocketsphinx_continuous-hmm zh_broadcastnews_ptm256_8000/ -lm zh_broadcastnews_64000_utf8.DMP -dictzh_broadcastnews_utf8.dic
-hmm选项指定声学模型 –lm选项指定语言模型 –dict选项指定字典文件;
分别指定我们网上下载回来的这三个文件。
pocketsphinx会分析你传入的文件取得模型和识别的参数,然后显示出来,最后显示接下来介绍其它需要安装的库文件。
使pocketsphinx能在Jasper中工作的其它需要安装的库文件:
OpenFST Phonetisaurus,m2m-aligner and MITLM
注意,OpenFST是基础库,需要首先安装。
a. 下载安装OpenFST
下载openfst-1.3.3.tar.gz:http://pan.baidu.com/s/1i4pkNhN
$ tar -xvf openfst-1.3.3.tar.gz //解压
$ cd openfst-1.3.3/ //转到解压出来的openfst-1.3.3文件夹
$ sudo ./configure --enable-compact-fsts--enable-const-fsts --enable-far --enable-lookahead-fsts --enable-pdt //配置
$ sudo make install //安装 (这个过程会花比较长的时间)
b. MIT Language Modeling Toolkit
下载mitlm-0.4.1.tar.gz:http://pan.baidu.com/s/1jHs693C
$ tar -xvfmitlm-0.4.1.tar.gz //解压
$ cd ~/mitlm-0.4.1/ //转到解压出来的mitlm-0.4.1文件夹
$ sudo./configure //配置
$ sudo makeinstall //安装
c. 下载安装m2m-aligner
下载m2m-aligner-1.2.tar.gz:http://pan.baidu.com/s/1c1yivTI
$ tar -xvfm2m-aligner-1.2.tar.gz //解压
$ cd ~/m2m-aligner-1.2/ //转到解压出来的m2m-aligner-1.2文件夹
$ sudomake //编译
d. 下载安装Phonetisaurus
下载is2013-conversion.tgz:http://pan.baidu.com/s/1KtjPk
$ tar -zxvfis2013-conversion.tgz //解压
$ cd is2013-conversion/phonetisaurus/src //转到src文件夹中
$ sudomake //编译
然后,把一些编译文件手动拷贝到/usr/local/bin/目录下。
sudo cp~/m2m-aligner-1.2/m2m-aligner /usr/local/bin/m2m-aligner
sudo cp ~/is2013-conversion/bin/phonetisaurus-g2p/usr/local/bin/phonetisaurus-g2p
建造Phonetisaurus FST 模型
下载g014b2b.tgz:http://pan.baidu.com/s/1pKsyCgr
tar -xvfg014b2b.tgz //解压
cd ~/g014b2b/
./compile-fst.sh //建造Phonetisaurus FST 模型
然后,为了方便我们将g014b2b文件夹改名为“phonetisaurus”
mv~/g014b2b ~/phonetisaurus
6.安装TTS引擎
可以提供选择的TTS引擎有:
eSpeak TTS Festival TTS
Flite TTS Google TTS
SVOX Pico TTS Ivona TTS
MaryTTS Mac OS X TTS
本次实验中我们选择的是:a. eSpeakTTS, b. Festival TTS ,c. FliteTTS engine 中的任一个。因为这三个TTS engine 可以在脱机状态下工作,而且安装过程简单方便。而其他TT Sengine再安装和使用方面有一定限制,增加了实验的难度,这里不建议使用。像GoogleTTS,Ivona TTS需要在联网状态下使用,SVOXPico TTS安装困难,MaryTTS的使用需要建立自己的marytts服务器,Mac OS X TTS则要求在苹果产品上使用。
a. eSpeak TTS engine
$ sudoapt-get update //获得最近的软件包的列表
$ sudoapt-get install espeak //自动安装eSpeak引擎
b. Festival TTS engine
$ sudoapt-get update //获得最近的软件包的列表
$ sudoapt-get install festival festvox-don//自动安装Festival引擎
c. Flite TTS engine
$ sudoapt-get update //获得最近的软件包的列表
$ sudoapt-get install flite //自动安装Flite引擎
二、Jasper的配置(configure)
保存文件,按Ctrl+O ;并退出,按Ctrl+X 。
1. 配置Jasper本体软件
$ cd ~/jasper/client
$ python populate.py
即可打开jasper自带的简化创建配置文件profile.yml的populate.py文件,创建过程中按照提示输入个人信息,不想输入的可以按回车键略过。完毕后会在此目录下生成配置文件: ~/.jasper/profile.yml
2. 配置Pocketsphinx STT engine
用nano工具修改上个步骤生成的配置文件“profile.yml”,用于定位FST 模型 (g014b2b.fst) 和隐马尔可夫模型目录”Hidden MarkovModel directory” (hub4wsj_sc_8k).
$ nano ~/.jasper/profile.yml
//用普通用户权限运行populate.py程序的默认路径。不要使用root权限。
将以下内容写入profile.yml配置文件中。
注意:需在下面单引号中写入g014b2b.fst文件和hub4wsj_sc_8k文件的正确路径。
stt_engine: sphinx
pocketsphinx:
fst_model: '~/phonetisaurus/g014b2b.fst' //此处请填写g014b2b.fst正确的路径
hmm_dir: '/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k'
这里的hmm_dir(声学模型)可以换为在提到的“PocketSphinx语音识别系统的编译、安装和使用”中的声学模型
(如 改为hmm_dir:'/usr/local/share/pocketsphinx/model/hmm/zh/tdt_sc_8k')。
保存文件,按Ctrl+O;并退出,按Ctrl+X。
3. 配置TTS engine
配置你安装的TTS引擎:
a. 配置eSpeakTTS engine
用nano工具修改profile.yml配置文件,
nano~/.jasper/profile.yml
然后将如下内容加入其中,将TTS引擎设置为eSpeak :
tts_engine: espeak-tts
espeak-tts:
voice: 'default+m3'
pitch_adjustment: 40
words_per_minute: 160 //对voice,pitch_adjustment
和words_per_minute的进一步设置,不是必须的。
保存文件,按Ctrl+O ;并退出,按Ctrl+X 。
b. 配置FestivalTTS engine
同样,用nano工具修改profile.yml配置文件
$ nano ~/.jasper/profile.yml
将以下内容加入profile.yml配置文件中,将TTS引擎设置为Festival :
tts_engine: festival-tts
保存文件,按Ctrl+O ;并退出,按Ctrl+X 。
c. 配置Flite TTS engine
用nano工具修改profile.yml配置文件
$ nano ~/.jasper/profile.yml
将以下内容加入profile.yml配置文件中,将TTS引擎设置为Festival :
tts_engine: flite-tts
使用另一个声音库(例如“slt”)可以在profile.yml配置文件中继续写入:
flite-tts:
voice: 'slt' //使用的声音库为slt
要得到可用的声音库列表,可以回到命令行界面输入
$ flite-lv
可以看到可用的声音库列表如下:
三、jasper的使用
打开jasper文件夹
cd /home/bananapi/jasper
打开jasper
./jasper.py
便可以与jasper互动了。

打开jasper文件夹
cd /home/bananapi/jasper
打开jasper
./jasper.py
便可以与jasper互动了。