在叮当的官网(http://dingdang.hahack.com)上看到,它这是如下图这样介绍叮当的,它的安装流程也是基于树莓派来写的流程。而我对硬件不感兴趣,我不想去买树莓派的开发板,又没有SD卡刷Raspbian系统,我总觉得有一台linux的操作系统也可以,后来进了叮当机器人交流群,问了果然可以,于是就开使了一阵捯饬。在安装的过程中,我发现没有基于不用树莓派的安装步骤,问了很多傻问题,所以安装成功后,就记录了一下自己的安装步骤,一方面使给自己做个笔记,另一方面如果能帮助到别人更好了。(很多东西都是从官网的步骤截图出来的,如果涉及侵权,请联系我删除,谢谢。)
目录
叮当-中文语音对话机器人....
1. 前言....
1.1. 硬件要求....
1.2. 基础技能(Linux基础,python基础)....
1.3. 详细的参考地址....
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.前言
linux主机(我的是Ubuntu的工控机,用户名是gec,下面涉及到gec的都变成你们的用户名),麦克风,音响
如果在按照此文安装时,安装不成功时,请仔细查看提示,若提示缺少什么再根据提示进行安装。在创建文件写入文件内容时,最后复制粘贴过去,再进行修改,有些空格或者tab键缩进不对,容易出现错误。
搭建Python环境。在运行此python项目时,若提升缺少某些模块,则用pip命令进行在线安装,即可。
此项目运行起来需要掌握基本的linux命令行操作及python基础即可。
叮当官网: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
术语解释:
STT(speech totext) 语音转换文字,语音识别
TTS(text tospeech) 文字转换语音,语音合成
ASR(automaticspeech recognition) 自动语音识别
工作模式:叮当被唤醒后,用户的语音指令先经过在线 STT 引擎进行 ASR 识别成文本,然后对识别到的文本进行技能匹配,交给适合处理该指令的技能插件去处理。插件处理完成后,得到的结果再交给 TTS 引擎合成语音,播放给用户。
输入命令如下
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 。
百度的语音合成结果返回的是 mp3 格式的音频,因此需要安装一个 mp3 播放器播放合成结果:
sudo apt-get install sox # 用于播放音乐
sudo apt-get install libsox-fmt-mp3 # 添加 sox 的 mp3 格式支持
用于日程提醒。软件源自带的版本较老,不支持时间粒度的提醒。因此需编译安装较新的 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
PocketSphinx 是叮当所使用的离线STT引擎,用于离线唤醒。要使用它总共需要安装如下一些程序:
l sphinxbase & pocketsphinx
l CMUCLMTK
l MIT Language Modeling Toolkit
l m2m-aligner
l Phonetisaurus
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
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 ..
先下载源码:
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 模型以及叮当内置的词汇模型:
注意如果你是在另外一台机上下载这两个文件,你可能需要使用 fstp 命令来发送文件至叮当的主机上。
配置文件于/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
首先创建.asoundrc 文件,打开终端输入 touch/home/gec/.asoundrc
之后添加您选择的声卡编号,在.asoundrc文件输入如下内容
录音:arecord -d 3 temp.wav
回放录音: aplay temp.wav
叮当默认的唤醒词是“叮当”(DINGDANG)(不过从2017-8-12镜像版本开始,唤醒词改为了“嘿叮当”),如果需要换成其他唤醒词,根据你选用的 STT 引擎,有不同的方法。
DINGDANG
ROBOT
其中 ROBOT 替换为你需要的机器人名字的全拼。
要注意的是,snowboy 的唤醒词最好选择更多人贡献的语音,这样可以得到更为平均的唤醒模型。成熟的商业音箱的唤醒,是针对某个唤醒词,同样的麦克风环境,录入成百上千个语料,进行训练的结果。所以效果会好很多。如果只用自己录制的几个样本作为训练样本,识别率和唤醒率都不会很理想。
cd /home/gec/.dingdang
python dingdang.py
项目启动后,叮当会说,xx,我能为您做什么?
使用:通过 叮当 唤醒。唤醒后会有滴一声的提示,在此提示后可以进行问问题。第二声表示结束监听输入的语音。
如果要用到叮当的技能,则要执行此步骤。
叮当机器人的用户贡献插件,插件列表如下图所以。更详细内容请看官网说明及使用,网页链接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 增加上要使用第三方插件的配置。