1. 程式人生 > >ubuntu 16.04 環境下:Wukonchatbot——語音喚醒:hot

ubuntu 16.04 環境下:Wukonchatbot——語音喚醒:hot

語音喚醒 and hotword

參考snowboy

支援:linux、樹莓派、moc 和windows
製作過程:

- 1.snowboy 喚醒模型製作:
- 2.環境安裝:(ubuntu)
- 3.測試你的喚醒詞
  1. snowboy 官網

1.snowboy 喚醒模型製作:

1.官網申請賬號,可github登陸
2. 選取一個喚醒詞:比如老張
3. 按流程製作和錄音:3次
4. 測試模型
5.下載模型:備用

2.環境安裝:(ubuntu)

  • SoX (audio conversion)
  • PortAudio or PyAudio (audio capturing)
  • SWIG 3.0.10 or above (compiling Snowboy for different languages/platforms)
  • ATLAS or OpenBLAS (matrix computation)
#1.在ubuntu 16.04 下安裝
#Access Microphone:
sudo apt-get install python-pyaudio python3-pyaudio sox
pip install pyaudio
#tip:測試硬體是否能夠錄音
rec temp.wav

3.swig環境安裝

#1.安裝g++依賴包()
sudo apt-get install g++
#2.ubuntu 環境下預設安裝,終端輸入一下命令,可以檢視版本
g++ -version
#3.安裝 pcre
sudo apt-get install libpcre3 libpcre3-dev
#4. 解壓 swig 原始碼 
chmod 777 swig-3.0.12.tar.gz # 改變許可權
tar -xzvf swig-3.0.12.tar.gz # 解壓
#5. 配置、編譯和安裝 swig
#指定安裝目錄
./configure --prefix=/home/errolyan/swig/   
#編譯
make
#安裝
make install
# 6.配置安裝路徑
sudo vim /etc/profile
#將剛才的路徑 /home/errolyan/swig/bin新增到profile檔案的path下面:(檔案最後幾行)
export SWIG_PATH=/home/errolyan/swig/bin
export PATH=$SWIG_PATH:$PATH
#7.重新整理環境
source /etc/profile
#8.測試swig
swig -version
#可以看到版本資訊

4.Ubuntu 16.04 安裝OpenBLAS步驟

git clone git://github.com/xianyi/OpenBLAS
 cd OpenBLAS
 sudo apt-get install gfortran
 sudo make FC=gfortran   #tips:gfortran --version 未有版本 需要安裝 sudo apt-get install gfortran
 sudo make install

然後執行以下命令:

sudo ln -s /opt/OpenBLAS/lib/libopenblas.so.0   /usr/lib/libopenblas.so.0

檢視版本資訊

g++ --version
gcc --version
gfortran --version

結果gfortran也有,在目錄/usr/lib/x86_64-linux-gnu/裡面:

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so

編譯例子:
gcc testOpenBlas.c  -I /opt/OpenBLAS/include/ -L/opt/OpenBLAS/lib -lopenblas

4.安裝atlas和openblas(安裝一個就可以)

#Then install the atlas matrix computing library:

sudo apt-get install libatlas-base-dev

測試你的喚醒詞

新增你自己的模型檔案到固定的路徑:更改dome裡面的自己的模型路徑

#需要的檔案結構為
├── README.md
├── _snowboydetect.so
├── demo.py
├── demo2.py
├── light.py
├── requirements.txt
├── resources
│   ├── ding.wav
│   ├── dong.wav
│   ├── common.res
│   └── snowboy.umdl
├── snowboydecoder.py
├── snowboydetect.py
└── version

我的原始碼:

import snowboydecoder
import sys
import signal




interrupted = False


def signal_handler(signal, frame):
    global interrupted
    interrupted = True


def interrupt_callback():
    global interrupted
    return interrupted

#if len(sys.argv) == 1:
print("Error: need to specify model name")
print("Usage: python demo.py your.model")
#sys.exit(-1)

#model = sys.argv[1]

# capture SIGINT signal, e.g., Ctrl+C
signal.signal(signal.SIGINT, signal_handler)

detector = snowboydecoder.HotwordDetector("悟空.pmdl", sensitivity=0.5, audio_gain=1)
print('Listening... Press Ctrl+C to exit')

# main loop
detector.start(detected_callback=snowboydecoder.play_audio_file,interrupt_check=interrupt_callback,sleep_time=500)

detector.terminate()