前回のエントリではVOICEVOX
をPCにインストールされたUbuntu
へインストールしたという内容でしたが、今回はRaspberryPi
にVOICEVOX
をインストールするという内容です。ただ、RaspberryPi
の運用ではモニタのないヘッドレス環境での使用の可能性もあるため、この設定ではVOICEVOX
を構成する要素の1つであるVOICEVOX CORE
を導入し、CLIでの運用を行ってみたいと思います。
ネットで検索してもうまくいかないという話はあるのですが、成功例はなかなかないようです。自分も数日悩みましたがようやく解決できました。
【参考】
VOICEVOXの構成要素
VOICEVOX
は3つのモジュール「エディター」、「エンジン」、「コア」で構成されています。VOICEVOXソフトウェア
はこの3つから構成され、エディターはエンジンの機能を参照し、エンジンはコアの機能を参照しています。
【参考】 github.com
⋆ エディター
GUI を表示するためのモジュールで、アプリケーションの形態をとります。リポジトリは以下となります。
⋆ エンジン
テキスト音声合成 API を公開するためのモジュールで、Web サーバーの形態をとります。リポジトリは以下となります。
⋆ コア
音声合成に必要な計算を実行するためのモジュールで、動的ライブラリの形態をとります。(コマンドラインでの実行も可能)リポジトリは以下となります。
また、これらのモジュールは単独で使用できるようになっています。例えば、コアだけでコマンドラインからの使用、エンジンだけでWebAPIでの使用ができ、Web経由でリクエストを送信すれば音声合成された結果を得ることができます。このような形で導入が一部分であっても、サービスの使用ができるようになっています。
今回はコアをRaspberryPi
に導入し、コマンドライン上から実行を行えるようにしてみたいと思います。
インストールの環境について
インストールはRaspberryPi OS
の最新バージョンであるDebian 12 Bookwarmベース
で行っていきますが、検証として旧バージョンのDebian 11 bullseye
でも起動を確認しています。
注意点は、最近のDebianベースのOSではPEP668
が適応されるため、デフォルトではPythonの仮想環境が必須となっています。以下での仮想環境も含めた形でのインストール作業を行っています。
VOICEVOX CORE
のインストール
今回の設定ではVOICEVOX CORE
の0.14.0を使用していきます。最新のものは作業中ということもあるのでバージョンを少し古めにするのがよいのかなと思います。GitHubのリポジトリでもこのことが書かれています。
【今回使用するバージョン】
作業の流れは以下の様になります。
- Pythonの仮想環境の設定
VOICEVOX CORE
のインストールONNX Runtime
のインストールopen_jtalk
の辞書のインストール- Pythonのからライブラリの呼び出しと音声合成ファイルの作成
- Python仮想環境の終了(蛇足)
1)Pythonの仮想環境の設定
$ mkdir voicevox$ cd voicevox/$ python -m venv voicevox$ source voicevox/bin/activate
2)VOICEVOX CORE
のインストール
voicevox_coreのwhlを取得しインストールします。アーキテクチャはGPUを使用せず、ARMのCPUで、OSは64bitになるのでcpu-cp38-abi3-linux_aarch64
のついたものを使用します
(voicevox) $ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.0/voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl(voicevox) $ pip install voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl
3)ONNX Runtime
のインストール
ONNX
(Open Neural Network Exchange)は、オープンソースで開発されている機械学習や人工知能のモデルを表現する為の代表的なフォーマットで、その実行環境がONNX Runtime
となります。
ONNX Runtimeは様々な環境におけるONNXモデルの推論・学習高速化を目的としたオープンソースプロジェクトである。フレームワーク・OS・ハードウェアを問わず単一のRuntime APIを介してONNXモデルを利用できる。
【参考】 ja.wikipedia.org
以下のようにインストールを行います。アーキテクチャタイプはOSがLinux、ARMのCPUで64bitとなるのでlinux-aarch64
を使用しています。ダウンロード展開後にSharedObjectライブラリとして登録を行います。
(voicevox) $ wget https://github.com/microsoft/onnxruntime/releases/download/v1.13.1/onnxruntime-linux-aarch64-1.13.1.tgz(voicevox) $ tar zxvf onnxruntime-linux-aarch64-1.13.1.tgz(voicevox) $ ln -s onnxruntime-linux-aarch64-1.13.1/lib/libonnxruntime.so.1.13.1
4)open_jtalk
の辞書のインストール
VOICEVOX CORE
は辞書を必要とするのでOpen Jtalk
の辞書ファイルを使用します。
(voicevox) $ wget https://jaist.dl.sourceforge.net/project/open-jtalk/Dictionary/open_jtalk_dic-1.11/open_jtalk_dic_utf_8-1.11.tar.gz(voicevox) $ tar xzvf open_jtalk_dic_utf_8-1.11.tar.gz
5)Pythonのからライブラリの呼び出しと音声合成ファイルの作成
あとはCLIから実行するためのPythonスクリプトが必要となるのですが、リポジトリからダウンロードを行い実行を行うとvoicevox_core.blocking
がないというエラーが発生します。このあたりで挫折する方が多そうですが、以下が原因のようです。
Python側のバインディングに問題がありそうです。そこで今回はPythonのプログラムを作成し改めて呼び出すようにしてみます。以下のようにエディタを開いて、ファイルを作成します。
(voicevox) $ nano voicevox.py
【 voicevox.py 】
from pathlib import Pathfrom voicevox_core import VoicevoxCore, METASimport sys, oscore = VoicevoxCore(open_jtalk_dict_dir=Path("./open_jtalk_dic_utf_8-1.11"))speaker_id = 1 # 1:ずんだもん,2:四国めたんtext = sys.argv[1]if not core.is_model_loaded(speaker_id):core.load_model(speaker_id)wave_bytes = core.tts(text, speaker_id)with open("./" + text + ".wav", "wb") as f:f.write(wave_bytes)
これでVOICEVOX CORE
の機能を呼び出す事ができるようになりました。途中にspeaker_id
という変数がありますが、ここに入る数値がボイスモデルとなります。
1:ずんだもん、2:四国めたんという設定のようです。ファイルを保存して実行することで音声合成が行われwavファイル
が完成します。
四国めたんの音声合成の例
(voicevox) $ python ./voicevox.py おはようございます(voicevox) $ aplay おはようございます.wav
ずんだもんの音声合成の例
(voicevox) $ python ./voicevox.py ずんだもんなのだ(voicevox) $ aplay ずんだもんなのだ.wav
これでVOICEVOXを使用した音声合成ができるようになりました。これくらいの短いフレーズでも30秒ほど処理時間がかかるのでリアルタイムな返答などには使用できないと思います。リアルタイム性を目指すなら大人しく他の音声合成処理を使用しましょう。
6)Python仮想環境の終了(蛇足)
(voicevox) $ deactivate
おわりに
これでRaspberryPi OS上でVOICEVOX CORE(VOICEVOX)が使用できるようになりました。ネットで検索するとチャレンジをしている方も多そうですが、成功例をあまり見ることができなかったので、参考にしていただければと思います。
工程のすべて(コピペして使用してください。冒頭の$は除いています)
from pathlib import Path | |
from voicevox_core import VoicevoxCore, METAS | |
import sys, os | |
core = VoicevoxCore(open_jtalk_dict_dir=Path("./open_jtalk_dic_utf_8-1.11")) | |
speaker_id = 1 # 1:ずんだもん,2:四国めたん | |
text = sys.argv[1] | |
if not core.is_model_loaded(speaker_id): | |
core.load_model(speaker_id) | |
wave_bytes = core.tts(text, speaker_id) | |
with open("./" + text + ".wav", "wb") as f: | |
f.write(wave_bytes) |
mkdir voicevox | |
cd voicevox/ | |
python -m venv voicevox | |
source voicevox/bin/activate | |
wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.0/voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl | |
pip install voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl | |
wget https://github.com/microsoft/onnxruntime/releases/download/v1.13.1/onnxruntime-linux-aarch64-1.13.1.tgz | |
tar zxvf onnxruntime-linux-aarch64-1.13.1.tgz | |
ln -s onnxruntime-linux-aarch64-1.13.1/lib/libonnxruntime.so.1.13.1 | |
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 xzvf open_jtalk_dic_utf_8-1.11.tar.gz |
python ./voicevox.py ずんだもんなのだ | |
aplay ずんだもんなのだ.wav | |
deactivate |
RaspberryPi OSにvoicevox_coreをインストール・テストする手順
【参考】 404background.com