这个Raspberry Pi谷歌助手项目中,详细记录了如何搭建一个语音识别系统,构建一个由树莓派驱动的谷歌助手。
这款助手会主动倾听你的声音,并回应你的询问,你只需要说 “Ok Google “或 “Hey Google”,后面跟着你的询问。为了设置谷歌助手,我将引导你如何测试你的音频设置,注册谷歌助手API,还将向你展示如何下载和设置谷歌助手的实际例子。
在本教程结束时,在你的树莓派上应该或者一个很棒的虚拟助手。
要在Raspberry Pi上设置自己的Google Assistant,你只需要一个USB麦克风和一组扬声器。当然,你也需要所有的默认设备,树莓派是其中的灵魂。
设备清单
下面列出了我在这个树莓派谷歌助手教程中使用的所有设备,点击链接可直达特别优惠购买。
建议
可选
注册谷歌API
1. 开始在Raspberry Pi本身上设置Google Assistant代码之前,必须先在Google Actions Console上注册并设置一个项目。
有了Google账户,就可以进入Google Console Actions仪表板,或者直接进入下面的URL,它会带你到那里。
https://console.actions.google.com
2. 登录到您的账户,将看到以下页面。
在这里要点击 “添加/导入项目 “按钮,如下面的截图所示。
3. 在下一个屏幕上,将被要求输入 “项目名称”(1.)
除了项目名称外,还需要设置你的国家和语言,如截图所示(2.)。一旦设置了项目名称并选择了语言和国家,点击 “创建项目”(3.)按钮。
4. 在新的选项卡中,进入谷歌开发者控制台,并启用谷歌嵌入式助手API。
现在,在你继续点击 “启用 “按钮之前,确保你已经选择了你的项目 (1.)。一旦确定选择了当前的项目,点击 “启用 “按钮 (2)。
5. 现在回到创建项目的另一个选项卡中,向下滚动到页面底部。
应该看到一些文字说:”你正在寻找设备注册吗?点击这里”。需要做的就是点击 “点击这里 “的文字。
6. 现在将进入以下页面,点击 “注册模型”按钮继续。
7. 在此页面,需要设置 “产品名称”、”制造商名称 “和设置 “设备类型”(1.
下面可以看到我输入的数据,这里设置什么并没有太大的关系,但是这三个框都需要设置,才能注册你的模型。
- 产品名称:只需将其设置为一个简单的描述词,说明我们使用这个产品的目的,在本教程中,它只是一个 “pi谷歌助手”。
- 制造商名称 :并不太重要,因为我们并没有打算将其作为一个广泛使用的设备,所以只是将其设置为名”Pi My Life Up”。
- 设备类型:设置为 “扬声器”,因为我觉得它最符合我打算在树莓派上使用Google Assistant API的目的。
写下 “设备型号ID”(2.),因为在后面的教程中会需要这个。
最后,一切都设置好后,记下下了 “设备型号ID”,点击 “注册型号”(3.)按钮继续。
8. 现在已经注册了模型,进入 “下载凭证 “页面。
这个屏幕是至关重要的,因为所提供的凭证文件是基于Raspberry Pi的Google Assistant与服务器对话所需要的。要获得这个凭证文件,请点击 “下载OAuth 2.0凭证”(1.)按钮,如下截图所示。把这个保存在安全的地方,因为我们会把文件里面的文字放到树莓皮上。(当然,除非你直接下载到你的Pi上),将凭证安全地存储在电脑或树莓派上后,需要点击 “下一步”(2.)按钮。
9. 最后,可以指定可能需要的特征。
现在我不需要这些,所以我只需点击 “保存特征 “按钮,如下图所示。
10. 一旦一切完成,应该会在这个屏幕上显示。
现在只需要做最后一件事,就可以在Raspberry Pi本身上设置谷歌助手了。
11. 还需要配置OAuth同意页面。如果没有这个,Google就不会让我们在本教程后面授权我们的Raspberry Pi Google Assistant设备。
要做到这一点,需要进入API凭证OAuth屏幕同意设置页面。
在第一页,请确保在顶部的下拉框中选择你的项目(1)。其次,你需要选择 “外部 “作为用户类型(2. 这个选项将允许任何拥有谷歌账户的人利用我们正在设置的谷歌助手软件。配置完毕后,点击 “CREATE “按钮,继续设置认证界面(3.)。
12. 这个页面将允许你设置认证屏幕的细节。由于我们不打算公开访问,所以只需要设置一个选项。
点击电子邮件下拉选择你的账户电子邮件地址(1.),选择这个将允许我们继续指导。一切所需设置完毕后,点击页面底部的 “保存 “按钮(2.)。
13. 最后,需要进入谷歌我的账户活动控制。
在这里,需要激活以下活动控件,以确保Google Assistant API正常工作。
- 网络和应用活动
- 位置历史
- 设备信息
- 语音和音频活动
为谷歌助手设置音频
1. 现在,已经在Google Actions Console上设置了一个账户,必须为它配置音频。
使用的谷歌助手SDK有一些严格的要求,才能正常工作。要开始在Raspberry Pi上设置音频,我们必须首先获得各种输入和输出的卡和设备号。下面的步骤将告诉你必须获得这些设备的正确数字。
1a. 通过使用以下命令找到USB麦克风。
写下卡号和它的设备号。
arecord -l
1b. 现在,将利用以下命令来找到扬声器。
再次写下卡号和设备号。
需要注意的是,树莓Pi的3.5mm接口一般标注为Analog或bcm2835 ALSA,HDMI输出标识为bcm2835 IEC958/HDMI。
aplay -l
2. 现在已经得到了麦克风和音频输出的设备和卡号,需要在pi用户主目录下创建一个名为.asoundrc的文件。
.asoundrc文件通过定义音频驱动应该使用哪些音频设备来帮助。可以在终端中运行以下命令来创建这个文件。
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>"
rate 48000
}
}
pcm.speaker {
type plug
slave {
pcm "hw:<card number>,<device number>"
}
}
4. 有了配置文件,并进行了修改。按CTRL+X再按Y,最后按ENTER键保存。
测试扬声器和麦克风
1. 在进入设置我Raspberry Pi谷歌助手和设置所需的API的所有艰苦工作之前,首先测试以确保音频工作。
在这个阶段,将USB麦克风和扬声器连接到Raspberry Pi上。
一旦确定两者都连接到Raspberry Pi上,就可以通过运行下面的命令来测试确保扬声器工作正常。
speaker-test -t wav
你应该听到扬声器发出的声音。这个声音是一个人在说话。如果没有听到任何来自扬声器的声音,请仔细检查它们是否正确插入并调高音量。
2. 现在,通过录音来测试麦克风,在你的Raspberry Pi上运行以下命令。
该命令将进行5秒的简短录音。
arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw
如果你在运行此命令时收到一个错误,请确保你的麦克风已经插入。只有成功监听到你的麦克风,这个命令才会成功。
3. 录制完成后,现在可以运行下面的命令来读取原始输出文件,并将其回放给扬声器。
这样做可以测试播放音量,也可以听录音音量。这样做是一项至关重要的任务,因为你不希望你的树莓派接收到小噪音,但也不希望当你说 “Ok Google “时,它能够勉强听到你的声音。
aplay --format=S16_LE --rate=16000 out.raw
4. 如果你发现播放音量或录音音量过高或过低,那么你可以运行以下命令启动混音器。
该命令可以调整各种输出设备的输出音量。从我的测试来看,我建议你使用至少70的电平,利用本节步骤1中的命令来检查音量水平。
alsamixer
一旦确认麦克风和扬声器工作正常,就可以着手设置你自己的Raspberry Pi谷歌助手!
下载和设置谷歌助手
1. 现在配置和设置了Google Assistant API后,需要做一些事情。
首先让运行下面的命令来更新Raspberry Pi的软件包列表。
sudo apt update
2. 一旦Raspberry Pi完成更新,就可以继续设置运行Google Assistant API所需的一切。
在Raspberry Pi上,创建一个文件,在这个文件中,存储之前在电脑上下载的证书。
要做到这一点,运行以下两个命令,创建一个文件夹,并开始编写我们的凭证文件。
mkdir ~/googleassistant
nano ~/googleassistant/credentials.json
3. 在这个文件中,需要复制下载到电脑上的证书文件的内容。
可以在任何文本编辑器中打开.json文件,然后按CTRL + A再按CTRL + C复制内容。现在在你的SSH窗口中,右击并点击 “粘贴”。
4. 把凭证内容复制到nano会话中后,就可以按CTRL + X,然后按Y,最后按ENTER键保存文件。
5. 现在,凭证文件已经安全地保存到Raspberry Pi上,开始安装一些所依赖的东西。
运行下面的命令将Python3和Python3虚拟环境安装到Raspberry Pi上。
sudo apt install python3-dev python3-venv python3-pip libssl-dev libffi-dev libportaudio2
6. 现在可以在树莓派上运行以下命令来启用python3作为虚拟环境变量。
python3 -m venv env
7. 启用后,可以继续确保已经安装了最新版本的pip和setuptools。
要更新这些Python包,需要在Raspberry Pi上使用以下命令。
env/bin/python3 -m pip install --upgrade pip setuptools --upgrade
8. 要进入设置的这个新的Python环境,应该在终端运行以下命令。
source env/bin/activate
9. 现在已经有了所有的包,需要安装谷歌助手库。
运行下面的命令,利用pip来安装最新版本的Python包。
python3 -m pip install --upgrade google-assistant-library
python3 -m pip install --upgrade google-assistant-sdk[samples]
授权Raspberry Pi使用Google Assistant
1. 现在已经设置好了在Raspberry Pi上运行Google Assistant软件的所有先决条件,终于可以完成系统授权的最后几个步骤了。
要做到这一点,必须首先将谷歌授权工具安装到Raspberry Pi上。这个包将允许验证设备,并给选择权利,以便能够为谷歌账户进行谷歌助理查询。
在Raspberry Pi上运行以下命令来安装Python授权工具。
python3 -m pip install --upgrade google-auth-oauthlib[tool]
2. 现在安装了Google认证库,需要运行它。在Raspberry Pi上运行以下命令。
这个命令会生成一个需要在你的网络浏览器中访问的URL,所以要做好准备。
google-oauthlib-tool --client-secrets ~/googleassistant/credentials.json \
--scope https://www.googleapis.com/auth/assistant-sdk-prototype \
--scope https://www.googleapis.com/auth/gcm \
--save --headless
3. 现在,将看到 “请访问此URL以授权此应用程序:”的文字,后面是一个很长的URL。
请确保您将此URL完全复制到网络浏览器中以打开它。
4. 在这个页面上登录你的谷歌账户,如果你有多个账户,请确保你选择一个你设置的API密钥。
之后,你应该会看到一个页面,上面有 “请复制这个代码,切换到你的应用程序并粘贴在那里 “的文字,然后是一个长长的验证码。
复制验证码并将其粘贴回终端会话中,然后按ENTER键。
如果验证被接受,应该会看到命令行上出现以下一行。”credentials saved: /home/pi/.config/google-oauthlib-tool/credentials.json”
5. 现在已经保存了认证凭证,谷歌还是需要我们同意一些东西。
用这个命令确保你用你项目的id代替<projectid>。
如果你不知道你的项目ID是什么,你可以到Google上的Actions Console,点击你创建的项目,然后点击左上角的Cog然后 “项目设置”。
另外,请确保将<deviceid>替换为您在教程中获得的设备ID。
如果你丢失了你的设备ID可以通过进入Console Actions网站,点击你创建的项目然后进入 “设备注册 “来重新找到它。
若要与助手对话,请按终端中的ENTER键,并说出 “现在几点了 “等动作。
如果一切正常,你会听到助手的口头回应。
googlesamples-assistant-pushtotalk --project-id <projectid> --device-model-id <deviceid>
6. 如果没有听到谷歌助手的任何响应,但确实打开了一个包含您的结果的新标签页,那么您应该回到 “为谷歌助手设置音频 “部分和 “为谷歌助手测试音频 “部分。
在下一节中,我将展示如何重新运行谷歌助手,而不必再次搜索所有的步骤,请确保”项目ID “和 “设备ID “正确。
在树莓派上使用谷歌助手
1. 现在,终于完全授权了树莓派,现在看看如何运行谷歌助手软件。
首先,每当你启动一个新的终端会话时,都需要把它放到设置谷歌助手软件的python虚拟环境中。
要做到这一点,请在Raspberry Pi上运行以下命令。
source env/bin/activate
2. 看到每行前面出现(env),你就会知道这样做是否正确。
(env)的出现意味着可以再次拨打谷歌助手样本的电话。
要启动push to talk样本,需要运行下面的命令,这次不需要写项目id或设备id,因为这些在第一次利用push to talk工具时就被缓存了。
googlesamples-assistant-pushtotalk
3. 除了推送说话样本,还有热词样本代码。这个样例代码会通过监听某些短语来触发它的工作。默认情况下监听 “Ok Google”,然后是你要向它发出的命令。
启动热词样例与推送说话样例非常相似,但使用的是googlesamples-assistant-热词工具。
googlesamples-assistant-hotword --device-model-id <deviceid>
4. 希望现在你已经成功地用Google Assistant软件设置了你的Raspberry Pi。
如果您遇到音频问题,我们建议您回到我们的 “为Google Assistant设置音频 “部分和 “为Google Assistant测试音频 “部分。
让谷歌助手在开机时启动
1. 现在,已经让你的谷歌助手启动并运行,可能会想让它在开机时启动,而不是每次都要去输入命令。
最简单的实现方式就是为它创建一个服务。这个服务将允许谷歌助手在树莓派的后台运行,并让我们保留对它的控制权。
首先,我编写执行热词示例的bash脚本。将从服务文件中调用这个bash脚本。
nano /home/pi/start_assistant.sh
2. 在该文件中,需要添加以下几行:
第一行有助于定义应该利用什么来运行这个文件,所以当命令行解释它时,它将知道需要利用bash。
第二行使用源码从activate文件中读取并执行命令,这会激活前面创建的python环境。
最后,运行热词谷歌助手样本。确保用你的<deviceid>代替。
#!/bin/bash
source /home/pi/env/bin/activate
googlesamples-assistant-hotword --device-model-id <deviceid>
3. 把这些行添加到文件中,按CTRL + X,然后按Y,最后按ENTER键保存。
4. 现在已经创建了bash脚本,可以在树莓派上运行以下命令来为Google Assistant创建服务文件。
sudo nano /lib/systemd/system/assistant.service
5. 在该文件中输入以下几行:
这几行字告诉操作系统如何处理服务,用什么用户来运行它,以及它是否依赖于一个特定的东西,比如说网络是可用的。
[Unit]
Description=Google Assistant
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/bin/bash /home/pi/start_assistant.sh
Restart=on-abort
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
6. 将这些行添加到服务文件中,按CTRL + X键保存,然后按Y键,最后按ENTER键。
7. 现在已经创建了服务,需要启用它,使它在开机自启。
只需要使用systemctl,键入以下命令来启用新服务。
sudo systemctl enable assistant.service
8. 现在服务已经启用,尝试启动它,看看是不是一切正常。
sudo systemctl start assistant.service
9. 现在应该可以使用 “Ok Google “热词与谷歌助手对话和互动了。
现在就尝试一下,以确保服务能如期运行。
如果因为某些原因无法工作,可以利用下面的命令来显示谷歌助手样本的最后输出,请留意任何错误。
sudo systemctl status assistant.service
10. 希望到这里,你现在可以成功设置谷歌助手,并在开机时自启。
如果你喜欢个人助理,你可能也想看看我在树莓派上设置的Alexa教程,它非常简易且有趣。
欢迎转载,请留下出处链接:Labno3 » 树莓派语音识别系统,详细步骤搭建Raspberry Pi谷歌助手