在叮噹的官網(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.前言
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 增加上要使用第三方插件的配置。