Skip to content

Jasper的安装、配置与使用

Junjie Wang edited this page Nov 19, 2017 · 5 revisions

Jasper是一个开源的,旨在发展“常开(always-on)”的语音控制的应用。它主要有三大特点:

  • 声控:用户用语音发出指令,询问信息,更新社交网络,远程控制家用电器等等。
  • 常开:Jasper总是在运行着的,时刻静候用户的命令。你可以从几米之外对它发号施令。
  • 开源:Jasper完全开源,用户可以用现成的硬件来构建它,并编写自己的模块。

所需的硬件软件:

  • 硬件:树莓派、PC(通过PC连接Pro进行操作,也可以在Pro上连接鼠标、键盘、显示屏进行操作)、麦克风、耳机或音响。
  • 软件:Raspbian系统。

Jasper的安装

安装Jasper分成四部分:安装前的准备工作,安装Jasper本体软件,安装STT引擎,安装TTS引擎。

用apt-get指令下载一些Jasper所需的库文件

    $ sudoapt-get install vim git-core python-dev python-pip bison libasound2-dev libportaudio-dev python-pyaudio --yes
    $ sudoapt-get install subversion autoconf libtool automake gfortran g++ --yes

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

保存并退出。

接着使用指令重新加载ALSA,使ALSA配置文件的改动生效:

$ sudo alsa force-reload

然后通过alsa-utils工具,测试alsa的配置与录音放音工作情况。 (参照alsa-utils工具的使用:http://blog.chinaunix.net/uid-26588712-id-3054726.html)

使用arecord指令测试录音工作情况

$ arecord -t wav -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
    

添加库的链接路径

    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退出。

安装Jasper

克隆Jasper的源代码:

$ git clone https://github.com/jasperproject/jasper-client.git jasper

下载Jasper所需的多种Python库文件:

$ sudo pip install --upgrade setuptools
sudo pip install -r jasper/client/requirements.txt

使jasper.py可执行

chmod +x jasper/jasper.py

安装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/

安装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 make install               //安装
安装pocketsphinx——用C语言编写的轻量级识别库。
    $ export LD_LIBRARY_PATH=/usr/local/lib  
    $ export PKG_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 -xzf pocketsphinx-0.7.tar.gz //解压 $ cd pocketsphinx-0.7 //转到解压出来的pocketsphinx-0.7文件夹 $ ./configure //配置 $ make //编译 $ sudo make install //安装

默认安装在/usr/local/bin下。 测试下安装结果:

$ pocketsphinx_continuous
安装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                          //编译
sudo make install             //安装

默认安装在/usr/local/bin下

安装sphinxtrain——声学模型训练工具

sphinxtrain包含了用来训练声学模型的Perl和Python脚本,还有一些工具命令,为了使用这些脚本,我们还需要下载Perl和Python工具。

apt-get install perl
apt-get install python

然后安装sphinxtrain tar -xzf sphinxtrain-1.0.7.tar.gz cd sphinxtrain-1.0.7 ./configure make

获得语言模型和声学模型

语言模型和声学模型的来源有以下三个方面(这里我们主要说中文的模型):

源代码自带模型:

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语言模型)

通过网络下载:

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
自行训练得到:由于每个人的说话发音,音色,所使用词汇范围等的不同,现有的语言模型和声学模型可能无法满足每一个人的需求,这时自行训练可以建立适合自己的语音库。
使用语言模型和声学模型

运行 pocketsphinx进行语音识别需要指定三个文件:声学模型、语言模型和字典文件。我们以通过网络下载得到的这三个文件为例子说明如何使用它们进行语音识别。

  • 声学模型:zh_broadcastnews_16k_ptm256_8000.tar.bz2
  • 语言模型:zh_broadcastnews_64000_utf8.DMP
  • 字典文件:zh_broadcastnews_utf8.dic

先把以上三个文件放在同一个目录下,再把声学模型解压:

tar -xjf zh_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
  • MITLM

注意,OpenFST是基础库,需要首先安装。

下载安装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               //安装 (这个过程会花比较长的时间)
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 make install              //安装
下载安装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文件夹
$ sudo make                   //编译
下载安装Phonetisaurus

下载is2013-conversion.tgz:http://pan.baidu.com/s/1KtjPk

$ tar -zxvfis2013-conversion.tgz      //解压
$ cd is2013-conversion/phonetisaurus/src //转到src文件夹中
$ sudo make                           //编译

然后,把一些编译文件手动拷贝到/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
构建词典和语言模型

可访问以下网站构建词典和语言模型:http://www.speech.cs.cmu.edu/tools/lmtool-new.html

安装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则要求在苹果产品上使用。

eSpeak TTS engine

    $ sudo apt-get update              //获得最近的软件包的列表
    $ sudo apt-get install espeak      //自动安装eSpeak引擎

Festival TTS engine

    $ sudo apt-get update                      //获得最近的软件包的列表
    $ sudo apt-get install festival festvox-don//自动安装Festival引擎

Flite TTS engine

    $ sudo apt-get update             //获得最近的软件包的列表
    $ sudo apt-get install flite      //自动安装Flite引擎

Jasper的配置

配置Jasper本体软件

    $ cd ~/jasper/client
    $ python populate.py

即可打开jasper自带的简化创建配置文件profile.yml的populate.py文件,创建过程中按照提示输入个人信息,不想输入的可以按回车键略过。完毕后会在此目录下生成配置文件:~/.jasper/profile.yml

配置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。

配置TTS engine

配置你安装的TTS引擎:

  • 配置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 。

配置FestivalTTS engine

同样,用nano工具修改profile.yml配置文件

$ nano ~/.jasper/profile.yml

将以下内容加入profile.yml配置文件中,将TTS引擎设置为Festival :

tts_engine: festival-tts

保存文件,按Ctrl+O ;并退出,按Ctrl+X 。

配置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

可以看到可用的声音库列表如。 保存文件,按Ctrl+O ;并退出,按Ctrl+X 。

Jasper的使用

打开jasper文件夹:

cd /home/bananapi/jasper

打开jasper:

./jasper.py

便可以与jasper互动了。

Clone this wiki locally