VOICEVOX COREをRaspberryPiにインストールしてCLIで便利に音声合成を行おう

前回のエントリではVOICEVOXをPCにインストールされたUbuntuへインストールしたという内容でしたが、今回はRaspberryPiVOICEVOXをインストールするという内容です。ただ、RaspberryPiの運用ではモニタのないヘッドレス環境での使用の可能性もあるため、この設定ではVOICEVOXを構成する要素の1つであるVOICEVOX COREを導入し、CLIでの運用を行ってみたいと思います。

ネットで検索してもうまくいかないという話はあるのですが、成功例はなかなかないようです。自分も数日悩みましたがようやく解決できました。

【参考】

uepon.hatenadiary.com

VOICEVOXの構成要素

VOICEVOXは3つのモジュール「エディター」、「エンジン」、「コア」で構成されています。VOICEVOXソフトウェアはこの3つから構成され、エディターエンジンの機能を参照し、エンジンコアの機能を参照しています。

参考github.com

エディター

GUI を表示するためのモジュールで、アプリケーションの形態をとります。リポジトリは以下となります。

github.com

エンジン

テキスト音声合成 API を公開するためのモジュールで、Web サーバーの形態をとります。リポジトリは以下となります。

github.com

コア

音声合成に必要な計算を実行するためのモジュールで、動的ライブラリの形態をとります。コマンドラインでの実行も可能)リポジトリは以下となります。

github.com

また、これらのモジュールは単独で使用できるようになっています。例えば、コアだけでコマンドラインからの使用、エンジンだけでWebAPIでの使用ができ、Web経由でリクエストを送信すれば音声合成された結果を得ることができます。このような形で導入が一部分であっても、サービスの使用ができるようになっています。

今回はコアRaspberryPiに導入し、コマンドライン上から実行を行えるようにしてみたいと思います。

インストールの環境について

インストールはRaspberryPi OSの最新バージョンであるDebian 12 Bookwarmベースで行っていきますが、検証として旧バージョンのDebian 11 bullseyeでも起動を確認しています。

注意点は、最近のDebianベースのOSではPEP668が適応されるため、デフォルトではPythonの仮想環境が必須となっています。以下での仮想環境も含めた形でのインストール作業を行っています。

VOICEVOX COREのインストール

今回の設定ではVOICEVOX CORE0.14.0を使用していきます。最新のものは作業中ということもあるのでバージョンを少し古めにするのがよいのかなと思います。GitHubリポジトリでもこのことが書かれています。

【今回使用するバージョン】

github.com

作業の流れは以下の様になります。

  1. Pythonの仮想環境の設定
  2. VOICEVOX COREのインストール
  3. ONNX Runtimeのインストール
  4. open_jtalkの辞書のインストール
  5. Pythonのからライブラリの呼び出しと音声合成ファイルの作成
  6. 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がないというエラーが発生します。このあたりで挫折する方が多そうですが、以下が原因のようです。

https://404background.com/program/voicevox-core/#voicevox_coreblocking%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

現在のPythonバインディングにあるvoicevox_coreには、blocking.pyが含まれています。

Python側のバインディングに問題がありそうです。そこで今回はPythonのプログラムを作成し改めて呼び出すようにしてみます。以下のようにエディタを開いて、ファイルを作成します。

(voicevox) $ nano voicevox.py

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)が使用できるようになりました。ネットで検索するとチャレンジをしている方も多そうですが、成功例をあまり見ることができなかったので、参考にしていただければと思います。

工程のすべて(コピペして使用してください。冒頭の$は除いています)

RaspberryPi OSにvoicevox_coreをインストール・テストする手順


【参考】 404background.com

qiita.com


/* -----codeの行番号----- */