使用 Ansible 在 Raspberry Pi 上部署 Mycroft AI 语音助手

使用这些 Ansible playbook 获得优化的 Mycroft AI 体验。
46 位读者喜欢这篇文章。
Looking at a map

opensource.com

Mycroft AI 是一款虚拟助手应用程序,可以响应口头请求并完成诸如在 Internet 上搜索您需要的信息或下载您喜欢的播客等任务。它是一款优秀的开源软件,与那些以收集个人数据为业务的公司提供的类似软件不同,它提供隐私和平台灵活性。

Mycroft AI 用 Python 编写,可以安装在许多不同的硬件平台上。著名的 Raspberry Pi 开发板是运行语音助手的热门选择 *(但不是唯一的)*。方便的是,Mycroft 为 Raspberry Pi 提供了一个镜像,称为 Picroft。Picroft 是一个很好的解决方案,但它也有一些限制,例如缺乏 64 位支持。

Raspberry Pi 4,首选平台和我的目标

Raspberry Pi 开发板在 Mycroft 社区中很受欢迎,因为它价格便宜,具有很大的教育潜力,并且由于 Mycroft 的技能和 Pi 易于访问通用输入/输出 (GPIO) 引脚(例如,唤醒词 LED GPIO 技能),因此可以进行有趣的扩展。

4B 型号具有足够的 CPU 能力和内存来流畅运行 Mycroft。我使用配备 8GB 内存的 4B 型号,运行 Raspberry Pi OS Bullseye 64 位 Lite,您可以从 RaspberryPi.org 下载。

另一个自动化故事

构建您自己的 Mycroft AI 系统意味着您必须注意一些细节。根据我最初的经验(一年前),以下是您必须牢记的重要技术细节列表

  • 音频输出 *(扬声器配置)*
  • 音频输入 *(麦克风配置)*
  • 麦克风质量(*您实际购买的硬件*)
  • 唤醒词响应(“Hey Mycroft!”)
  • 响应延迟(“今天天气怎么样?”)

这些不是 Mycroft AI 的问题,只是您在选择硬件和配置操作系统时必须牢记的事项。Pi 本身能够运行 Mycroft AI,但有一些调整需要特殊配置。具体来说,这些是

  • CPU 调度器
  • SD 卡性能
  • PulseAudio 配置
  • 网络延迟

我不得不进行大量研究和手动操作才能解决上述列表中的问题,但我确实实现了“最终”目标——最流畅的体验!

Ansible 来救援!

现在我已经创建了*最流畅的体验*,我如何确保为实现此目标而采取的每一项操作都被捕获并仅在任何 Raspberry Pi 4 开发板上需要时重新应用?

Ansible 来救援!Ansible 在设计上是幂等的,这意味着它仅在需要时应用请求的更改。如果一切配置正确,Ansible 不会改变任何东西。这就是幂等性的美妙之处!

为了实现这个最终目标,我使用了两个 Ansible 角色

  • 一个用于配置和调整 Raspberry Pi
  • 一个用于安装和配置 Mycroft AI

Ansible prepi 角色

Ansible prepi 角色 应用一些配置以从 Raspberry Pi 4B 开发板获得更好的性能,并准备 Mycroft 的路径。

  • 将 Raspberry Pi OS 更新到最新版本
  • 添加 Debian backports 存储库
  • 使用 next 分支更新固件,该分支提供内核 5.15 和边缘固件
  • 使用 beta 版本更新 EEPROM,该版本提供边缘功能
  • 设置 initial_turbo 以加快启动过程
  • 将 Raspberry Pi 超频至 2Ghz
  • 将 /tmp 挂载到 RAMDisk
  • 优化 / 分区挂载选项以提高 SDcard 的读/写速度
  • 管理 I2C、SPI 和 UART 接口
  • 将 CPU 调控器设置为 performance,以避免在 idle* 内核函数之间进行上下文切换
  • 安装和配置 PulseAudio *(非系统范围)*
  • 在新固件或 EEPROM 安装后重启 Raspberry Pi

Ansible mycroft 角色

这个 Ansible mycroft 角色 基于 Mycroft 核心团队提供的 dev_setup.sh Bash 脚本,从 GitHub 存储库安装和配置 Mycroft AI Core。

  • Python 3 虚拟环境
  • Systemd 集成
  • 安装额外的技能
  • 安装 Boto3、py_mplayer 和 pyopenssl 库
  • 支持 IPC 的 RAMDisk
  • 文件配置支持
  • PulseAudio 优化
  • 保护 Mycroft 消息总线 websocket

