使用本文中的這些 Ansible 劇本可以幫你獲得更優的 Mycroft AI 體驗。
Mycroft AI 是一款虛擬助手應用程式,可以響應語音請求並完成相應的任務,比如在網際網路上搜索你需要的某些資訊,或者下載你喜歡的部落格等等。這是一款優秀的開源軟體,不同於那些收集個人資料業務的公司的同款軟體,Mycroft AI 注重於保護隱私以及提供平臺靈活性。
Mycroft AI 使用 python 開發,可以安裝於不同的硬體平臺上。家喻戶曉的樹莓派便是一個非常熱門的執行語音助手的硬體方案(不過不是唯一的方案)。方便的是,Mycroft 為樹莓派提供了 Picroft映象,雖然目前 Picroft 還有一些限制,比如不支援 64 位系統,不過不能阻止它成為一種優秀的解決方案。
樹莓派 4,我選擇的目標平臺
樹莓派在 Mycroft 社群中非常受歡迎,因為其價效比高,在教育行業中有著巨大的優勢,並且由於 Mycroft 提供的便捷功能以及樹莓派本身易於訪問的輸入/輸出(GPIO)引腳等,為樹莓派提供了有趣的擴充套件可能(比如,提供 喚醒詞 LED GPIO能力)。
樹莓派 4B 具有足夠的 CPU 算力以及記憶體來平穩執行 Mycroft。我使用的是 8G 記憶體的樹莓派4B,執行 Raspberry Pi OS Bullseye 64-bit 系統,你可以從 RaspberryPi.org網站下載該系統映象檔案。
自動化這件事
構建你自己的 Mycroft AI 系統,必須要注意一些細節問題。根據我(一年以來)的初步經驗,以下羅列了一些重要的技術細節點:
- 音訊輸出(揚聲器配置)
- 音訊輸入(麥克風配置)
- 麥克風質量(以購買的實際硬體為準)
- 喚醒詞響應(比如打招呼 “嘿,Mycroft”)
- 響應延遲(比如提問 “天氣怎麼樣”)
這些並不是 Mycroft AI 的問題(LCTT 譯註:難道軟體平臺就沒有處理延時問題?),它們只能是你在選擇硬體和配置操作時必須牢記關心的事情。樹莓派本身能夠執行 Mycroft AI,但有一些配置需要額外的注意下:
- CPU 排程器
- SD 卡效能
- PulseAudio 配置
- 網路延遲
我做了大量的研究和實踐來解決上面列出這些令人頭疼的注意點,最終我實現了我的“終極”目標 —— 最流暢的體驗!
Ansible 雪中送炭
我已經摸索出了最流暢的體驗配置,但是如何確保在任何樹莓派 4 板子上都能不遺漏每一個設定細節,然後達到重新部署這種流暢性體驗的目標呢?
Ansible能幫助你實現。Ansible 在設計上是冪等設計,這意味著它僅在需要時響應更改的請求。如果一切配置正確,Ansible 不會改變任何事情。這便是冪等設計的優美之處。
為了達到這一目的,我使用了兩種 Ansible 場景角色工具:
- 一個用於配置和調整樹莓派
- 一個用於安裝和配置 Mycroft AI
Ansible prepi 角色
Ansible prepi role應用了一些配置,以便讓樹莓派 4B 發揮更佳的效能以及為安裝 Mycroft 做前提準備。
- 更新 Raspberry Pi OS 至最新版本
- 新增 Debian backports 倉庫
- 使用 next 分支更新韌體,該分支支援 5.15 版本核心以及邊緣韌體
- 使用測試版本更新 EEPROM,該版本支援邊緣功能
- 設定
initial_turbo
用來加速啟動過程 - 將樹莓派超頻至 2GHz
- 在 RAMDisck 上掛載
/tmp
- 最佳化
/
分割槽掛載選項,提升 SD 卡讀/寫效能 - 管理 I2C、SPI、UART 介面
- 設定 CPU 控制器至避免在空間核心函式之間發生上下文切換的模式,以便提升效能
- 安裝和配置 PulseAduio(非系統範圍)
- 新韌體或者 EEPROM 安裝後重啟樹莓派
Ansible mycroft 角色
Ansible mycroft role基於指令碼dev_setup.sh
從 Github 倉庫獲取並安裝和配置 Mycroft AI,該指令碼是 Mycroft 核心團隊提供。
- 需要準備 Python3 環境
- 系統整合環境
- 額外的安裝技能
- 安裝 Boto3、py_mplayer、pyopenssl 庫
- 支援 IPC 的 RAMDisck
- 支援檔案配置
- PulseAudio 最佳化
- 安全的 Mycroft 訊息匯流排 websocket
我利用 Ansible 劇本來協調上面兩個角色的使用。
個人配置需求
下面列舉了一些個人配置的需求:
- 能上網的樹莓派 4B 板子(或者更新的板子)
- Raspberry Pi OS 64-bit
- Ansible 2.9(或者更新版本)
- 可正常工作的 SSH
推薦使用 Etcher來燒錄 Raspberry Pi OS 映象至 SD 卡,你也可以使用你選擇的映象燒錄工具。
我將樹莓派超頻來提升效能,不過這可能對你的硬體是一種潛在危險。在使用我的 Ansible 劇本配置之前,請先仔細閱讀。你需要為你的每個配置選擇負責。你將決定使用哪個韌體、哪個 EEPROM。超頻的話需要記得提供相應的冷卻系統。
執行 Ansible 劇本
第一步,使用命令從 Github 獲取 Ansible 劇本:
$ git clone https://github.com/smartgic/ansible-playbooks-mycroft.git
原始碼中,requirements.yml
檔案中提供了該劇本的依賴角色列表,必須從 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 清單,設定需要管理的主機。
[rpi]
rpi4b01 ansible_host=192.168.1.97 ansible_user=pi
[rpi]
代表組,無需更改。該組有一個主機rpi4b01
,其 IP 地址為192.168.1.97
, 並建立pi
作為 Linux(Raspberry Pi OS)上的預設使用者。
現在比較棘手的部分到了:你希望每個選項怎麼配置?這取決於你自己,下面是我的首選配置,供你參考:
# 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
)。
現在關鍵步驟:執行你新建立的劇本。
$ ansible-playbook -i inventory install-custom.yml -k
-k
選項只有在不需要 SSH 金鑰的時候才使用。在命令執行期間,樹莓派可能會重啟若干次。Ansible 劇本會自動處理這個問題,不必擔心。
Ansible 配置完成後,你可以看到一條祝賀訊息,提示你下一步需要做什麼。
Ansible 讓定製 Mycroft 變得更容易
這些 Ansible 劇本是我開始使用 Mycroft AI 後學到的經驗教訓。它們幫助我在任何一個地方都能構建、重構、定製、複製我的安裝,並保持一致,這讓我很省心!
讀完此文,你有何意見、問題或疑慮?歡迎在 Twitter上 @goldyfruit上和我交流,或者訪問Mycroft 頻道搜尋答案。
via: https://opensource.com/article/21/12/mycroft-raspberry-pi-ansible
作者:Gaëtan Trellu選題:lujun9972譯者:jrglinux校對:wxy
本文由 LCTT原創編譯,Linux中國榮譽推出