【happycool333|开发日记】不用开发板,使用Python SDK,一起玩DuerOS
h****3 · h****3 发布于2017-11-26 18:16 浏览:7958 回复:7

写在前面

10.30就收到了DuerOS开发板,经过断断续续的使用,已经使用官方映像和开发板搭建起我的喜娃智能音箱
总体感受:

  • 语音唤醒打通了语音交互的最后一环,DuerOS的语音唤醒还是很准确的,在家庭中日常使用足以。

  • 播放有声音频,对于多集的情况,可以记忆上次播放的位置,下次继续播放,赞。

  • 输出的音质很不错,听歌曲棒棒的。

为啥又单独起这个帖子呢?因为要想深入玩,各项功能都能越来越好用,也要有越来越多好玩的功能,向Echo看齐,还得深入到开发平台层面。
并且,就目前对python sdk的体验,还有很多bug,和原始镜像都有很多差距,离可以做出更多个性化、完美的用户体验,还有很长的路。
说说,python sdk,我遇到的坑:

  • 语音唤醒不灵敏,同样是小度小度,在原镜像识别率很高,但,python sdk下,需要把小度小度放慢了说,才可以。

  • 播放音乐,不能连续播放,一首结束后就没有了。

  • 我要听个《王冠红人馆》,不好意思, 不鸟你啊。镜像可以的啊,上面还夸断点续播呢。

但是,还是要感谢python sdk及开发者百度的刘老师,可以让我们这些创客能够使用树莓派做出属于自己的智能音箱。

看到坛子里还有不少同学,没有百度开发板,百度也可能做到人手一个开发板,想必成本也不低。于是就有了这篇文章。

准备工作

  • 硬件列表(我当前使用的硬件)

    • 树莓派3B(包括sd卡用于烧录DuerOS镜像、micro usb数据线用于树莓派供电)

    • 树莓派集群外壳,每层可以安装不同的硬件,集成度会很高,这很关键。这样,所有硬件组合在一起才更像一个东西。而不是一堆板子和线,一个手都提不起来

    • PS3 EYE,4麦克风,只要25元,还赠送一个摄像头

    • 音箱,带音频线,我使用青春板叮咚,音质好

  • 软件列表

Step by Step

  • 下载上面提到的DuerOS定制版树莓派镜像,使用Etcher把镜像刷到sd卡上。当然也可以自己手动安装,可以查看官方文章,我没有这样做,因为可能有不少坑。

  • 把sd卡插入树莓派,上电开机,初始账户pi/raspberry。

  • 需要注意的地方,切换到root用户再进行后续操作。原因是,开机启动时,启动语音助手服务使用的是root用户。

  • 到root的工作目录,下载python sdk最新代码

    pi@raspberrypi:~ $ su
    Password: 
    root@raspberrypi:/home/pi# cd ~
    root@raspberrypi:~# git clone https://github.com/MyDuerOS/DuerOS-Python-Client.git
    Cloning into 'DuerOS-Python-Client'...
    remote: Counting objects: 366, done.
    remote: Total 366 (delta 0), reused 0 (delta 0), pack-reused 366
    Receiving objects: 100% (366/366), 15.56 MiB | 1.94 MiB/s, done.
    Resolving deltas: 100% (204/204), done.
    Checking connectivity... done.
  • 安装python sdk依赖的库,详细操作步骤参考官网指南,基本上按照这个指南就能完成SDK的部署了。关于授权这块,官方指南描述略显简略,需要注意两点:

    • 为了我们自己可以深度定制DuerOS,需要使用自己的账号来认证DuerOS。首先,需要在DuerOS开放平台增加设备,再到百度开发者中心进行授权方面的配置。

    • 在树莓派本地进行授权时,需要执行./auth.sh,这个命令会调用浏览器执行http操作,所以,需要在图形化界面系统执行,不能在终端登录执行,可以使用vnc viewer,也可以使用显示器。

    • 配置自己设备时,选择智能音箱,选择linux平台的话,目前很多功能使用不了,比如,歌曲都不能播放。可以选在兼容Alexa。
      以上,我只是说一下简要的关键点,不重复造轮子,贴一个超详细的帖子(来自大鱼叔叔)

最后一公里

