这篇Raspberry Pi Alexa教程将向您展示如何构建和设置一个功能齐全的个人助理,使用Raspberry Pi和Alexa语音服务来响应语音命令。
这个树莓派Alexa, 与其他的亚马逊Echo设备功能别无二致,因为它利用Alexa语音服务. 默认情况下,它有唤醒词, 可以说它的名字与Alexa交谈.
可以使用亚马逊自己的虚拟助手Alexa,这个东西很像微软的Cortana、苹果的Siri和Google Now。
利用Alexa语音服务,只需通过语音就能做许多不同的事情,比如单位换算和查看体育比分。
只需要一个带USB麦克风和扬声器的Raspberry Pi,就可以建立自己的Alexa个人助理。
设备清单
下面是用到的所有的设备清单,点击链接可直达特别优惠购买。
建议
可选
注册Alexa语音服务产品
1. 在开始设置Raspberry Pi之前,首先要创建亚马逊开发者账户。
可以进入亚马逊开发者网页,按照提示进行操作。
创建了帐户并登录,就可以为Raspberry Pi亚马逊Echo设置需要的配置了。
登录后,看到以下界面,将鼠标悬停在 “Alexa”(1.)选项卡上,选择 “Alexa语音服务”(2.)。
2. 在接下来的这个屏幕上,点击 “产品”。这个页面为Raspberry Pi设置连接到Alexa语音服务的访问的区域。
3. 现在点击 “创建产品”,为树莓派设置一个 “产品 “。
4. 在这个页面上,有一些东西必须先设置好才能继续。
(1.)产品名称在 “Alexa应用 “中显示给用户,将其设置为简单但可识别的内容。
(2.) 产品ID用于授权过程。这个ID必须只包含字母、数字和下划线。在我们的例子中,我们将其设置为 “pimylifeup_alexa_tutorial”。
(3.)请将 “产品类型 “设置为 “内置Alexa的设备”。
(4.) 除非打算创建自己的伴侣应用程序,否则将此设置为 “否”。
(5.)现在对于 “产品类别”,我将其设置为 “其他(请注明)”,指定的类别为 “Raspberry Pi”。
(6.)最后,可以写一个关于设备的简短描述。这个设置纯粹是针对AVS服务的。
5. 继续上一步,在这个页面上,还需要设置几个选项,才能继续进行。
这些选项大多是让你向亚马逊表明你打算如何使用Alexa语音服务。
下面就对剩下的这些选项逐一进行介绍。
(1.)在这里你可以设置你打算让人们与你的Raspberry Pi Alexa设备互动的方式。
在我的指南中,我将其设置为 “触摸启动 “和 “免提”,这样可以通过按下按钮或对设备说话来触发它。
(2.) 除非打算将Raspberry Pi Alexa进行商业发布,否则将此选项设置为 “No”。
(3.)对于这个选项,选择 “否”,除非你打算使用 “Alexa for Business “服务。
(4.)这个选项选择 “否”,除非你恰好将设备也关联到AWS IoT Core账户。
(5.)现在是最后一个选项,请确保在这个选项中选择 “否”,因为它不是为13岁以下的人准备的。
6. 一旦你填写了所有必要的选项,就可以点击页面底部显示的 “下一步 “按钮,继续进行设置过程。
7. 现在将提示您设置登录亚马逊 (LWA) 安全配置文件。
由于我还没有个人资料,必须点击 “CREATE NEW PROFILE “链接来创建一个,如下图所示。
8. 现在在文本框中输入该安全配置文件的名称和简短的说明(1.)。这些作为简单的描述,说明打算利用它来做什么。
在教程中,我将 “Profile Name “设置为 “Pi My Life Up Raspberry Pi Alexa”,将 “Profile Description “设置为 “Profile for Pi My Life Up’s Raspberry Pi Alexa”。
“安全配置文件名称 “字段可方便地识别安全配置文件及其使用目的。”安全配置文件说明 “字段旨在解释配置文件的用途。
设置好两个字段后,点击 “NEXT “按钮(2.)继续。
9. 创建了 “登录亚马逊 “安全配置文件后,可以继续生成所需的ID信息,这样就可以让树莓Pi与Alexa语音服务进行连接。
首先,切换到 “平台信息 “部分的 “其他设备和平台 “标签(1.
本节将生成与Alexa语音服务建立连接所需的相关数据。
现在需要设置一个 “客户端ID名称”(2.),然后才能生成实际的ID和授权数据。
客户端ID用于识别和授权您的Raspberry Pi连接到Alexa。这个值不会显示给终端用户,纯粹是为了授权。
我将客户端ID设置为 “pi_my_life_up_raspberrypi_alexa”,因为它既代表了设备,也代表了我打算利用它的目的。
设置好客户端ID后,按 “GENERATE ID “按钮(3)。
10. 生成客户端ID后,点击 “DOWNLOAD”(1.)按钮。
确保你把文件保存在容易访问的地方,因为在以后的教程中需要抓取这个文件的内容。
现在,在条款和条件文本的 “我同意”(2.)旁边勾选复选框。
一旦你下载了客户端ID文件,继续点击 “完成”(3.)按钮。
11. 现在已经成功创建了您的产品,允许访问AWS API。
12. 在Raspberry Pi上设置Alexa之前,必须启用我们刚刚创建的安全配置文件。
要做到这一点,需要进入 “与亚马逊登录 “主页。
13. 在这个页面上,需要选择在前面的步骤中创建的LWA安全配置文件(1.
选定后,点击 “确认”(2.)按钮。
14. 这里需要设置 “同意隐私声明URL”(1.)。如果只是用于个人使用,可以将其设置为假的URL来进行。
对于教程,只是将同意URL设置为 “http://example.com”,因为我并不打算将其作为一个公开访问的配置文件。
一旦设置了同意隐私声明的网址,请继续按 “保存”(2.)按钮。
在Raspberry Pi上设置Alexa。
1. 继续将Alexa安装到树莓Pi之前,首先要确保软件包都是最新的。
在Raspberry Pi上运行以下命令来实现。
sudo apt-get update
sudo apt-get upgrade
2. 现在从alexa-device-sdk GitHub上下载所有需要安装和配置的脚本。
这些脚本将在Raspberry Pi上设置和配置Alexa,并处理设置Alexa软件的大部分繁琐工作。
通过运行以下三个命令下载所有三个脚本。
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/genConfig.sh
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh
3. 现在所有的脚本都可以使用了,把之前下载的config.json文件移到正确的位置。
如果在Raspberry Pi上下载了文件,那么可以将其移动到/home/pi的位置,然后跳到步骤5。
否则,可以通过运行以下命令创建一个新文件。
nano ~/config.json
4. 现在将之前下载的config.json文件的内容复制并粘贴到这个文件中。
内容最终应该是6行长,就像我下面的例子一样。
{
"deviceInfo": {
"clientId": "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"productId": "pimylifeup_alexa_tutorial"
}
}
输入了正确的数据后,就按CTRL + X,然后按Y,最后按ENTER键保存文件。
5. 现在继续运行 “setup.sh “脚本,运行下面的命令。
这个脚本将安装所有必要的信息,并在Raspberry Pi上准备Alexa。
bash setup.sh config.json
6. 在开始设置过程之前,将被询问是否同意各种条款和协议,因为Alexa设备SDK依赖于多个第三方存储库。
已经在下面附上了一个例子,说明这个信息应该是什么样子的。
要继续安装过程,需要输入 “AGREE “并按ENTER键继续。
如果出于某种原因您不同意这些条款,可以输入 “QUIT”,但软件将不会被安装和设置。
请注意,安装过程可能需要一些时间,因为有相当多的包将被安装,还有一些需要从头开始自动编译。
#############################################################################
#############################################################################
AVS Device SDK Raspberry pi Script - Terms and Agreements
The AVS Device SDK is dependent on several third-party libraries, environments,
and/or other software packages that are installed using this script from
third-party sources ("External Dependencies").
These are terms and conditions associated with the External Dependencies
(available at https://github.com/alexa/avs-device-sdk/wiki/Dependencies) that
you need to agree to abide by if you choose to install the External Dependencies.
If you do not agree with every term and condition associated with the External
Dependencies, enter "QUIT" in the command line when prompted by the installer.
Else enter "AGREE".
#############################################################################
#############################################################################
7. 设置完成后,还需要安装一些额外的软件包,以便Alexa软件正常工作。
由于某些原因,在标准设置过程中没有安装这些包,如果没有这些包,就会出现错误。
通过运行下面的命令来安装这些附加包。
sudo apt-get install gstreamer1.0-alsa gstreamer1.0-tools gstreamer1.0-plugins-ugly
更改Alexa的默认语言
也可以调整您的Raspberry Pi Alexa设备将使用的默认语言。
如果对设备的英文操作没有问题,那么可以自由跳到下一节。
1. 要改变语言,我们需要修改设置时生成的 “AlexaClientSDKConfig.json “文件。
我们可以通过运行以下命令开始修改这个文件。
nano /home/pi/build/Integration/AlexaClientSDKConfig.json
2. 在该文件中,你需要搜索以下部分:
你可以使用CTRL+W组合键来搜索文件。
"deviceSettings":
3. 在本节中,你应该看到一个名为 “defaultLocal “的选项。
"defaultLocale":"en-US",
要改变默认语言,将 “en-US “改为你想要使用的语言的地域,下面是Alexa SDK支持的语言列表。
Spanish (Mexican Dialect)en-MX
Language | Locale |
---|---|
English (US Dialect) | en-US |
English (UK Dialect) | en-GB |
English (Canadian Dialect) | en-CA |
English (Australian Dialect) | en-AU |
English (Indian Dialect) | en-IN |
French (Canadian Dialect) | fr-CA |
French (French Dialect) | en-FR |
Spanish (Spanish Dialect) | en-ES |
Spanish (US Dialect) | en-US |
Japanese (Japanese Dialect) | ja-JP |
Italian (Italian Dialect) | it-IT |
Hindi (Indian Dialect) | hi-IN |
Portugues e(Brazilian Dialect) | pt-BR |
4. 举例来说,如果想把语言转换为西班牙语,修改该选项,使其看起来像以下内容:
"defaultLocale":"es-ES",
5. 更改了默认语言后,按CTRL + X,然后按Y,再按ENTER键保存文件。
为您的Raspberry Pi Alexa设备设置音频。
1. 在继续运行Alexa软件之前,必须首先确保音频配置正确。
检索麦克风和音频输出和设备号。
1a. 运行以下命令,列出所有可用的录音设备。从这个命令中写下你的麦克风的卡号和设备号。
arecord -l
1b. 现在运行以下命令,列出所有播放设备。记录您要输出的设备的卡号和设备号。
需要注意的是,树莓Pi的3.5mm接口一般标注为Analog或bcm2835 ALSA,HDMI输出标识为bcm2835 IEC958/HDMI。
aplay -l
2. 现在已经有了所有需要的设备和卡号,需要继续运行下面的命令,为pi用户创建.asoundrc文件。
这个.asoundrc文件是用来让ALSA声音驱动知道要使用什么设备。
nano /home/pi/.asoundrc
3. 在这个文件中,需要输入以下几行来配置你的音频。
用你在本节步骤1中检索到的各自的值替换这两个值。
pcm.!default {
type asym
capture.pcm "mic"
playback.pcm "speaker"
}
pcm.mic {
type plug
slave {
pcm "hw:<card number>,<device number>"
}
}
pcm.speaker {
type plug
slave {
pcm "hw:<card number>,<device number>"
}
}
4. 完成后,按CTRL+X再按Y,最后按ENTER键保存文件。
授权并在Raspberry Pi上运行Alexa。
1. 现在Raspberry Pi上设置了Alexa,现在可以继续启动Alexa示例应用程序,以获得设备授权。
需要在Raspberry Pi上输入以下命令来启动Alexa示例应用程序。
bash startsample.sh
2. 第一次启动Alexa示例应用时,会看到如下所示的消息。
{xxxx}是一个已经生成的唯一代码,用于授权Raspberry Pi访问Alexa语音服务。
要授权Raspberry Pi,请进入亚马逊代码,并按照提示批准Raspberry Pi与Alexa的连接。
Alexa示例应用程序将自动与亚马逊网络服务器对话,以检测您何时授权设备。
##################################
# NOT YET AUTHORIZED #
##################################
#############################################################################
# To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX} #
#############################################################################
3. 一旦看到下面的文字,那么就会知道Raspberry Pi已经成功授权与Alexa语音服务对话。
可能需要滚动浏览命令行历史记录,因为Alexa软件一旦被标记为授权,就会产生相当数量的输出。
###########################
# Authorized! #
###########################
4. 可以通过各种方式与Alexa示例软件进行互动。最简单的交互方式是对Alexa语音服务说 “Alexa”,然后再加上你的提示。
另外,也可以在命令行中输入 “t”,以跳过必须大声说 “Alexa “的过程。
如果你愿意,可以使用 “h”,这将模拟按住一个按钮。使用 “h “会让Alexa样本软件持续监听,直到再次在命令行中输入 “h”。
如果一切工作正常,将得到一个从Alexa语音服务到您的树莓派的响应流。这个响应将通过之前配置的音频设备进行播放。
让Raspberry Pi Alexa设备在启动时启动。
1. 为了让Alexa软件在Raspberry Pi上启动,首先要对 “SampleApp “代码进行一些修改。
默认情况下,这段代码被设计为等待来自stdin的输入,但当stdin不可用时,它会抛出错误,所以必须修改输入循环。
通过运行以下命令开始修改 “UserInputManager.cpp “脚本。
sudo nano /home/pi/avs-device-sdk/SampleApp/src/UserInputManager.cpp
2. 在这个文件中,使用nano的CTRL+W功能找到下面这段代码,最容易找到的是 “m_interactionManager->begin();”。最简单的方法是搜索 “m_interactionManager->begin();”
在这段代码的下面,在while循环中,确保你添加了下面显示的代码。这段额外的代码将使输入线程进入睡眠状态,并停止任何输入处理的发生。
找到以下代码块
SampleAppReturnCode UserInputManager::run() {
bool userTriggeredLogout = false;
m_interactionManager->begin();
while (true) {
添加到下面
std::this_thread::sleep_for(std::chrono::hours(1));
continue;
3. 修改后的代码应该是下面显示的样子。
SampleAppReturnCode UserInputManager::run() {
bool userTriggeredLogout = false;
m_interactionManager->begin();
while (true) {
std::this_thread::sleep_for(std::chrono::hours(1));
continue;
4. 现在按CTRL + X然后按Y,最后按ENTER键保存文件。
5. 现在已经修改了一个脚本,现在需要重新编译它。
别只需要重新运行之前的设置脚本,以下两个命令所示。
cd /home/pi
sudo bash setup.sh config.json
6. 现在已经编译了Alexa SampleApp,现在可以创建一个服务文件,这样就可以在启动时自动启动Alexa服务。
运行以下命令来创建这个服务文件。
sudo nano /lib/systemd/system/alexa.service
7. 在这个服务文件中,需要输入如下所示的行。
这几行文字将定义操作系统应该如何处理我们的服务。
它告诉操作系统什么用户将执行bash脚本。它还设置了在初始化Alexa之前,需要网络处于活动状态。
[Unit]
Description=Raspberry Pi Alexa
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/bin/bash /home/pi/startsample.sh
Restart=on-abort
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
一旦一切输入完毕,可以按CTRL + X,然后按Y,最后按ENTER键保存文件。
8. 创建了Alexa服务后,需要在启动时加载之前启用它。
要启用新的服务将使用systemctl工具。输入以下命令来启用它。
sudo systemctl enable alexa.service
9. 现在已经启用了Alexa服务,继续启动它。现在启动服务确保一切工作正常。
通过在Raspberry Pi上运行以下命令来启动服务。
sudo systemctl start alexa.service
10. 随着服务的启动,现在应该能够使用 “Alexa “唤醒词与Raspberry Pi Alexa设备进行交互。
如果没有得到任何回应,可以通过运行以下命令检查服务的状态。
sudo systemctl status alexa.service
改善麦克风增益
1. 如果麦克风在拾取声音时有问题,那么一个解决办法就是增加麦克风的增益。可以利用allsamixer来实现。
要启动 alsamixer,请在终端输入以下命令。
alsamixer
2. AlsaMixer应用加载完毕,可以按F6选择不同的USB设备,使用方向键选择你的麦克风,然后按Enter键。
3. 选择好麦克风后,使用方向键增加采集音量。一旦您对采集音量感到满意,可以按ESC键退出。
4. 现在,保存这些配置,需要告诉alsa存储新的设置并使它们成为永久性的。运行以下命令。
sudo alsactl store
你现在应该有一个完全可操作的Raspberry Pi亚马逊Alexa语音助手。如果你觉得这个教程有帮助,或者你遇到了任何问题,请在下面留言。
欢迎转载,请留下出处链接:Labno3 » 如何用树莓派搭建亚马逊语音助手,Raspberry Pi Alexa