💭

Raspberry Pi Zero2 WでEfficientWord-Netを使う

2024/01/13に公開

Raspberry Pi Zero2 WでEfficientWord-Netを動かしたので忘備録的に。

なぜ動かそうと思ったのか?

ちょっと音声認識を使うガジェットを作ろうと思い立ち、WakeWordならSnowboyだろうと思ったら、正式なサポートはもう終わっていたことを知り。forkされたもので学習できそうだけれども、せっかくならという事でEfficientWord-Netを使うことにしました。

動作環境

以下の環境で確認しています。

ハードウェア

ソフトウェア

  • Raspberry Pi OS Lite(64bit) (2023-12-05)

OSの書き込み

Raspberry Pi Imagerを使ってOSイメージをSDカードに書き込みます。
こちらから取得(https://www.raspberrypi.com/software/)
書き込み方法はいろいろな記事があるので割愛。

ハードウェアの組立

Raspberry Pi Zero2 WとMic HATを接続します。こんな感じ

組み立てたらSDカードを挿入して電源を入れます。

Audio Driverの設定

起動したらログインします。
ログイン後、以下のコマンドを入力します。

sudo apt update

ここでupgradeまでしてしまうと、Kernelのバージョンとlinux-headerのバージョンが異なってビルドができなくなるのでapt upgradeはせずに進めます。依存関係が自力で解決できるなら最新を使うほうが良いです。

swapサイズの設定

次にビルドの時にメモリ不足にならないようにswapファイルのサイズを増やしておきます。デフォルトは100MByteになっているので、ここでは2GByteまで増やしました。
以下の手順で行います。

sudo nano /etc/dphys-swapfile

ここでファイル内のCONF_SWAPSIZEに2048を指定し、保存後再起動します。再起動後、以下のコマンドでswapのサイズが増えていることを確認します。

swapon -s

ビルド環境のインストール

以下のコマンドでビルドに必要なパッケージを追加します。

sudo apt install build-essential git

Audio Driverのソースコード取得

Re:Speaker 2-Mic HATの公式レポジトリを使うと、Kernel 6系列のビルドが
出来ないようです。なので、こちらのレポジトリのものを使いました。https://github.com/HinTak/seeed-voicecard

以下のコマンドでソースコードの取得とビルドを行います。

git clone --depth=1 https://github.com/respeaker/seeed-voicecard.git
cd seeed-voicecard/
sudo ./install.sh

インストール完了後再起動してオーディオデバイスが利用可能か確認します。
以下のコマンドで確認できます。

aplay -l
arecord -l

ALSAの設定を変えたい場合、/etc/asound.confを修正します。インストールされた状態だと/etc/voicecard/asound_2mic.confにシンボリックリンクが張られているので、必要に応じて変更します。

EffecientWord-Netのインストール

以下の手順でEffecientWord-Netをインストールします。

Pythonなどのバージョン確認

実行にはPython3.6-3.9が必要です。今回のOSイメージでは3.9が標準で入っているので特に行う作業はありません。
tflite_runtimeのバージョンは2.10などが必要です。32bit OSではパッケージとしてインストールできるバージョンが2.5くらいまでなので、ここがネックで32bit OSでは試せていません。tflite_runtimeをソースからビルドするなら使えるかもしれません。

必要なパッケージの追加

必要なパッケージを追加します。

sudo apt install -y portaudio19-dev libsndfile1-dev ffmpeg
sudo apt install python3-pip

EffecientWord-Netのインストール

以下のコマンドでインストールします。必要に応じてpyenvなど使ってください。

sudo pip3 EfficientWord-Net

これで必要なものが追加されます。

動作確認

以下のコマンドで動作を確認します。

python3 -m eff_word_net.engine

初回起動時、必要なパッケージも移動で取得します。
※32bit OSだとここでtflite_runtimeの適切なバージョンがないといわれて進めません。

実行後、以下のメッセージが出て、認識できれば正常に動作しています。

All done! Carry on.
Say Mycroft / Alexa / Siri

注意点

バッファの設定が適切でないとAudio StreamのあたりでInput Overflowとか例外が発生します。
この時、SimpleMicStream(window_length_secs=1.5, sliding_window_secs=0.75)のパラメータを調整すると改善しました。CPUの処理速度などにも依存していそうです。

まとめ

以上の手順で動作させることができました。次は独自モデルの学習を試す予定です。

Discussion