要把一件事情做好,就要实践出真知,不断去使用产品、体会产品,尤其没有任何界面和按钮的智能音箱。上文提到大鱼叔叔的文章,详细记录了大部分过程,但是,有些内容并没有,我补充如下:

  • 如题目所说,不使用开发板而使用很容买到的PS3 EYE麦克风,音箱的音频输出也改为使用树莓派自带的音频口

    • 查看PS3 EYE的设备ID,把它插到树莓派上后,执行命令

      root@raspberrypi:~# arecord -l
      **** List of CAPTURE Hardware Devices ****
      card 1: CameraB409241 [USB Camera-B4.09.24.1], device 0: USB Audio [USB Audio]
      Subdevices: 0/1
      Subdevice #0: subdevice #0
      card 2: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi tlv320aic32x4-hifi-0 []
      Subdevices: 1/1
      Subdevice #0: subdevice #0
      root@raspberrypi:~# aplay -l
      **** List of PLAYBACK Hardware Devices ****
      card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
      Subdevices: 7/8
      Subdevice #0: subdevice #0
      Subdevice #1: subdevice #1
      Subdevice #2: subdevice #2
      Subdevice #3: subdevice #3
      Subdevice #4: subdevice #4
      Subdevice #5: subdevice #5
      Subdevice #6: subdevice #6
      Subdevice #7: subdevice #7
      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: 1/1
      Subdevice #0: subdevice #0

      上述命令arecord -l的结果中的card 1: CameraB409241就是我们的PS3 EYE麦克风。
      上述命令aplay -l的结果中的card 0 device 0就是树莓派默认的音频输出。

    • 配置树莓派默认的音频输入输出设备,提醒,需要在root用户下操作。在root根目录创建文件,命令如下:

      root@raspberrypi:~# touch  .asoundrc

      然后,在文件.asoundrc中,填写如下内容,分别指定音频的输入和输出。

      pcm.!default {
          type asym
           playback.pcm {
             type plug
             slave.pcm "hw:0,0"
           }
      
           capture.pcm {
             type plug
             slave.pcm "hw:1,0"
           }
        }
      
        ctl.!default {
                type hw
                card 0
        }

      上述文件中playback配置的是音频输出,使用树莓派默认音频接口。capture配置的是麦克风,使用的是PS3 EYE设备。

    • 测试一下设备连接和配置是否成功,使用如下命令,先录制一段3s的音频,再进行播放。

      root@raspberrypi:~# arecord -d 3 temp.wav
      root@raspberrypi:~# aplay temp.wav
  • 配置python sdk的程序为开机启动,这样,我们就可以有一个不用每次远程连接,手动停止原Duer服务,启动python sdk的智能音箱了,算是小小地发布了。

    • 我找到dueros服务的启动脚本是/etc/start_duer.sh,现在我们修 改这个脚本,把之前启动默认dueros服务的脚本注释掉,增加启动python sdk的脚本。另外,说明一下,每次我重启树莓派,默认的音量总是2,基本听不见,害得我定位这个问题好久,以为设备不好使呢。后来,我通过命令 amixer在每次开机时,在脚本中设置一个音量默认值。最终,start_duer.sh的内容如下:

      #!/bin/sh
      amixer -c 0 set PCM 1dB
      #play startup voice
      while :
      do
      #aplay -Dplughw:2,0 /duer/appresources/startup.wav
      aplay -Dplughw:0,0 /duer/appresources/startup.wav
      if [ $? = "0" ]; then
          break
      fi
      sleep 1s
      done
      # check network
      count=0
      while :
      do
      ping www.baidu.com -c1 | grep ttl
          if [ $? = "0" ]; then
          break
      else
          count=$(($count + 1))
          if [ $count = 15 ]; then
              break
          fi        
          sleep 1s
      fi
      done
      #cd /duer
      #./duer_daemon
      cd /root/DuerOS-Python-Client
      ./wakeup_trigger_start.sh > wakeup.log 2>&1 &

python sdk使用过程中的问题

  1. 不能播放FM,有声内容,但可以播放音乐

  2. 可以播放音乐,但是,不能连续播放,一首结束后就没有了

  3. 不能调大调小音量

总结

至此,基于python sdk的智能音箱就可以用起来了。 每天我都会使用它,听听歌曲还是可以的。
然后,再不断改善它,增强它的能力,让它逐步成为得力的助手。
最后附靓照一张:


点赞  ( 1 )
收藏
评论(7)
共7条回复 最后由肖****民回复于2019-05-23 11:21
#2C****凯回复于2017-11-26 21:33:38

cool

0
#3D****童回复于2017-11-27 17:31:54

棒~已加精


0
#4侯****校回复于2017-11-28 10:00:18

学习Mark

0
#5I****人回复于2017-11-29 16:21:27

厉害

0
#6I****r回复于2017-12-01 14:56:33

棒棒哒

0
#7Y****D回复于2019-02-15 14:02:33

烧录镜像后,电源灯红灯闪烁,绿灯不亮,3B+

0
#8肖****民回复于2019-05-23 11:21:36

棒棒哒

0
TOP