こんにちは。ポン吉です。
我が家のラズパイは6年前からOpen JTalkのmeiさんにしゃべって頂き活用しております。近年はディープラーニングによる滑らかな音声合成サービスも沢山登場しています。
Linuxでイケてる音声合成(無料)はないかなぁ~ と探してみると、あるにはあるのですが・・・
かわいい声じゃないんですよね~
ほぼ諦めていたところ革命的なものが登場しました! その名も「VOICEVOX!」 公式サイトでは「無料で使える中品質なテキスト読み上げソフトウェア」と説明がありますがかなり高品質です。
この記事を読めば、こんな感じでラズベリーパイに可愛く喋ってもらえます。
しかも無料で使えるだと・・・控えめに言って開発者 ヒホ(ヒロシバ)さんは神です!
皆さん感謝しながら使いましょう。公式サイトへのリンクは以下。
私が導入するにあたってうまく動かず悩んだポイントがあったので、誰でも動かせる手順をまとめて公開したいと思います。
今回のテーマはこちら!
- VOICEVOX CORE をRaspberry Piで使えるようにしよう
- 非力なRaspberry Piで実用に耐えうるか検証しよう
それではやってみましょう~♪
必要なもの
VOICEVOXを動かすにはかなりCPUパワーを必要とするためラズパイ4を推奨します。
ラズパイ自体も品薄で購入が難しい状況が続いています。ラズパイの在庫と価格をリアルタイム確認できるページを作りました。ラズパイを購入しようとしている方は是非参考にしてみてください。
Raspberry Pi OS への VOICEVOX CORE インストール
以降の説明にてコマンド表示右上に「コピーボタン」を付けました。コマンドをコピーしてコンソール画面に貼り付けEnterキーを押す!を繰り返せば、だれでも動かせるはずです。
注意
最新Raspberry Pi OS bullseye での構築例を紹介します。以前のRaspberry Pi OS buster等では python ⇒ python3 pip ⇒ pip3 と読み替えて実行してください。
ラズパイ初期セットアップの詳細は、上記記事を参照してください。
詳細を知りたい方は、以下gitサイトの説明も参照。
必要パッケージをインストール
sudo apt update
sudo apt install -y python3-pip
sudo apt install -y git
sudo apt install -y cmake
sudo apt install -y libgomp1
sudo apt install -y libsndfile1
sudo apt install -y libatlas-base-dev
Rasbperry Pi OSの初期インストール状態から、上記コマンド実行で必要パッケージはすべてインストールできると思います。
VOICEVOX CORE リリース版ファイルをダウンロード
cd ~/
wget https://github.com/VOICEVOX/voicevox_core/archive/refs/tags/0.11.4.zip
unzip 0.11.4.zip
cd voicevox_core-0.11.4/
mkdir release
cd release
wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.11.4/core.zip
unzip -j core.zip
上記の例では$HOMEディレクトリ配下にVOICEVOX用のディレクトリを展開しています。インストール先ディレクトリは好きな場所に変更していただいても問題ありません。
Raspberry Pi用の ONNX runtime を指定し VOICEVOX CORE をインストール
注意
Raspberry Pi OSの種類で「32bit OS」 と 「64bit OS」 ごとにコマンドが異なります。
cd ~/voicevox_core-0.11.4/
python configure.py --ort_download_link https://github.com/VOICEVOX/onnxruntime-builder/releases/download/1.10.0.1/onnxruntime-linux-armhf-cpu-v1.10.0.tgz
pip install -r requirements.txt
pip install .
cd ~/voicevox_core-0.11.4/
python configure.py --ort_download_link https://github.com/VOICEVOX/onnxruntime-builder/releases/download/1.10.0.1/onnxruntime-linux-arm64-cpu-v1.10.0.tgz
pip install -r requirements.txt
pip install .
ONNX(Open Neural Network Exchange)はニューラルネットワークなどの学習済みモデルの実行エンジンです。Raspberry Pi用にビルドされたものを指定し組み込みます。
インストール時に以下のように選択を求められますので環境に合わせ数字を入力しEnterキーを入力。ここでは32bit OSの例としてlibcore_cpu_armhf.soの番号である 3 を選択しています。
Please enter number to select which library to use.
0: /home/yoshiyuki/voicevox_core-0.11.4/release/libcore_cpu_arm64.so
1: /home/yoshiyuki/voicevox_core-0.11.4/release/libcore_gpu_x64_nvidia.so
2: /home/yoshiyuki/voicevox_core-0.11.4/release/libcore_cpu_x64.so
3: /home/yoshiyuki/voicevox_core-0.11.4/release/libcore_cpu_armhf.soYour choice: 3
Successfully configured!
エラーになる場合の対処
ラズパイの寿命を伸ばすために/tmpをRAMDISK化している場合、/tmp容量不足でエラーになる場合があります。VOICEVOXのインストールに限った話ではありませんが No space left on device とエラーが出る場合は、環境変数を一時作業場所(Disk)に変更して対処しましょう。
<HOMEディレクトリに一時的なディレクトリtmpを作り作業場所に設定>
mkdir ~/tmp
export TMPDIR=~/tmp
上記コマンド実行後に再度インストールすれば成功します。~/tmpディレクトリは最後までセットアップが無事に終わった後で削除しておきましょう。
VOICEVOX COREのサンプルプログラムを実行
それでは実際にサンプルプログラムを実行して音声合成をしてみましょう。
VOICEVOX COREの実行方法
cd ~/voicevox_core-0.11.4/example/python/
pip install -r requirements.txt
サンプルプログラム実行に必要なpyopenjtalkのビルドで10分程度の時間が掛かります。気長に待ちましょう。
cd ~/voicevox_core-0.11.4/example/python/
python run.py --text "おはようございます" --speaker_id 2 --root_dir_path="../../release"
python run.pyで音声合成処理を実行します。非力なRaspberry Piでは1~2分程度かかると思います。カレントディレクトリに「おはようございます-2.wav」という音声ファイルが作成されていれば音声合成は成功です!
音声ファイル名について
VOICEVOX COREで出力される音声ファイル名は、「text」で指定したテキスト +「speaker_id」で指定されたid の名称で作成されます。
「誰に何を喋らせたのか」はファイル名だけでわかるので便利ですね
それでは、ラズパイ標準で入っているaplayコマンドを使って「ラズパイに可愛く喋ってもらいましょう!」ラズパイのイヤホンジャックにスピーカーをつないで以下コマンドを実行してみてください。
aplay おはようございます-2.wav
ラズパイから可愛くリアルな音声が再生できたでしょうか?このサンプルプログラム「run.py」のオプション引数の使い方は以下を参照してみてください。
python run.py --text "おはようございます" --speaker_id 2 --root_dir_path="../../release"
# 引数の紹介
# --text 読み上げるテキスト
# --speaker_id 話者ID
# --root_dir_path [metas.json]ファイルが置いてあるパスを指定
# --f0_speaker_id 音高の話者ID(デフォルト値はspeaker_id)
# --f0_correct 音高の補正値(デフォルト値は0。+-0.3くらいで結果が大きく変わります)
--speaker_idで喋らせたいキャラクタの話者IDを指定します。例えば「四国めたんのツンツン声」でガッツリ責められたい時は以下のように使います。
python run.py --text "あたなは本当にクズでダメな人間ですね" --speaker_id 6 --root_dir_path="../../release"
VOICEVOX 話者ID一覧
VOICEVOXにはたくさんのキャラクタ音声が扱えます。下記表を参照して選びましょう
話者 | 話者ID |
四国めたん:ノーマル | 2 |
四国めたん:あまあま | 0 |
四国めたん:ツンツン | 6 |
四国めたん:セクシー | 4 |
話者 | 話者ID |
ずんだもん:ノーマル | 3 |
ずんだもん:あまあま | 1 |
ずんだもん:ツンツン | 7 |
ずんだもん:セクシー | 5 |
話者 | 話者ID |
春日部つむぎ:ノーマル | 8 |
話者 | 話者ID |
雨晴はう:ノーマル | 10 |
話者 | 話者ID |
波音リツ:ノーマル | 9 |
話者 | 話者ID |
玄野武宏:ノーマル | 11 |
話者 | 話者ID |
白上虎太郎:ノーマル | 12 |
話者 | 話者ID |
青山龍星:ノーマル | 13 |
話者 | 話者ID |
冥鳴ひまり:ノーマル | 14 |
話者 | 話者ID |
九州そら:ノーマル | 16 |
九州そら:あまあま | 15 |
九州そら:ツンツン | 18 |
九州そら:セクシー | 17 |
九州そら:ささやき | 19 |
VOICEVOX COREにより作成した音声を評価
読み方やアクセント辞書は未設定(素の状態)での音声合成結果です。かなりリアルな発音になっていると思います。しかも可愛い声がたくさん用意されています。例としてサンプルを置きますのでぜひ聞いてみてください。
VOICEVOXの音声(春日部つむぎ、ずんだもん、四国めたん)
このホームページはライフハックに関する情報を提供するブログです
このホームページはライフハックに関する情報を提供するブログです
このホームページはライフハックに関する情報を提供するブログです
Open JTalk (MMDAgent Model) "Mei"さんの音声
我が家で6年ほど秘書として喋っていただいているOpen JTalkのMeiさんによる音声も比較のために置いておきます。Raspberry Piでリアルタイム用途で音声合成して喋らせるならOpen JTalkのMeiさんで決まりだと思っています。
このホームページはライフハックに関する情報を提供するブログです
まとめ
- VOICEVOXの音声は自然でとてもかわいい!
- Rapsberry Piではリアルタイム処理は正直キツイ(ラズパイ4 64bitでもキツイ)
- 天気予報、家族への音声インフォーメーション等で非同期で事前処理させる用途がベスト!
結論:可愛いは正義!
どうしてもリアルタイム処理させたかったので、GPU搭載Windows/Mac上にインストールしたVOICEVOXをPython/Curlで呼び出す方向についても記事にしました。下記の記事も参考にしてみてください。
おまけ
九州そらさんのささやきボイスは… ASMRとかバイノーラル録音?ってくらいリアルです。音声合成に耳元で囁いていただける時代がくるとは・・・日本の技術力恐るべし。
このホームページはライフハックに関する情報を提供するブログです
処理が遅い問題はどう解決?
我が家ではIntel Neural Compute Stick 2 (NCS2)をラズパイUSBに接続しAI処理をさせています。NCS2にも対応頂けるとエッジコンピューティングとして面白い活用ができるかも。…と期待しつつも、別GPU付きマシンにVOICEVOXを入れ、ラズパイからAPIでコールするようにしました(逃)。やっぱり、リアルタイムにいろいろなことを喋らせたい!(そして可愛く)