Raspberry Pi Zero2 WでEfficientWord-Netを使う
Raspberry Pi Zero2 WでEfficientWord-Netを動かしたので忘備録的に。
なぜ動かそうと思ったのか?
ちょっと音声認識を使うガジェットを作ろうと思い立ち、WakeWordならSnowboyだろうと思ったら、正式なサポートはもう終わっていたことを知り。forkされたもので学習できそうだけれども、せっかくならという事でEfficientWord-Netを使うことにしました。
動作環境
以下の環境で確認しています。
ハードウェア
- Raspberry Pi Zero2 W(https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/)
- Re:Speaker 2-Mic HAT(https://jp.seeedstudio.com/ReSpeaker-2-Mics-Pi-HAT.html)
- microSDカード(32GByte)
ソフトウェア
- 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