我需要一个 Ansible playbook 来协调这两个角色。

个人要求

以下是此项目的要求列表

  • 连接到您的网络的 Raspberry Pi 4B 开发板(或更高版本)
  • Raspberry Pi OS 64 位
  • Ansible 2.9(或更高版本)
  • SSH,已启动并运行

要将 Raspberry Pi OS 镜像刻录到 SD 卡,您可以使用 Etcher 或您选择的映像工具。

我超频我的 Pi 以获得性能提升,但这可能对您的硬件有害。在使用我的 Ansible playbook 之前,请仔细阅读它们!*您对使用此角色所做的选择负责。* 您决定使用哪个固件,哪个 EEPROM。同样的规则适用于超频功能。请记住,超频需要适当的冷却系统。

执行 Ansible playbook

第一步是从 GitHub 检索 Ansible playbook。使用以下 git 命令

$ git clone https://github.com/smartgic/ansible-playbooks-mycroft.git

此存储库包含一个 Ansible requirements.yml 文件,其中提供了此 playbook 所需的 Ansible 角色列表,这些角色必须从 Ansible Galaxy 检索。

$ cd ansible-playbooks-mycroft
$ ansible-galaxy install -r requirements.yml
Starting galaxy role install process
- downloading role 'mycroft', owned by smartgic
- downloading role from https://github.com/smartgic/ansible-role-mycroft/archive/main.tar.gz
- extracting smartgic.mycroft to /home/goldyfruit/.ansible/roles/smartgic.mycroft
- smartgic.mycroft (main) was installed successfully
- downloading role 'prepi', owned by smartgic
- downloading role from https://github.com/smartgic/ansible-role-prepi/archive/main.tar.gz
- extracting smartgic.prepi to /home/goldyfruit/.ansible/roles/smartgic.prepi
- smartgic.prepi (main) was installed successfully

第二步是编辑存储库中提供的 Ansible 清单,以引用我需要 Ansible 管理的主机。

[rpi]
rpi4b01 ansible_host=192.168.1.97 ansible_user=pi

[rpi] 是组,不应更改。该组有一个名为 rpi4b01 的主机,其 IP 为 192.168.1.97 并提供 pi 作为 Linux 用户(Raspberry Pi OS 上的默认用户),供 Ansible 连接。

现在是棘手的部分:您希望每个选项的值是什么?这取决于您,但这是我的首选配置

# file: install-custom.yml
- hosts: rpi
  gather_facts: yes
  become: yes

  pre_tasks:
    - name: Install Python 3.x Ansible requirement
      raw: apt-get install -y python3
      changed_when: no
      tags:
        - always

  vars:
    # PREPI
    prepi_pi_user: pi
    prepi_hostname: mylovelypi
    prepi_firmware_update: yes
    prepi_overclock: yes
    prepi_force_turbo: yes
    prepi_cpu_freq: 2000
    prepi_pulseaudio_daemon: yes

    # MYCROFT
    mycroft_branch: dev
    mycroft_user: "{{ prepi_pi_user }}"
    mycroft_skills_update_interval: 2.0
    mycroft_recording_timeout_with_silence: 3.0
    mycroft_enclosure_name: picroft
    mycroft_extra_skills:
      - https://github.com/smartgic/mycroft-finished-booting-skill.git

  tasks:
    - import_role:
        name: smartgic.prepi

    - import_role:
        name: smartgic.mycroft

内容需要保存在文件中(例如,install-custom.yml)。

现在到了真相大白的时刻:运行您新创建的 playbook。

$ ansible-playbook -i inventory install-custom.yml -k

只有在使用 SSH 密钥时才需要来自 ansible-playbook 命令的 -k 选项。在 playbook 执行期间,Raspberry Pi 可能会重启几次。playbook 足够智能,可以处理这个问题。

Ansible 完成后,您会看到一条祝贺消息,提示您需要采取的下一步措施。

Ansible 使自定义 Mycroft 变得容易

这些 playbook 是自从我开始 Mycroft AI 之旅以来所学到的经验教训。它可以让我构建、重建、自定义和复制我的安装,并且可以安心地在任何地方保持一致性!

您有任何意见、问题或疑虑吗?发表评论,在 Twitter 上访问我 @goldyfruit,或访问 Mycroft 频道

接下来要阅读的内容

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.