開源項目叮噹-中文語音對話機器人在ubuntu上的安裝

        

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章