はてなブログに書いていたRaspberryPiにVOICEVOXをインストールするという内容をQiitaに移植しました。
RaspberryPiの運用ではモニタのないヘッドレス環境での使用の可能性もあるため、この設定ではVOICEVOXを構成する要素の1つであるVOICEVOX COREを導入し、CLIでの運用を行ってみたいと思います。
ネットで検索してもうまくいかないという話はあるのですが、成功例はなかなかみつからないようです。自分も数日悩みましたがようやく解決できました。
【参考】
VOICEVOXの構成要素
VOICEVOXは3つのモジュール「エディター」、「エンジン」、「コア」で構成されています。VOICEVOXソフトウェアはこの3つから構成され、エディターはエンジンの機能を参照し、エンジンはコアの機能を参照しています。
【参考】
- エディター
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モデルを利用できる。
【参考】
以下のようにインストールを行います。アーキテクチャタイプは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のバインディングにあるvoicevox_coreには、blocking.pyが含まれています。
Python側のバインディングに問題がありそうです。そこで今回はPythonのプログラムを作成し改めて呼び出すようにしてみます。以下のようにエディタを開いて、ファイルを作成します。
(voicevox) $ nano voicevox.py
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)
これで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)が使用できるようになりました。ネットで検索するとチャレンジをしている方も多そうですが、成功例をあまり見ることができなかったので、参考にしていただければと思います。
工程のすべて(コピペして使用してください。冒頭の$は除いています)
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
nano voicevox.py
python ./voicevox.py ずんだもんなのだ
aplay ずんだもんなのだ.wav
deactivate
【参考】







