我的平台是 RPI 2
OS : 2015-05-05-raspbian-wheezy
插入買的usb audio device.....
我是買這一款的
然後check 一下你的usb audio裝置有沒有抓到...
cat /proc/asound/cards
可以看到
或是輸入 aplay -l 也可以得到一樣的資訊
可以看到 card 1 : usb PnP Sound Device....
安裝一下 alsa 的套件 (Advanced Linux Sound Architecture)
sudo apt-get install alsa-base alsa-utils
輸入 alsamixer 可以調整音量
sudo vi /usr/share/alsa/alsa.conf
sudo vi .asoundrc
加入這一行
pcm.!default sysdefault:Device
測試一下你的設定有沒有成功.....錄製一下聲音試試
arecord -vv --duration=7 -fdat ~/test.wav
或是 播放已經有的wave file
aplay /usr/share/sounds/alsa/Front_Center.wav
沒問題之後.....
安裝其他的套件
sudo apt-get install libasound2-dev autoconf libtool bison \
swig python-dev python-pyaudio
install python-pip tool
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo pip install gevent grequests
安裝 screen (could save yourself some heartache)
sudo apt-get install screen
screen -DR sphinx
接下來是重頭戲了
install SPHINX
git clone git://github.com/cmusphinx/sphinxbase.git
cd sphinxbase
git checkout 3b34d87
./autogen.sh
sudo make -j4
sudo make install
cd ..
install PocketSphinx
git clone git://github.com/cmusphinx/pocketsphinx.git
cd pocketsphinx
git checkout 4e4e607
./autogen.sh
sudo make -j4
sudo make install
cd ..
update your new library on your system
sudo ldconfig
run test
pocketsphinx_continuous -inmic yes
如果有看到下面的訊息...就代表成功
INFO: ngram_search.c(874): bestpath 0.10 CPU 0.071 xRT
INFO: ngram_search.c(877): bestpath 0.11 wall 0.078 xRT
what
READY....
INFO: ngram_search.c(877): bestpath 0.11 wall 0.078 xRT
what
READY....
接下來就是 control all the thing
先來run 一個已經寫好的範例
git clone https://github.com/bynds/makevoicedemo
cd makevoicedemo
python main.py
他的程式會停在 need more input:
這時候我就說 Turn on the kitchen Light....
他就秀出來了
這樣其實代表是辨識成功....
接下來要動手打造自己的例子....
要使用 PocketSphix ..需要三個元素
1. dictionary
2. grammar file
3. init decoder
step 1 : dictionry...
先用編輯器編輯 corpus.txt
以他的例子是下面的內容...你也可以改成你自己的...
turn on the kitchen light
turn off the kitchen light
turn on the bedroom light
turn off the bedroom light
turn on the roomba
turn off the roomba
roomba clean
roomba go home
turn off the kitchen light
turn on the bedroom light
turn off the bedroom light
turn on the roomba
turn off the roomba
roomba clean
roomba go home
接下來要把他上傳到網站...
用 web browser ....輸入 http://www.speech.cs.cmu.edu/tools/lmtool-new.html
網站的畫面如下:
點選左下角的 選擇檔案.... upload your corpus.txt
接著按下 Compile Knowledge Base
然後就會跳轉到下面這個頁面
選擇down *.tgz..... 以我的例子為言是 TAR0304.tgz
wget http://www.speech.cs.cmu.edu/tools/product/1454753396_20565/TAR0304.tgz
tar -xvf TAR0304.tgz
step 2 : grammar file...
以他的例子...... grammar.jsgf
#JSGF V1.0;
grammar commands;
<action> = TURN ON |
TURN OFF ;
<object> = KITCHEN LIGHT|
BEDROOM LIGHT |
ROOMBA ;
public <command> = <action> THE <object> |
ROOMBA CLEAN |
ROOMBA GO HOME ;
其實你可以改在 最後.... 例如
public <command> = <action> THE <object> |
ROOMBA CLEAN |
LEFT |
RIGHT |
ROOMBA GO HOME ;
step 3 : init decoder
修改 pocket_sphinx_listener.py
self.hmm = 'cmusphinx-5prealpha-en-us-ptm-2.0/'
self.dic = 'dictionary.dic'
self.lm = 'language_model.lm'
self.grammar = 'grammar.jsgf'
接下來就是修改他的例子.... main.py
裡面的 hue 和 roomba 和 configuration和 insteon 都不需要....只留 gevent....這個是為了 停留 1秒
然後把裡面的 roomba和 configuration 和 insteon 相關的code 都delete.....
直接看到 run_main 這個函式
def runMain():
# Now we set up the voice recognition using Pocketsphinx from CMU Sphinx.
pocketSphinxListener = PocketSphinxListener()
try:
command = pocketSphinxListener.getCommand().lower()
if command.startswith('turn'):
do_turn_action().....
看到這邊就知道.... command其實就是辨識出來的字串....
接下來你就是拿它來做判斷...去執行相對應的動作就可以了....
Reference : http://makezine.com/projects/use-rasp
berry-pi-for-voice-control/