DUICUO

Ansibleを使用してRaspberry PiにMycroft AI音声アシスタントをデプロイする

[[441459]]

この記事の Ansible スクリプトを使用すると、Mycroft AI エクスペリエンスを向上させることができます。

Mycroft AIは、音声リクエストに応答し、インターネット上で必要な情報を検索したり、お気に入りのブログをダウンロードしたりするなど、対応するタスクを実行するバーチャルアシスタントアプリケーションです。優れたオープンソースソフトウェアであり、個人データを収集する企業の類似ソフトウェアとは異なり、プライバシーの保護とプラットフォームの柔軟性の提供に重点を置いています。

Mycroft AIはPythonで開発されており、様々なハードウェアプラットフォームにインストールできます。中国ではお馴染みのRaspberry Piは、音声アシスタントを実行するための非常に人気の高いハードウェアソリューションです(ただし、音声アシスタントだけが使えるわけではありません)。Mycroftは便利なことに、Raspberry Pi用のPicroftイメージを提供しています。Picroftは現在、64ビットシステムをサポートしていないなど、いくつかの制限がありますが、それでも優れたソリューションであることに変わりはありません。

私が選んだターゲットプラットフォーム、Raspberry Pi 4

Raspberry Piは、その高いコストパフォーマンスからMycroftコミュニティで非常に人気があり、教育業界において大きな優位性を持っています。さらに、Mycroftが提供する便利な機能と、Raspberry Pi独自の簡単にアクセスできる入出力(GPIO)ピンにより、興味深い拡張性(ウェイクワードLEDのGPIO機能など)が実現します。

Raspberry Pi 4Bは、Mycroftをスムーズに実行するのに十分なCPUパワーとメモリを備えています。私はRaspberry Pi OS Bullseye 64ビットシステムを搭載した8GBのRaspberry Pi 4Bを使用しました。システムイメージファイルはRaspberryPi.orgのウェブサイトからダウンロードできます。

オートメーション

独自のMycroft AIシステムを構築するには、いくつかの細部に注意する必要があります。私の最初の経験(1年以上)に基づいて、重要な技術的詳細をいくつかご紹介します。

  • オーディオ出力(スピーカー構成)
  • オーディオ入力(マイク設定)
  • マイクの品質(実際に購入したハードウェアによって異なります)
  • ウェイクワード応答(例:「Hey, Mycroft」という挨拶)
  • 応答の遅延(例:「天気はどうですか?」と尋ねるとき)

これらはMycroft AIの問題ではありません(LCTT翻訳者注:ソフトウェアプラットフォームはレイテンシの問題に対処していないのでしょうか?)。ハードウェアの選択や操作の設定時に留意すべき点です。Raspberry Pi自体はMycroft AIを実行できますが、いくつかの設定項目には特別な注意が必要です。

  • CPUスケジューラ
  • SDカードの性能
  • PulseAudio 設定
  • ネットワーク遅延

私は、上記の厄介な問題を解決するために多くの調査と実践を行い、ついに「究極の」目標である最もスムーズな体験を実現しました。

Ansibleはタイムリーなサポートを提供します

最もスムーズなエクスペリエンスの構成を見つけましたが、すべての設定の詳細がどの Raspberry Pi 4 ボードにも含まれていることを保証し、このスムーズなエクスペリエンスを再展開するという目標を達成するにはどうすればよいでしょうか?

Ansibleはこれを実現するのに役立ちます。Ansibleはべき等性を持つように設計されており、必要な場合にのみ変更要求に応答します。すべてが正しく設定されていれば、Ansibleは何も変更しません。これがべき等設計の優れた点です。

これを実現するために、私は 2 つの Ansible シーン キャラクター ツールを使用しました。

  • Raspberry Piの設定と調整のためのツール
  • Mycroft AIをインストールおよび設定するためのツール

Ansible prepi ロール

Ansible prepi ロールは、Raspberry Pi 4B のパフォーマンスを最適化し、Mycroft のインストールを準備するためのいくつかの構成を適用します。

  • Raspberry Pi OS を最新バージョンに更新します。
  • Debianバックポートリポジトリを追加する
  • カーネル バージョン 5.15 とエッジ ファームウェアをサポートする次のブランチを使用してファームウェアを更新します。
  • エッジ機能をサポートするテスト バージョンを使用して EEPROM を更新します。
  • initial_turbo設定すると起動プロセスが高速化されます。
  • Raspberry Piを2GHzにオーバークロックする
  • RAMディスクに/tmpマウントする
  • SD カードの読み取り/書き込みパフォーマンスを向上させるために、マウント オプションを最適化/パーティション化します。
  • I2C、SPI、UARTインターフェースを管理する
  • パフォーマンスを向上させるために、CPU コントローラを、スペースカーネル関数間のコンテキスト切り替えを回避するモードに設定します。
  • PulseAduio のインストールと構成 (システム範囲外)
  • 新しいファームウェアまたは EEPROM をインストールした後、Raspberry Pi を再起動します。

アンシブル・マイクロフトのキャラクター

