中文语音对话 机器人 在 ubuntu 上的 安装

开源项目叮当-中文语音对话机器人在ubuntu上的安装

 

        

       在叮当的官网(http://dingdang.hahack.com)上看到,它这是如下图这样介绍叮当的,它的安装流程也是基于树莓派来写的流程。而我对硬件不感兴趣,我不想去买树莓派的开发板,又没有SD卡刷Raspbian系统,我总觉得有一台linux的操作系统也可以,后来进了叮当机器人交流群,问了果然可以,于是就开使了一阵捯饬。在安装的过程中,我发现没有基于不用树莓派的安装步骤,问了很多傻问题,所以安装成功后,就记录了一下自己的安装步骤,一方面使给自己做个笔记,另一方面如果能帮助到别人更好了。(很多东西都是从官网的步骤截图出来的,如果涉及侵权,请联系我删除,谢谢。)

目录

叮当-中文语音对话机器人.... 

1.    前言.... 

1.1.    硬件要求.... 

1.2.    基础技能(Linux基础,python基础).... 

1.3.    详细的参考地址.... 

扫描二维码关注公众号,回复: 2358116 查看本文章

1.4.    总体结构.... 

2.    安装dingdang-robot

2.1.    下载dingdang-robot

2.2.    安装Sox

2.3.    安装TaskWarrior

2.4.    安装PocketSphinx 离线STT引擎

2.4.1.    安装Sphinxbase/Pocketsphinx

2.4.2.    安装CMUCLMTK

2.4.3.    安装 Phonetisaurus , m2m-aligner , OpenFST以及 MITLM

3.    配置叮当

3.1.    配置文件

3.2.    配置usb麦克风

3.2.1.    获得声卡编号和设备编号

3.2.2.    配置.asoundrc

3.2.3.    测试命令行录音播放,看看是否能正常工作

3.3.    修改唤醒词

3.3.1.    如果使用的是 PocketSphinx

3.3.2.    如果使用的是 snowboy

4.    运行叮当

5.    安装第三方插件

 

1.前言

1.1. 硬件要求

linux主机(我的是Ubuntu的工控机,用户名是gec,下面涉及到gec的都变成你们的用户名),麦克风,音响

1.2.  基础技能(Linux基础,python基础)

如果在按照此文安装时,安装不成功时,请仔细查看提示,若提示缺少什么再根据提示进行安装。在创建文件写入文件内容时,最后复制粘贴过去,再进行修改,有些空格或者tab键缩进不对,容易出现错误。

搭建Python环境。在运行此python项目时,若提升缺少某些模块,则用pip命令进行在线安装,即可。

此项目运行起来需要掌握基本的linux命令行操作及python基础即可。

1.3.  详细的参考地址

叮当官网:http://dingdang.hahack.com/

叮当github上的代码:https://github.com/wzpan/dingdang-robot

叮当github上的wiki:https://github.com/wzpan/dingdang-robot/wiki

叮当配置列表:https://github.com/wzpan/dingdang-robot/wiki/configuration

叮当第三方插件:https://github.com/dingdang-robot/dingdang-contrib

叮当第三方插件wiki:https://github.com/dingdang-robot/dingdang-contrib/wiki

1.4 总体架构

术语解释:

STT(speech totext) 语音转换文字,语音识别

TTS(text tospeech) 文字转换语音,语音合成

ASR(automaticspeech recognition) 自动语音识别

工作模式:叮当被唤醒后,用户的语音指令先经过在线 STT 引擎进行 ASR 识别成文本,然后对识别到的文本进行技能匹配,交给适合处理该指令的技能插件去处理。插件处理完成后,得到的结果再交给 TTS 引擎合成语音,播放给用户。

2.安装dingdang-robot

2.1.  下载dingdang-robot

输入命令如下

git clonehttps://github.com/wzpan/dingdang-robot.git dingdang

cd dingdang

之后安装必须的pypi库

sudo pip install --upgrade setuptools

sudo pip install -r client/requirements.txt

接下来创建一个.dingdang目录,该目录用于维护你的个人数据(注意是带了点的 .dingdang 目录):

mkdir /home/gec/.dingdang

将叮当配置文件的内容拷贝下来保存为 /home/gc/.dingdang/profile.yml 。

2.2.  安装Sox

百度的语音合成结果返回的是 mp3 格式的音频,因此需要安装一个 mp3 播放器播放合成结果:

sudo apt-get install sox  # 用于播放音乐

sudo apt-get install libsox-fmt-mp3 # 添加 sox 的 mp3 格式支持

2.3.  安装TaskWarrior

用于日程提醒。软件源自带的版本较老,不支持时间粒度的提醒。因此需编译安装较新的 2.5.1 版本:

cd $HOME

wgethttps://taskwarrior.org/download/task-2.5.1.tar.gz

tar xzvf task-2.5.1.tar.gz

cd task-2.5.1

cmake -DCMAKE_BUILD_TYPE=release .-DENABLE_SYNC=OFF

make

sudo make install

如果提示找不到cmake 或者 uuid,则需要安装一下:

sudo apt-get install cmake uuid-dev

完成后创建一个 .taskrc 文件用来记录日程:

touch /home/gec/.taskrc

2.4.  安装PocketSphinx 离线STT引擎

PocketSphinx 是叮当所使用的离线STT引擎,用于离线唤醒。要使用它总共需要安装如下一些程序:

l  sphinxbase & pocketsphinx

l  CMUCLMTK

l  MIT Language Modeling Toolkit

l  m2m-aligner

l  Phonetisaurus

2.4.1. 安装Sphinxbase/Pocketsphinx

Stretch 已经包含了 PocketSphinx 的源,可以先装预编译的版本:

sudo apt-get install pocketsphinx  # for stretch

如果是 Ubuntu 系统,则应该安装另一个包:

apt-get install pocketsphinx-hmm-en-hub4wsj

预编译的版本包含了hmm 库 pocketsphinx-hmm-en-hub4wsj ,省去自己编译的麻烦。但这个版本没有包含 Python 的接口,所以还得拉源码构建一次。

wgethttp://downloads.sourceforge.net/project/cmusphinx/sphinxbase/0.8/sphinxbase-0.8.tar.gz

tar -zxvfsphinxbase-0.8.tar.gz

cd sphinxbase-0.8/

./configure--enable-fixed

make

sudo make install

wgethttp://downloads.sourceforge.net/project/cmusphinx/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz

tar -zxvfpocketsphinx-0.8.tar.gz

cd pocketsphinx-0.8/

./configure

make

sudo make install

2.4.2.     安装CMUCLMTK

sudo apt-getinstall subversion autoconf libtool automake gfortran g++ --yes

svn cohttps://svn.code.sf.net/p/cmusphinx/code/trunk/cmuclmtk/

cd cmuclmtk/

./autogen.sh && make && sudo make install

cd ..

2.4.3.     安装 Phonetisaurus , m2m-aligner , OpenFST以及MITLM

先下载源码:

wgethttp://distfiles.macports.org/openfst/openfst-1.4.1.tar.gz

wgethttps://github.com/mitlm/mitlm/releases/download/v0.4.1/mitlm_0.4.1.tar.gz

wgethttps://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/m2m-aligner/m2m-aligner-1.2.tar.gz

wgethttps://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/phonetisaurus/is2013-conversion.tgz

解压:

tar -xvfm2m-aligner-1.2.tar.gz

tar -xvfopenfst-1.4.1.tar.gz

tar -xvfis2013-conversion.tgz

tar -xvfmitlm_0.4.1.tar.gz

编译安装 OpenFST:

cd openfst-1.4.1/

sudo ./configure--enable-compact-fsts --enable-const-fsts --enable-far --enable-lookahead-fsts--enable-pdt

sudo make install # come back after a really long time

编译安装 M2M:

cd m2m-aligner-1.2/
sudo make
sudo cp m2m-aligner /usr/local/bin/m2m-aligner

编译安装 MITLMT:

cd mitlm-0.4.1/
sudo ./configure
sudo make install

编译安装 Phonetisaurus:

cd is2013-conversion/phonetisaurus/src
sudo make
sudo cp ../../bin/phonetisaurus-g2p /usr/local/bin/phonetisaurus-g2p

然后需要下载已编译好的 Phonetisaurus FST 模型以及叮当内置的词汇模型:

  • g014b2b.zip:https://pan.baidu.com/s/1o7MrWIA 下载完后放在 /home/pi/ 目录下执行 unzip 命令解压。
  • vocabularies.zip:https://pan.baidu.com/s/1kWfqP3x (备选下载地址)下载完后放在 /home/gec/.dingdang/ 目录下执行 unzip 命令解压。注意是带了点的 .dingdang 目录。

注意如果你是在另外一台机上下载这两个文件,你可能需要使用 fstp 命令来发送文件至叮当的主机上。

3.配置叮当

3.1.  配置文件

配置文件于/home/gec/.dingdang/profile.yml下(注意是加了点的 .dingdang )。每次修改,需重启叮当生效。

robot_name: 'DINGDANG'  # 必须使用大写

robot_name_cn: '叮当'

first_name: '伟洲'

last_name: '潘'

timezone: HKT

location: '深圳'

# 是否接入微信

wechat: true

# 当微信发送语音时,是直接播放语音还是执行语音命令?

# true:直接播放

# false:执行语音命令(只支持百度STT,其他两种STT识别不准)

wechat_echo: false

# 除了自己之外,还能响应 echo 指令的好友微信名单

# 如果填写 ['ALL'] 表示响应所有微信好友

# 如果填写 [] 表示不响应任何好友

wechat_echo_text_friends: ['小Q', 'HaHack']

# 除了自己之外,还能直接播放语音的好友微信名单

# 如果填写 ['ALL'] 表示播放所有微信好友的语音

# 如果填写 [] 表示不播放任何好友的语音

wechat_echo_voice_friends: ['小Q']

# 当有邮件时,是否朗读邮件标题

read_email_title: true

# 当内容过长(> 200个字)时,是否继续朗读

# true:读

# false:改为发送内容

read_long_content: false

# 最长朗读内容(仅当 read_long_content 为 false 时有效)

max_length: 200

# 是否使用邮箱发送长内容而不是微信

prefers_email: false

# 勿扰模式,该时间段内不执行通知检查

do_not_bother:

    enable: true # 开启勿扰模式

    since: 23    # 开始时间

    till: 9      # 结束时间,如果比 since 小表示第二天

# 语音合成服务配置

# 可选值:

# baidu-tts     - 百度语音识别

# iflytek-tts   - 讯飞语音合成

# ali-tts       - 阿里语音合成

# google-tts    - 谷歌语音合成

tts_engine: ali-tts

# STT 服务配置

# 可选值:

# sphinx        - pocketsphinx离线识别引擎(需训练,参考修改唤醒词教程)

# baidu-stt     - 百度在线语音识别

# iflytek-stt   - 讯飞语音识别

# ali-stt       - 阿里语音识别

# google-stt    - 谷歌语音合成

stt_engine: ali-stt

# 离线唤醒 SST 引擎

# 可选值:

# sphinx- pocketspinx离线唤醒                                                                                                                                          

# snowboy-stt   - snowboy离线唤醒

stt_passive_engine: sphinx

# pocketsphinx 唤醒SST引擎(默认)

pocketsphinx:

    fst_model: '/home/pi/g014b2b/g014b2b.fst'

# snowboy 唤醒SST引擎(可选)

#https://snowboy.kitt.ai/dashboard

snowboy:

    model: '/home/pi/dingdang/client/snowboy/dingdangdingdang.pmdl'  # 唤醒词模型

    sensitivity: "0.5"  # 敏感度

# 百度语音服务

#http://yuyin.baidu.com/

baidu_yuyin:

    api_key: '填写你的百度应用的API Key'

    secret_key: '填写你的百度应用的Secret Key'

    per: 0  # 发音人选择 0:女生;1:男生;3:度逍遥;4:度丫丫

# 讯飞语音服务

# api_id 及 api_key 需前往

#http://aiui.xfyun.cn/webApi

# 注册获取(注意创建的是WebAPI应用),仅使用语音合成无需注册

# 然后将主板的ip地址添加进ip白名单(建议使用中转服务器的ip地址 101.132.139.80)

iflytek_yuyin:

    api_id: '填写你的讯飞应用的Api ID'

    api_key: '填写你的讯飞应用的Api Key'  # 没看到这个说明不是注册的WebAPI应用,请改注册个WebAPI应用

    vid: '67100'#语音合成选项: 60120为小桃丸 67100为颖儿 60170为萌小新 更多音色见wiki

    url: 'http://api.musiiot.top/stt.php'# 白名单ip中转服务器(可选)

# 阿里云语音

# ak_id及ak_secret需前往

#https://data.aliyun.com/product/nls

# 注册获取

ali_yuyin:

    ak_id: '填写你的阿里云应用的AcessKey ID'

    ak_secret: '填写你的阿里云应用的AcessKey Secret'

    voice_name: 'xiaoyun'#xiaoyun为女生,xiaogang为男生

# 谷歌语音

# api_key 的获取方式:

# 1. Join the ChromiumDev group:

#    https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-dev

# 2. Create aproject through the Google Developers console:

#    https://console.developers.google.com/project

# 3. Select yourproject. In the sidebar, navigate to "APIs & Auth." Activate

#     the Speech API.

# 4. Under"APIs & Auth," navigate to "Credentials." Create a newkey for

#     public API access.

google_yuyin:

    language: 'zh-CN'

    api_key: ''

# 聊天机器人

# 可选值:

# tuling    - 图灵机器人

# emotibot  - 小影机器人

robot: tuling

# 图灵机器人

#http://www.tuling123.com

tuling:

    tuling_key: '填写你的图灵机器人API Key'

# 小影机器人

#http://botfactory.emotibot.com/

emotibot:

    appid: '填写你的 emotibot appid'

    active_mode: true # 是否主动说更多点话

# 邮箱

# 如果使用网易邮箱,还需设置允许第三方客户端收发邮件

email:

    enable: true

    address: '你的邮箱地址'

    password: '你的邮箱密码'  # 如果是网易邮箱,须填写应用授权密码而不是登录密码!

    smtp_server: 'smtp.163.com'

    smtp_port: '25'  # 这里填写非SSL协议端口号

    imap_server: 'imap.163.com'

    imap_port: '143'  # 这里填写非SSL协议端口号

# 拍照

# 需接入摄像头才能使用

camera:

    enable: false

    dest_path: "/home/pi/camera"# 保存目录

    quality: 5            # 成像质量(0~100)

    vertical_flip: true    # 竖直翻转

    horizontal_flip: false # 水平翻转

    count_down: 3           # 倒计时(秒),仅当开启倒计时时有效

    sendToUser: true       # 拍完照是否发送到邮箱/微信   

    sound: true             # 是否有拍照音效

    usb_camera: false      # 是否使用USB摄像头(默认是树莓派5MP摄像头)

#######################

# 第三方插件的配置

#######################

# 在这里放第三方插件的配置

# https://github.com/wzpan/dingdang-contrib

# 网易音乐

netease_music:

    account: '你的网易云音乐手机账户' # 只支持手机账户

    password: '你的密码'

    report: true    # 是否播报即将播放的音乐

    local_path: '/home/gec/Music/'  # 本地音乐目录

    local_default: True  # 默认播放本地音乐

# 天气

# 使用心知天气的接口

#https://www.seniverse.com/

weather:

    key: '你的心知天气  key'

    location: '北京'

#简单的备忘插件

#ToDo

todo:

    file_path: '/home/gec/todo.txt'

#百度FM电台

baidufm:

    channel: 39 # 默认播放本地音乐

#微博热点

weibo_resou:

    enabled: true

3.2.  配置usb麦克风

3.2.1.     获得声卡编号和设备编号

3.2.2.     配置.asoundrc

 首先创建.asoundrc 文件,打开终端输入 touch/home/gec/.asoundrc

 之后添加您选择的声卡编号,在.asoundrc文件输入如下内容

3.2.3.     测试命令行录音播放,看看是否能正常工作。

录音:arecord -d 3 temp.wav

回放录音: aplay temp.wav

3.3.  修改唤醒词

叮当默认的唤醒词是“叮当”(DINGDANG)(不过从2017-8-12镜像版本开始,唤醒词改为了“嘿叮当”),如果需要换成其他唤醒词,根据你选用的 STT 引擎,有不同的方法。

3.3.1.     如果使用的是 PocketSphinx

  • 在 profile.yml 配置文件中修改 robot_name 和 robot_name_cn 配置项;
  • 编写一个 keyword.txt 文件,包含至少两个名字的全拼:

DINGDANG

ROBOT

其中 ROBOT 替换为你需要的机器人名字的全拼。

  • 到 lmtool 里上传你刚刚创建的 keyword.txt 并编译成模型。
  • 把得到的 .dic 文件和 .lm 文件分别重命名为 dictionary 和 languagemodel,替换 /home/pi/.dingdang/vocabularies/pocketsphinx-vocabulary/keyword 下的同名文件。
  • 重新运行 dingdang ,看看新的唤醒词灵敏度如何。如果不理想,换成别的唤醒词。

3.3.2.     如果使用的是 snowboy

  • 到 https://snowboy.kitt.ai/ ,训练你自己的模型;
  • 下载模型并上传到树莓派中,存放的路径可以随意,比如 /home/.dingdang/snowboy/my-model.pmdl ;
  • 修改 profile.yml 中 snowboy 的 model 的路径为你训练好的模型的路径。

要注意的是,snowboy 的唤醒词最好选择更多人贡献的语音,这样可以得到更为平均的唤醒模型。成熟的商业音箱的唤醒,是针对某个唤醒词,同样的麦克风环境,录入成百上千个语料,进行训练的结果。所以效果会好很多。如果只用自己录制的几个样本作为训练样本,识别率和唤醒率都不会很理想。

4. 运行叮当

cd /home/gec/.dingdang

python dingdang.py

项目启动后,叮当会说,xx,我能为您做什么?

使用:通过 叮当 唤醒。唤醒后会有滴一声的提示,在此提示后可以进行问问题。第二声表示结束监听输入的语音。

5. 安装第三方插件

如果要用到叮当的技能,则要执行此步骤。

叮当机器人的用户贡献插件,插件列表如下图所以。更详细内容请看官网说明及使用,网页链接https://github.com/dingdang-robot/dingdang-contrib/wiki。

 

安装

cd /home/pi/.dingdang

git clonehttp://github.com/dingdang-robot/dingdang-contrib contrib

pip install -rcontrib/requirements.txt

使用

使用哪个插件,需要在相应的网站注册并创建应用,获得ak_id,ak_secret 或者相应的API key,并在配置文件profile.yml 增加上要使用第三方插件的配置。

猜你喜欢

转载自blog.csdn.net/uunubt/article/details/81180596