【Leafney|开发日记】Python SDK接入
Leafney 发布于2017-12-05 10:31 浏览:1240 回复:2
1
收藏

    在完成了上一篇的 “你好小度”之后,接下来我就试试如何接入Python SDK 。

1. SSH登陆

使用默认的账户 `pi` 和 `raspberry` 通过SSH登陆系统。我这里使用的是 `Xshell`,也可以选择 `Putty` 等其他软件。


在当前的用户目录下创建一个目录,用于后面的操作。比如我这里创建的目录名同我的论坛ID名:

$ mkdir Leafney
$ cd Leafney

2. 停止现有小度功能,因为会占用MIC资源

$ sudo systemctl disable duer
$ sudo systemctl stop duer

3. 安装需要的依赖

$ sudo apt-get update

1.jpg


在 update 这一步因为使用的是官方的软件源,所以会比较慢。也可以更换成国内的源。

$ sudo vim /etc/apt/sources.list

把原来的第一行用#注释掉,在末尾添加下面一行:

deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free rpi

然后再次执行update操作。

安装其他依赖包:

$ sudo apt-get install python-dateutil gir1.2-gstreamer-1.0 python-pyaudio libatlas-base-dev python-dev
$ sudo pip install tornado hyper

3.jpg

4. 下载编译好的openssl和Python安装包

