【城寒|开发日记】Day3--替换唤醒词/发声设备【超详细】
智能革命 · 智能革命 发布于2017-08-19 17:20 浏览:7530 回复:13

一、说明:

  树莓派镜像中 /duer 下的小度应该是不支持配置的,都是可执行文件,也没看到类似的配置文件,所以本文使用 /home/pi/Project/dcs-sdk-js 下的小度来实现自定义的配置。这个源代码在git:https://github.com/dueros/dcs-sdk-js

  先用sudo systemctl stop duer停止自带的小度,然后开始测试开源版本

二、流程简介

  1. 录制唤醒词模型

  2. 获得Access token

  3. 修改配置文件和部分代码

  4. 启动测试

三、具体过程

  3.1  录制唤醒词模型

    登录 https://snowboy.kitt.ai/ ,可以用git帐号直接登录,按照网站流程一步步操作即可,一共就三个步骤,特别简单,应该没什么问题。这一步完成后,会获得【XXX.pmld】或者【XXX.umld】

    注:这两个后缀名的文件内容其实是一样的,pmld表示personal,umld表示universal,就是个人和公开的唤醒词。配置文件中用的都是umld,pmld也能用的,不用怀疑。。

  3.2  获得Access token

    这个步骤纠结了一会儿,主要是没看到详细的教程,其实也很简单。

    1)登录本平台的控制台,选一个已经创建的APP,没有就随便创建一个安卓系统的。然后编辑App信息可以看到:

      client_id:H3yzRK....

      OAUTH CONFIG URL:http://developer.baidu.com/console#app/....

    2)进入这个url,进入左边的《安全设置》,然后在的个格子【授权回调页:】中填入:http://openapi.baidu.com/oauth/2.0/login_success      然后保存。

    3)在浏览器中输入,替换client_id和最后的redirect_uri,如下所示

      https://openapi.baidu.com/oauth/2.0/authorize?client_id=H3yzRK....&response_type=token&redirect_uri=http://openapi.baidu.com/oauth/2.0/login_success

      然后就会跳转到一个地址:http://openapi.baidu.com/oauth/2.0/login_succes#expires_in=2592000&access_token=23.8fced4c66.....&session_secret=....

      这个23.8fced4c66.....就是access_token

   

  3.3 修改配置文件和部分代码

    1)修改snowboy.js中的识别模型

      models.add({

        file:  __dirname+'/resources/xiaoduxiaodu_xiaoyuxiaoyu_large.umdl',

        sensitivity: '0.9,0.9',

        hotwords : ['小度小度',"小度小度"]

      });

      如果只换了这个地方,并不一定能生效,需要在sonwboy下运行node snowboy_test.js进行测试,我自己运行时出现:找不到 libcblas.so.3 这个文件,是还需要安装:

      sudo apt-get install libatlas-base-dev

      sudo apt-get install libatlas-dev

      此时执行node snowboy_test.js 应该可以识别成功,看看屏幕上输出。

    2)修改主程序index.js中的判断逻辑

      在snowboy下测试完成后,到上层目录执行node index.js进行测试

      喊了半天自己的唤醒词还是没用,只能识别小度小度,还是没有结果。。。看了一下index.js的代码,原来在树莓派上使用的是wakeup进行识别,应该是公司自己修改的版本?如果想要换成snowboy文件夹下的版本,需要替换一下版本的判断方法:

      60行:if(isRaspberrypi){    // 如果是树莓派使用 wakeup

      99行:if(unameAll.match(/Darwin/)){    // snowboy

      把这两个if条件换一下,然后就会使用snowboy进行唤醒词识别了。

    3)替换发生设备

      在上面测试成功后,此时使用的是树莓派上的发生单元,音质奇差,还有很大的杂音,需要把发生部分切换到个人开发版上。这个需要修改一下一个声音的配置,先用aplay -l,查看自己的设备:

      **** List of PLAYBACK Hardware Devices ****

      card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]

        Subdevices: 8/8

        Subdevice #0: subdevice #0

        。。。

      card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]

        Subdevices: 1/1

        Subdevice #0: subdevice #0

      card 2: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi tlv320aic32x4-hifi-0 [] // 这个就是个人开发版的播放设备

        Subdevices: 0/1

        Subdevice #0: subdevice #0

      所以把 ~/.asoundrc 修改为:

      pcm.!default {

        type asym

         playback.pcm {

           type plug

           slave.pcm "hw:2,0"

         }

         capture.pcm {

           type plug

           slave.pcm "hw:1,0"

         }

      }

      ctl.!default {

              type hw

              card 0

      }

      对 dcs_config.json 中的play_env项进行修改

      "rec_env":{"AUDIODEV":"hw:1,0"},

      "play_env":{"AUDIODEV":"hw:2,0"},

  3.4 到这就成功啦

    虽然效果还是没有自带的好,不过起码能识别自己的唤醒词了,还可以到控制台修改声音,路径如下:

    控制台 -> 对应产品点击编辑 -> 服务配置 -> 合成音


点赞  ( 0 )
收藏
评论(13)
共13条回复 最后由乐观的徐小小回复于2019-09-03 23:26
#2智能革命回复于2017-08-19 22:01:46

棒棒哒

0
#3DuerOS-河童回复于2017-08-21 11:31:21

逻辑清晰又干货满满!太帅气了!

给你我的小心心❤

0
#4DuerOS-河童回复于2017-08-21 13:55:29

棒棒哒

0
#5chinafelix回复于2017-08-22 09:45:37

棒棒哒

0
#6智能革命回复于2017-08-22 10:08:48
#5 chinafelix回复
棒棒哒

棒棒哒

1
#7智能革命回复于2017-08-22 10:10:27
#4 DuerOS-河童回复
棒棒哒

谢谢,emptypointer@yahoo.com

0
#8youngda回复于2017-08-24 00:36:38

哈哈,,这篇是干货,,

0
#9AllenPKU回复于2017-09-06 23:29:41

解决了alsa问题,感谢

0
#10zune回复于2017-09-09 15:21:08

棒棒哒

0
#11anananjjj回复于2017-11-01 07:36:52

这个必须mark一下

0
TOP