Ansible Mycroft ロールは、GitHub リポジトリから取得され、Mycroft AI でインストールおよび設定されたスクリプトdev_setup.shに基づいています。このスクリプトは、Mycroft コアチームによって提供されています。

  • Python 3 環境が必要です。
  • システム統合環境
  • 追加のインストールスキル
  • Boto3、py_mplayer、pyopenssl ライブラリをインストールします。
  • IPC 対応 RAM ディスク
  • サポートファイルの構成
  • PulseAudioの最適化
  • セキュアなMycroftメッセージバスWebソケット

上記の 2 つのロールの使用を調整するために、Ansible スクリプトを使用しました。

個人設定要件

以下に個人構成の要件を示します。

  • インターネットにアクセスできる Raspberry Pi 4B ボード (またはそれ以降のボード)。
  • ラズベリーパイ OS 64ビット
  • Ansible 2.9(またはそれ以降)
  • 正常に動作するSSH

Raspberry Pi OS イメージを SD カードに書き込むには Etcher を使用することをお勧めしますが、任意のイメージ書き込みツールを使用することもできます。

パフォーマンス向上のため、Raspberry Piをオーバークロックしていますが、これはハードウェアに潜在的な危険をもたらす可能性があります。Ansible Playbookの設定をよく読んでからご使用ください。設定の選択はすべて自己責任となります。使用するファームウェアとEEPROMはご自身で決定してください。オーバークロックする場合は、適切な冷却対策を講じることを忘れないでください。

Ansibleスクリプトを実行する

最初のステップは、コマンドを使用して Github から Ansible プレイブックを取得することです。

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

ソース コードでは、 requirements.ymlファイルにプレイブックの依存ロールのリストが提供されており、これを Ansible Galaxy から取得する必要があります。

  1. $ cd ansible - playbooks - mycroft
  2. $ ansible - galaxy install - r requirements . yml
  3. Starting galaxy role install process
  4. - downloading role 'mycroft' , owned by smartgic
  5. - downloading role from https : //github.com/smartgic/ansible-role-mycroft/archive/main.tar.gz
  6. - extracting smartgic . mycroft to / home / goldyfruit /. ansible / roles / smartgic . mycroft
  7. - smartgic . mycroft ( main ) was installed successfully
  8. - downloading role 'prepi' , owned by smartgic
  9. - downloading role from https : //github.com/smartgic/ansible-role-prepi/archive/main.tar.gz
  10. - extracting smartgic . prepi to / home / goldyfruit /. ansible / roles / smartgic . prepi
  11. - smartgic . prepi ( main ) was installed successfully

2 番目のステップは、リポジトリ内の Ansible マニフェストを編集し、管理する必要があるホストを設定することです。

  1. [ rpi ]
  2. rpi4b01 ansible_host = 192.168 . 1.97 ansible_user = pi

[rpi]はグループを表しており、変更する必要はありません。このグループには、IPアドレス192.168.1.97を持つホストrpi4b01があり、Linux (Raspberry Pi OS) のデフォルトユーザーとしてpiが作成されます。

さて、ここからが肝心です。各オプションをどのように設定するかはあなた次第です。参考までに、私の推奨設定を以下に示します。

  1. # file : install - custom . yml
  2. - hosts : rpi
  3. gather_facts : yes
  4. become : yes
  5. pre_tasks :
  6. - name : Install Python 3.x Ansible requirement
  7. raw : apt-get install - y python3
  8. changed_when : no
  9. tags :
  10. - always
  11. vars :
  12. # PREPI
  13. prepi_pi_user : pi
  14. prepi_hostname : mylovelypi
  15. prepi_firmware_update : yes
  16. prepi_overclock : yes
  17. prepi_force_turbo : yes
  18. prepi_cpu_freq : 2000
  19. prepi_pulseaudio_daemon : yes
  20. # MYCROFT
  21. mycroft_branch : dev
  22. mycroft_user : "{{ prepi_pi_user }}"
  23. mycroft_skills_update_interval : 2.0
  24. mycroft_recording_timeout_with_silence : 3.0
  25. mycroft_enclosure_name : picroft
  26. mycroft_extra_skills :
  27. - https : //github.com/smartgic/mycroft-finished-booting-skill.git
  28. tasks :
  29. - import_role :
  30. name : smartgic . prepi
  31. - import_role :
  32. name : smartgic . mycroft

上記の構成は、ファイル (例: install-custom.yml ) に保存する必要があります。

ここで重要なステップとして、作成したプレイブックを実行します。

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

-kオプションは、SSH キーが不要な場合にのみ使用します。コマンド実行中に Raspberry Pi が数回再起動する場合があります。Ansible スクリプトはこれを自動的に処理するので、心配する必要はありません。

Ansible が設定されると、次に何をすべきかを促すメッセージが表示されます。

おめでとうメッセージ (Gaëtan Trellu、CC BY-SA 4.0)

Ansible を使用すると、Mycroft のカスタマイズが容易になります。

これらのAnsibleスクリプトは、Mycroft AIを使い始めてから学んだ教訓です。ビルド、リファクタリング、カスタマイズ、インストールのコピーが可能になり、どこでも一貫性を維持できるため、多くの手間が省けます。

この記事を読んで、ご意見、ご質問、ご懸念などございましたら、お気軽にTwitter @goldyfruitまでお寄せください。または、Mycroftチャンネルで回答をご覧ください。