ラズパイ4(or 5)にインストールしてローカル・オフラインで稼働
前回のOpenJTalk版 の続編
64-bit環境でも動くAquesTalkを使ってみます。ライセンスに関しては個人で非商用利用する分には無料で使えます。
OSイメージはRaspberry Pi OS Desktop (64-bit)Bookworm
ラズパイ5からイヤホンジャックがなくなったのでUSBスピーカーやUSBto3.5mmコンバーターなどを使います。
ラズパイの場合はAquesTalk Piを使います。
新規にフォルダーを作ってそこにダウンロード・インストールします。
1 2 3 4 |
mkdir AquesTalk_Pi cd AquesTalk_Pi wget -qO- https://raw.githubusercontent.com/noraworld/aquestalk-installer/master/bin/pi | sh |
以下のようにテキストをaplayにパイプして使えます。
1 2 3 |
aquestalkpi/AquesTalkPi 本当にラズベリーパイでリアルタイムに喋れるんですか? | aplay echo 本当です。 | aquestalkpi/AquesTalkPi -b -f - | aplay |
ファイルに記述した文章を読み上げてみます。
>sudo nano txt
使い方も簡単。ホストから文字列を、シリアルインターフェースを介して送るだけ。あとはAquesTalk がリアルタイムに読み上げます。数値も、適切な読みとアクセントで読み上げることができます。
1 |
cat txt| aquestalkpi/AquesTalkPi -b -f - | aplay |
raspberry pi 4 , 5 で実行してみましたが、本当にリアルタイムで音声合成して発話されます。
ただ、3やZeroでは、初回にサウンドの最初の部分が欠落してしまい、続けて再生すると全体が再生されました。再生されないわけではないので原因は….不明です。
中品質と自称していますが、結構高品質と評判のVoiceVox を使ってみます。いくつかバージョンがあり、商用・非商用問わず無料です。
まずWindows PCをサーバーにしてラズパイをクライアントとしてして使う「エンジン:engine)」。
IPアドレスを指定していてもLAN内でブロックされて使えないことがあります。この場合ngrok経由でトンネルして使います。
ngrokでは起動ごとにアクセスするアドレスが都度変わるので、ちと面倒です。
また、AquestTalkと同様にローカルにインストールしてオフラインで使える「コア:core」があります。
今回はこのコア版を使ってみます。
ラズパイは5でOSイメージはRaspberry Pi OS Desktop (64-bit)Bookworm
まずは仮想環境を作ってそこで作業します。
1 2 3 |
python3 -m venv venv1 source venv1/bin/activate |
適当な作業領域を作りそこに移動します。
1 2 3 |
mkdir voicevox_core cd voicevox_core |
最新のCOREサイトからVOICEVOX コアライブラリをダウンロードします。
wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.3/voicevox_core-linux-arm64-cpu-0.15.3.zip
ダウンロード後解凍して、voicevox_coreに改名しそこへ移動
1 2 3 4 |
unzip voicevox_core-linux-arm64-cpu-0.15.3.zip mv voicevox_core-linux-arm64-cpu-0.15.3 0153_core cd ./0153_core/ |
辞書ファイルをダウンロードして解凍しておきます。
1 2 3 |
wget https://jaist.dl.sourceforge.net/project/open-jtalk/Dictionary/open_jtalk_dic-1.11/open_jtalk_dic_utf_8-1.11.tar.gz tar -zxvf open_jtalk_dic_utf_8-1.11.tar.gz |
実行ファイルのサンプルがあります、ダウンロードしておきます。
1 |
wget https://raw.githubusercontent.com/VOICEVOX/voicevox_core/406f6c41408836840b9a38489d0f670fb960f412/example/python/run.py |
ONNXのランタイムをダウンロード・解凍後、共有ファイルを移動させておきます。
1 2 3 4 5 |
wget https://github.com/VOICEVOX/onnxruntime-builder/releases/download/1.13.1/onnxruntime-linux-arm64-cpu-v1.13.1.tgz tar -zxvf onnxruntime-linux-arm64-cpu-v1.13.1.tgz mv ./onnxruntime-linux-arm64-cpu-v1.13.1/lib/libonnxruntime.so.1.13.1 ./ |
voicevox_coreライブラリをインストールしておきます。
1 2 3 4 5 |
wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.5/voicevox_core-0.14.5+cpu-cp38-abi3-linux_aarch64.whl pip install ./voicevox_core-*-linux_aarch64.whl pip install subprocess.run |
以下を実行してwavファイルが作成され、音声が再生されれば成功です。
>python3 run.py
>aplay ./output.wav
run.pyを少しいじって、ワンラインで実行できるようにします。
>sudo nano run.py
以下を追加
1 |
import subprocess,sys |
main()関数の最後部に以下を追加
1 2 3 4 |
cp = subprocess.run(['aplay', 'output.wav']) if cp.returncode != 0: print('failed.', file=sys.stderr) sys.exit(1) |
実行してみます。
ラズパイ5なら少なくとも5秒程度のタイムラグがあります。また長文になるほど、時間はかかります。
1 |
python3 run.py --text "こんちはー" |
リアルタイムというわけにはいきませんが、エンジン版をWindows PCにインストールして使う場合NVIDIA のRTX 4090位を積んだマシンにしたり、次期ラズパイ6あたりなら、リアルタイムが可能になると思います。
Appendix
音声認識は以下を参照
Leave a Reply