美文网首页
Snowboy Android Demo运行及唤醒词训练

Snowboy Android Demo运行及唤醒词训练

作者: 拉赫曼 | 来源:发表于2018-03-22 17:02 被阅读0次

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

    注:

    • 此处只是一个初步的训练,成功率肯定不会太高,需要提高唤醒成功率的话,只能增加样本数量,而一个账号对一个词貌似只能添加三个样本,需要靠分享给其他人添加,略显坑爹~

    相关文章

      网友评论

          本文标题:Snowboy Android Demo运行及唤醒词训练

          本文链接:https://www.haomeiwen.com/subject/akaaqftx.html