*从如下地址下载openssl安装包*(链接: https://pan.baidu.com/s/1skAP6WH 密码: wknz)

*从如下地址下载python2.7.14安装包*(链接: https://pan.baidu.com/s/1o8MHkzK 密码: ngx4)


将下载的两个文件用 `FileZilla` 传输到树莓派的 `/home/pi/Leafney` 目录下:

4.jpg

然后分别解压:

$ sudo tar -zxvf openssl1.1.tar.gz -C /usr
$ sudo tar -zxvf python2.7.14.tar.gz -C /usr/local/

替换已有的python:

$ sudo rm -rf /usr/bin/python
$ sudo ln -s /usr/local/python2.7.14/bin/python /usr/bin/python

7.jpg

5. 下载Python SDK和参考示例代码

$ git clone https://github.com/MyDuerOS/DuerOS-Python-Client.git
$ cd DuerOS-Python-Client
$ git checkout raspberry-dev

8.jpg

6. 运行和测试

    接下来就是授权操作。在 DuerOS-Python-Client 目录下执行:

./auth.sh

执行后在 `Xshell` 中有提示 `A web page should is opened. If not, go to http://127.0.0.1:3000 to start` 。

因为这里是要求访问 `127.0.0.1` ,所以必须在树莓派系统中通过浏览器来访问。我在Windows系统下通过 `树莓派IP+端口3000` 的方式访问,会提示 “授权回调页地址错误” 的错误页面。

9.jpg

我并没有多余的HDMI数据线来直接连接树莓派和显示器,所以这里我用远程桌面的方式来配置。

7. 安装远程桌面

我的电脑是Windows版本,这里我选择使用 xrdp 来实现,只需要windows自带的远程桌面程序就能连接,非常方便。如果是其他的系统如Mac可以使用 VNC 实现。

xrdp的安装也很简单,在树莓派执行如下命令:

$ sudo apt-get install xrdp

打开windows系统的 “远程桌面连接” 程序,输入树莓派的IP地址进行连接。

27.jpg

在弹出的 `Login to xrdp` 窗口中,输入树莓派的用户名和密码,点击 `OK` 连接。

28.jpg

8. 授权

再次进入树莓派的 `/home/pi/Leafney/DuerOS-Python-Client` 目录,启动授权:

$ cd /home/pi/Leafney/DuerOS-Python-Client

$ ./auth.sh

通过远程桌面访问,在树莓派的桌面系统下打开浏览器,访问 `127.0.0.1:3000` 地址,会出现 “百度账号的登陆授权页面” 。

29.jpg

不过这个是官方的测试账号 `GitHub项目测试账号`。如果我们想要配置自己的设备,还是需要去申请自己的client_id和client_secret来调用。

这里我不在继续往下操作,先去申请自己的ClientID信息。

在 `Xshell` 中按 `Ctrl+C` 停止启动的web服务。

9. 创建设备

打开 DuerOS开放平台官网  https://dueros.baidu.com/open   ,选择右上角 “控制台” -- “设备控制台” -- 在打开的新页面选择 “配置新设备” 。

11.jpg

然后在 `请选择终端场景` 中选择 “音箱” 点击 “下一步” 。

12.jpg

在 `请选择操作系统` 界面选择第一项 “Linux” 。

13-1.jpg

输入 “产品名称”,比如这里我取名叫 `贾维斯` (电影钢铁侠里的人工智能系统),点击 “申请ClientID” ,下面会显示出相应的 client_id 和 client_secret等信息。这里,我们先将这两项记下来以待后面使用。

15.jpg

接下来是配置 “端能力”的页面,可以自定义选择,或者直接保持默认下一步即可。

15-1.jpg

然后会弹出 `BOT配置` 页面。

16.jpg

可以看到上面是一些 `音乐` `有声点播` `有声直播` 等等选项;下面有 `聊天定制` `语音唤醒服务` `自定义控制指令` 这些,如果看不懂呢可以不用管,直接下一步。后面会询问是否下载SDK,也不用管,直接点击下面的 “完成” 会提示 “创建产品成功” 。

18.jpg

这样我们就创建好了自己的client_id和client_secret。


10. 设置个人的ClientID信息

使用 `FileZilla` 软件,在树莓派的目录 `/home/pi/Leafney/DuerOS-Python-Client` 下找到 `app/auth.py` 这个文件,因为在控制台界面下不太方便编辑文件,而vim呢对于某些朋友来说也不是很熟悉,所以这里我选择将该文件下载到Windows本地来编辑。

将 `auth.py` 下载到本地后,推荐使用 `SublimeText` 或 `NotePad++` 来进行编辑。


找到 `开发者注册信息` 部分,替换成刚刚申请的信息:

# 开发者注册信息
CLIENT_ID = 'XXXXX'
CLIENT_SECRET = 'XXXXXX'

然后将下面的 `使用开发者注册信息` 一行下面代码段前面的井号 `#` 去掉,解注释这一行。

    # 使用开发者注册信息
    auth.auth_request(CLIENT_ID, CLIENT_SECRET)

再将下面的 `使用默认的CLIENT_ID和CLIENT_SECRET` 一行下面代码行前面加一个井号 `#` 注释掉这一行。

    # 使用默认的CLIENT_ID和CLIENT_SECRET
    # auth.auth_request()

19.jpg

然后使用 `FileZilla` 将我们刚刚改好的 `auth.py` 上传到树莓派中。


11. 设置授权回调地址

在浏览器中访问 `控制台` -- `设备控制台` 页面https://dueros.baidu.com/didp/product/listview   , 选择我们刚刚创建的产品点击 “编辑” 选项。

20.jpg

在 `基础信息` 页面,可以查看刚刚创建设备的 client_id 等信息。这里我们点击 `OAUTH CONFIG URL` 这个链接:

21.jpg

在新页面的左侧点击 `安全设置` 选项,在 `授权回调页` 的输入框中输入如下内容,然后点击 `确定` 保存修改。

http://127.0.0.1:3000/authresponse

22.jpg


12. 使用个人设备授权

完成上面的配置后,回到 `Xshell` 中,在树莓派的 `/home/pi/Leafney/DuerOS-Python-Client` 目录下,再次执行授权命令:

$ ./auth.sh
A web page should is opened. If not, go to http://127.0.0.1:3000 to start

然后在树莓派系统浏览器输入 `127.0.0.1:3000` 访问。

可以看到页面右侧的授权应用变成了我自己创建的设备名称。

30.jpg

如果你的授权页面中这里显示的是空的,那是因为你用的是中文名称。在“基础信息” 的 “名称”那里需要再次添加一下名称。如果是英文的话,这个名称会直接显示。我觉得这里可能是一个bug。

36.jpg

在授权页面输入我的百度账号和密码进行授权。

看到提示 `Succeed to login DuerOS Voice Service` 的信息就说明授权成功了。

31.jpg

同时在 `Xshell` 下我们会看到输出相应的授权信息。

32.jpg

13. 唤醒

执行如下的命令使用语音唤醒:

./wakeup_trigger_start.sh


使用唤醒词 `小度小度` 就能唤醒了。

因为我在 `Xshell` 下操作时发现命令行下的中文会有乱码的情况,所以我改用远程桌面下树莓派上自带的 `Terminal` 程序来执行。

34.jpg

35.jpg

执行如下命令,使用enter按键唤醒:

./enter_trigger_start.sh

使用enter键回车唤醒。


这里我尝试了上面的两种唤醒方式,发现不知道是哪里的问题,音箱都没有声音输出。查看输出的日志信息是能看到有音频文件下载成功并播放的。


14. 解决没有声音的问题

我使用 `alsamixer` 然后按 `F6` 切换使用的声卡,发现无论如何切换,似乎都没有效果。


后来我考虑将音箱线换到树莓派本身的音频接口上,发现居然有声音输出了。不过树莓派自带的音频输出杂音还是很吵的。


这里要注意的是不能在树莓派通电的情况下切换音频口,我发现如果直接将音频线从DuerOS板子的音频口换到树莓派的音频口上时,刚一接触的时候噪音是非常大的,所以最后我是将树莓派关机然后切换的。


15. 感受

1. 使用Python SDK 最后唤醒的时候需要将音频接口插到树莓派的音频接口上,这一点在论坛的文档中没有说明,可能会给一些人操作时带来困惑。

2. 个人认为应该是有方法使用DuerOS开发版的音频接口的,毕竟没有杂音嘛。需要进一步研究一下。

3. 发现在使用 Python SDK 唤醒小度时,语言识别的效果不如镜像系统中语音的识别准确度高。不知是什么原因。


收藏
点赞
1
个赞
共2条回复 最后由exo明天life回复于2018-06-13 03:33
#2jinweipro回复于2018-06-11

你好,我们公司想请您做这方面的顾问,有兴趣的话联系我12979798@qq.com

0
#3exo明天life回复于2018-06-13

你好,我非常想当你的学生。

0
TOP