Snowboy Android Demo运行及唤醒词训练

安装 Snowboy

clone代码

git clone https://github.com/Kitt-AI/snowboy.git

查阅官方文档

由于需要在Android上面调试,所以我查看的是Android的文档,其他平台也是有相应的Demo

snowboy-master\examples\Android\README.md

根据文档指示,先make一下

:~/source/workspace/snowboy-master/swig/Android$ make
/bin/sh: 1: swig: not found
expr: 语法错误
正克隆到 'OpenBLAS-Android-ARM32'...

swig not found

安装swig

swig官网下载最新版本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 

环境变量配置

sudo vim /etc/profile

然后 按i进入编辑状态

在最后添加
PATH=/usr/local/swig-3.0.12/bin:$PATH

按ESC退出编辑模式
shift+:进入命令模式,wq保存退出

swig执行出错

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代码和库文件


Snowboy-train-1.png

运行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

Snowboy-train-2.png

替换唤醒词

确保Demo应用OK后,我们就要替换成自己的唤醒词了

Snowboy唤醒词训练

点击Create Hotword 创建唤醒词

Snowboy-train-3.png

步骤:

  1. 输入唤醒词名称,选择语言
  2. 上传提前录制好的音频,也可以即时录制音频,需要三段,文件不能太大,wav格式
  3. 等待训练结束后进入第三步测试,选择录音人的性别及年龄端,点击==Run the test==进行测试,如果唤醒不成功可以调节右边的控制条,待测试成功就可以保存及下载训练好的模型了
Snowboy-train-4.png

训练好的模型可以放到++snowboy-master\examples\Android\SnowboyAlexaDemo\assets++下面,替换掉原有的alexa.umdl

sensitivity的调节可以通过修改Demo中代码实现

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);
        }
    }

注:

  • 此处只是一个初步的训练,成功率肯定不会太高,需要提高唤醒成功率的话,只能增加样本数量,而一个账号对一个词貌似只能添加三个样本,需要靠分享给其他人添加,略显坑爹~
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,073评论 25 707
  • 今天下午一下子玩了八个小时,除去无聊的繁杂琐事,真正能提炼开心的精华游戏体验最多一个小时。
    嘴巴吸允着柠檬阅读 247评论 0 0
  • 秋天不是都该像石大那样“满城尽带黄金甲”“一城烟草风飞絮”的壮观吗?而我之所见不过是伊犁奇怪又没有你的秋。 秋末冬...
    木子安宁M阅读 260评论 0 1
  • 每天都早起做饭,也为了早点运动。喜欢的事就会想法把时间都往前赶。 阗阗在我出门时也起床了,说是要背会书,八点钟...
    丽萍在这阅读 241评论 0 5
  • 昨天终于和约了很长时间的Paco大叔一起锻炼了。为啥叫他大叔呢,人已经38岁了还是单身在学校读研。今天俩人练完腿后...
    Auscarpolo阅读 207评论 0 0