自制基于 Snips 和 Snowboy 的声控音箱来保护你的隐私

> 一步步教你用现有硬件,构建隐私、开源、声控的音箱。

Snips 的团队已经开发了一款开源智能扬声器,它与 Spotify 一起运行

音箱(或扬声器)专注于音乐播放,并且可以轻松地通过说出您想要听的东西,来控制您正在听的音乐。它纯粹只是一个演示项目,但是我们已经习惯了便利性,所以我们希望让任何有兴趣,在家就可能以简单的复制。

我们在整个项目中,将学到关于 Raspberry Pi 上的音乐播放、Arduino 和各种 IoT 技术,并希望能分享最有趣的部分。我们将介绍扬声器的每个部分。但是为了尽可能简单,我们将其分解为5个部分:

  • 步骤1:Raspberry Pi 镜像
  • 步骤2:物料清单
  • 步骤3:在 Pi 上设置软件和驱动程序
  • 步骤4:为您的扬声器添加语音控制
  • 步骤5:灯光与声音
  • 步骤6:组装一切

所以,这是一个简短的说明,说明了这个扬声器的主要组成部分和主要学习的描述。某些部分比其他部分更具技术性,但我们希望对任何尝试自己去构建类似项目的人都可能有用。在我们几个月前,当我们在这个项目上进行第一步时,这对我们来说肯定是非常有用的!

所以让我们开始吧。

步骤1: Raspberry Pi 镜像

在这一步,我们将介绍,安装一个专用于声音控制的一体式 Raspberry Pi 镜像。 如果您想要为您的扬声器添加其他功能(例如,天气预报),则可以在此处(Snips Voice Platform)查看更高级的配置。 让我们开始吧:

1.下载 snips spkr 镜像:

https://s3.amazonaws.com/snips/raspbian/spkr.zip

2.将镜像烧录到 Raspberry Pi 镜像中

3.将您的 SD 卡插入树莓,然后打开并等待 Raspberry Pi 启动

4.SSH 到你的 Raspberry Pi(用户名: pi,密码:password),如:

ssh pi@spkr.local

5.现在到了有趣的部分!以下是向您的扬声器添加语音控制的简单方式。从 Docker 检索 NLU 引擎:

docker pull snipsdocker/platform

6.复制你的 Spotify 授权信息你的 home 文件夹的 config 文件

7.安装依赖

cd home-python
sudo -H pip install -r requirements.txt
/home/pi/mopidy_setup.sh

8.在启动时,运行 Snips NLU 服务

sudo systemctl enable spkr.snips.service

9.重启 Raspberry Pi

OK,所以现在你的 Raspberry Pi 有一个 AI,它已经准备好连接到它的组织了 :耳朵(麦克风),声乐和声(扬声器)和灯(leds)...!

步骤2:材料清单

以下是我们用于制作声控音箱所需要的材料:

材料清单

重要的部分

  • Raspberry Pi Model 3
  • Hifiberry AMP+ & 12V Adapter
  • 扬声器
  • USB 麦克风

有趣的部分

> 这些部分不是强制性的,但它们使你的声音激活的扬声器脱颖而出!

  • Arduino Micro
  • Neopixel Ring 24 
  • 被动散热器

盒子

为了使您更容易组装这些部件,我们制作了一个 3D 打印的示例:https://s3.amazonaws.com/labs.snips.ai/downloads/spkr_3d_parts.zip

如果你没有 3D 打印机,那没关系,我们也没有!我们使用 3D Hubs 服务来打印我们的版本。

杂项

  • 直流母插头
  • 热胶枪
  • 螺丝 2mm x 6mm
  • 线(音频和电线)

步骤3:在 Raspberry Pi 上安装软件和驱动

a.设置 Spotify

制作声音激活的扬声器的第一步是,设置音乐播放。 为此,我们决定使用 Mopidy,这是一款开源音乐播放平台,提供轻松的方式连接多种音乐来源和多种播放方式。它内置 Spotify 支持,一些现有的基于 Web 的控制器应用程序,以及一个用于以编程方式控制播放的非常有效的API

要启用 Spotify 的流音乐,您需要一个具有电子邮件身份验证的高级帐户。如果您使用Facebook创建了帐户,则可以选择添加电子邮件密码验证。 。

/!\ This account must use a username and password to authenticate, and not the Facebook authentication.

然后:

  • 创建 Spotify 应用程序
  • 从应用程序里获取 client_idclient_secret
  • 保存此信息,并将其复制到 home/pi/config 文件中

b.连接Hifiberry

为扬声器供电并提高声音质量(Raspberry Pi的默认音质不是最好),我们使用的是 Hifiberry AMP +。有很多声卡可以使用,有些是专门为 Raspberry Pi 制作的,虽然大多数声卡应该可以工作。我们决定使用 HiFiBerry,因为它似乎是当时最容易入门的选择,我们对结果也感到满意。

The good thing is that you don’t need and extra alimentation for the hifiberry, because it powers the Raspberry pi

HiFiBerry 位于 Raspberry Pi 的顶部,作为一个扩展板。它需要一个 12V 的电源为自身供电,并具有用于连接扬声器的连接器。为了被系统识别,必须对 ALSA 配置文件进行一些细微的修改,但是 HiFiBerry 教程使这个过程相当简单。

从 /boot/config.txt 文件中,删除这一行:

dtparam=audio=on

并添加以下行(这取决于您使用的卡的型号,这里我们使用 HiFiBerry AMP +)

dtoverlay=hifiberry-amp

