安裝 Snowboy
clone代碼
git clone https://github.com/Kitt-AI/snowboy.git
查閱官方文檔
由于需要在Android上面調試低飒,所以我查看的是Android的文檔苦蒿,其他平臺也是有相應的Demo
snowboy-master\examples\Android\README.md
根據(jù)文檔指示驱证,先make一下
:~/source/workspace/snowboy-master/swig/Android$ make
/bin/sh: 1: swig: not found
expr: 語法錯誤
正克隆到 'OpenBLAS-Android-ARM32'...
swig not found
安裝swig
從swig官網(wǎng)下載最新版本swig-3.0.12.tar.gz
解壓
sudo tar -xzvf swig-3.0.12.tar.gz
編譯安裝
./configure --prefix=/usr/local/swig3.0.12
make
sudo make install
環(huán)境變量配置
sudo vim /etc/profile
然后 按i進入編輯狀態(tài)
在最后添加
PATH=/usr/local/swig-3.0.12/bin:$PATH
按ESC退出編輯模式
shift+:進入命令模式阎曹,wq保存退出
swig執(zhí)行出錯
swig: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
安裝libpcre
sudo apt-get install libpcre3 libpcre3-dev
如果安裝了仍然出錯度帮,需要查看共享庫信息
~$ ldd (which swig)
/usr/local/swig3.0.12/bin/swig:
linux-vdso.so.1 => (0x00007ffe75f4f000)
libpcre.so.1 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007faa0bfdc000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007faa0bdc5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faa0b9fc000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faa0b6f6000)
/lib64/ld-linux-x86-64.so.2 (0x00007faa0c2ef000)
可以看到是libpcre.so.1 => not found,為什么安裝了libpcre還找不到庫呢定鸟,應該是名字不同
所以而涉,需要找到libpcre.so的位置
$:find /lib -name libpcre*
/lib/x86_64-linux-gnu/libpcre.so.3
/lib/x86_64-linux-gnu/libpcre.so.3.13.1
ll 一下
lrwxrwxrwx 1 root root 17 4月 15 2016 libpcre.so.3 -> libpcre.so.3.13.1
-rw-r--r-- 1 root root 252032 4月 15 2016 libpcre.so.3.13.1
做一個鏈接指定名稱為libpcre.so.1
sudo ln -s libpcre.so.3.13.1 libpcre.so.1
回到Snowboy目錄,再次make
~/source/workspace/snowboy-master/swig/Android$ make
正克隆到 'OpenBLAS-Android-ARM32'...
remote: Counting objects: 33022, done.
remote: Compressing objects: 100% (18/18), done.
接收對象中: 13% (4293/33022), 2.07 MiB | 13.00 KiB/s
等make完成后,會在當前目錄生成java代碼和庫文件
運行Demo工程
接下來就是運行Demo工程了联予,路徑++snowboy-master\examples\Android\SnowboyAlexaDemo++
按照官方文檔說明啼县,生成的文件是不需要拷貝到工程目錄的,因為做了軟鏈接的操作沸久,此處我直接用Android studio打開工程是編譯不過的季眷,因此,為了省事卷胯,我直接將工程中做了鏈接的文件替換掉
snowboy-master\swig\Android\jniLibs
--->snowboy-master\examples\Android\SnowboyAlexaDemo\libs
snowboy-master\swig\Android\src
--->snowboy-master\examples\Android\SnowboyAlexaDemo\src
snowboy-master\resources\common.res
--->snowboy-master\examples\Android\SnowboyAlexaDemo\assets\
snowboy-master\resources\ding.wav
---> snowboy-master\examples\Android\SnowboyAlexaDemo\assets\
snowboy-master\resources\alexa\alexa-avs-sample-app\alexa.umdl
---> snowboy-master\examples\Android\SnowboyAlexaDemo\assets\
同時子刮,因為我將so庫放在了項目跟文件夾,所以需要修改build.gradle
android {
...
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
...
}
隨后運行窑睁,ok
替換喚醒詞
確保Demo應用OK后挺峡,我們就要替換成自己的喚醒詞了
點擊Create Hotword 創(chuàng)建喚醒詞
步驟:
- 輸入喚醒詞名稱葵孤,選擇語言
- 上傳提前錄制好的音頻,也可以即時錄制音頻沙郭,需要三段佛呻,文件不能太大,wav格式
- 等待訓練結束后進入第三步測試病线,選擇錄音人的性別及年齡端吓著,點擊==Run the test==進行測試,如果喚醒不成功可以調節(jié)右邊的控制條送挑,待測試成功就可以保存及下載訓練好的模型了
訓練好的模型可以放到++snowboy-master\examples\Android\SnowboyAlexaDemo\assets++下面绑莺,替換掉原有的alexa.umdl
sensitivity的調節(jié)可以通過修改Demo中代碼實現(xiàn)
ai/kitt/snowboy/audio/RecordingThread.java
public RecordingThread(Handler handler, AudioDataReceivedListener listener) {
this.handler = handler;
this.listener = listener;
detector.SetSensitivity("0.6");// <-- modify this
//-detector.SetAudioGain(1);
detector.ApplyFrontend(true);
try {
player.setDataSource(strEnvWorkSpace+"ding.wav");
player.prepare();
} catch (IOException e) {
Log.e(TAG, "Playing ding sound error", e);
}
}
注:
- 此處只是一個初步的訓練,成功率肯定不會太高惕耕,需要提高喚醒成功率的話纺裁,只能增加樣本數(shù)量,而一個賬號對一個詞貌似只能添加三個樣本司澎,需要靠分享給其他人添加欺缘,略顯坑爹~