设置完成!

步骤4: 为扬声器添加声音控制

通过使用 Snips SDK,我们可以通过 Web 界面,轻松地为音乐播放器添加语音控制。一旦你告诉 Snips SDK,你想要理解什么样的短语,你所需要做的就是在文本中传递一个语音命令,并返回其含义。

SDK 中有几个单独的组件,可以使您的命令大声转换到,您期望在 Pi 上发生的事情:为了具有完全集成的语音控制功能,您需要一个麦克风,以确定何时开始录制语音命令(这称为“热词检测”、或称唤醒词检测),以及将命令的音频转换为文本的方法。

在Snips,我们相信,为了方便使用 AI,您不必牺牲您的隐私。这意味着必须有一种方式,您的房屋不会有一个不断的音频直播到云端。而在今天,这是类似的、最流行的产品的工作原理 🤔。 所以现在我们不是完全私有的设计,但一旦我们解决了设备上的语音到文本,我们只需要交换两个代码砖(bricks),并声称它是大声、清楚!

a.添加唤醒词

从房屋的环境噪声中,检测热词对语音控制至关重要:一旦检测到热字,就会触发录音。

幸运的是有一种方法可以用,即通过 Snowboy 来对设备进行热门检测。这个开源框架允许您使用自己的热门词汇,从而允许您在正确的时间开始录制。一旦经过了一定的时间,就停止录制,并将音频文件转换为文本。

默认情况下,spkr 使用 『Hey Snips』 作为唤醒词。你可以随意使用你想要的任何热门词汇:

  • 从 Snowboy 的网站上录入,并下载唤醒词:https://snowboy.kitt.ai/
  • 下载 .pmdl 文件
  • 将文件放到 Raspberry Pi 上的 /opt/snips/config 文件夹下

b.配置语音到文本

要使用 Google Speech to Text 进行语音文字处理,您需要使用 Speech Service 访问。 您可以在那里获取帐户和凭据文件:https://cloud.google.com/speech/。每个月,您都可以免费使用有限的时间。不要担心,当检测到热门词时,数据只会发送到 Google,所以当检测到热门词时,它将保证隐私,您不会超过每月限制 60 分钟。

  • 启用 Google Speech API
  • 以 json 格式下载凭据
  • 将此文件复制到树莓的正确位置:

步骤5:灯光与声音

没有某种形式的反馈,就不可能知道麦克风是否在听,你的命令是否是奏效的! 🤖 所以,我们想添加声音和一些LED,以确认从 spkr 到用户是否正确。对于LED,可以使用多种选项。最简单的是将一些 LED 连接到 Raspberry Pi 的 GPIO 引脚。在 Python 中有一个内置的脚本命令框架,我们在几个小时内就运行了这个脚本。

虽然它能给我们一些有趣的结果,我们希望有更多的 LED (在 GPIO 上只能是 8 个)。 所以我们选择由一个 Arduino 控制 NeoPixel 环。我们使用的 LED 环有更多的光,并且具有很大的表现力,即使没有相似的复杂的动画。

a. 配置 Arduino 和 NeoPixel 环

我们制作了一个库,使用 Arduino micro 作为 Raspberry Pi 的执行器,这里是配置它的步骤:

  • 先安装 Arduino IDE,它将帮助您将代码上传到 Arduino
  • 复制或克隆 Neopixel Ring 到你的 Arduino 库文件夹中,如 */documents/arduino/libraries
  • 复制或克隆 Snips_lights library 到相同的 Arduino 库文件夹中
  • 打开 Snips_lights 库的示例代码 Home.ino
  • 插上您的 Arduino Micro,并通过 Arduino IDE 上传示例。
现在Arduino已经安装好了,你可能要立即测试环,去步骤6找出如何连线所有...😎

b.声音库

为了将扬声器的状态传达给用户,例如 “started listening” 或者 “error”,我们想播放一些自定义的声音,而不会中断音乐。我们探索了各种文字到语音(TTS)的解决方案,并发现了一些非常令人印象深刻的产品,所有这些都太贵了。相反,我们发现了一些类似于 R2-D2 制作的免版税声音,这个声音传达了很好的状态。 那当然是 - 很酷!🙊

步骤6:组装一切

(PS:由于 3D 打印限制,这里就忽略部分的组装步骤。)

当您启动 Raspberry Pi 时,您的 spkr 应该工作,您不必手动运行命令来使其运行。为此,我们创建了两个系统服务:

  • spkr.snips.service:此服务负责启动包含 NLU 引擎,和通信总线的 docker 容器。
  • spkr.python.service:此服务负责启动控制灯光,并与容器通信的 python 脚本。
您可以在 /lib/systemd/system 文件夹中找到相应的文件。

您可以通过说 “Hey Snips!” 等待光线变蓝,然后说 “Play me some jazz” 或 “Play Supertramp”。

🎉 🎉 🎉 🎉 🎉🎉 🎉🎉 🎉🎉 🎉🎉 🎉🎉 🎉🎉 🎉🎉 🎉🎉

以下是在唤醒词之后,你可以使用的声音命令:

- Play / Pause / Stop
- Next Song
- Play some Jazz/Rock/Dirty South/… you name it- Play some Beyonce/Eminem/etc….
- and other secret one you’ll have to find out

恭喜!你现在有自己的智能扬声器!

原文链接:https://medium.com/snips-ai/how-to-build-a-voice-controlled-speaker-that-protects-your-privacy-ec6429a2c673

2 人评价

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.