Raspberry Pi

Raspberry PiでVOICEVOXに可愛くしゃべってもらおう

2022年4月10日

Raspberry PiでVOICEVOXに可愛くしゃべってもらおう

こんにちは。ポン吉です。

我が家のラズパイは6年前からOpen JTalkのmeiさんにしゃべって頂き活用しております。近年はディープラーニングによる滑らかな音声合成サービスも沢山登場しています。

Linuxでイケてる音声合成(無料)はないかなぁ~ と探してみると、あるにはあるのですが・・・

ポン吉

かわいい声じゃないんですよね~


ほぼ諦めていたところ革命的なものが登場しました! その名も「VOICEVOX!」 公式サイトでは「無料で使える中品質なテキスト読み上げソフトウェア」と説明がありますがかなり高品質です。

つむぎ

この記事を読めば、こんな感じでラズベリーパイに可愛く喋ってもらえます。

VOICEVOX 春日部つむぎ(ノーマル)

しかも無料で使えるだと・・・控えめに言って開発者 ヒホ(ヒロシバ)さんは神です!
皆さん感謝しながら使いましょう。公式サイトへのリンクは以下。

 

私が導入するにあたってうまく動かず悩んだポイントがあったので、誰でも動かせる手順をまとめて公開したいと思います。

今回のテーマはこちら!

  • VOICEVOX CORE をRaspberry Piで使えるようにしよう
  • 非力なRaspberry Piで実用に耐えうるか検証しよう

それではやってみましょう~♪

必要なもの

VOICEVOXを動かすにはかなりCPUパワーを必要とするためラズパイ4を推奨します。

ラズパイ自体も品薄で購入が難しい状況が続いています。ラズパイの在庫と価格をリアルタイム確認できるページを作りました。ラズパイを購入しようとしている方は是非参考にしてみてください。

Raspberry Pi OS への VOICEVOX CORE インストール

keyboard

以降の説明にてコマンド表示右上に「コピーボタン」を付けました。コマンドをコピーしてコンソール画面に貼り付けEnterキーを押す!を繰り返せば、だれでも動かせるはずです。

詳細を知りたい方は、以下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」 ごとにコマンドが異なります。

32bit 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 .

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-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.so

Your choice: 3
Successfully configured!

32bit OSの場合は libcore_cpu_armhf.so の番号を入力してEnterキーを押す
64bit OSの場合は libcore_cpu_arm64.so の番号を入力してEnterキーを押す
(番号はセットアップするOSごとに何故か並びが変わるので要確認)

 

エラーになる場合の対処

ラズパイの寿命を伸ばすために/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にはたくさんのキャラクタ音声が扱えます。下記表を参照して選びましょう

voicevox 四国めたん
四国めたん
話者話者ID
四国めたん:ノーマル2
四国めたん:あまあま0
四国めたん:ツンツン6
四国めたん:セクシー4
voicevox ずんだもん
ずんだもん
話者話者ID
ずんだもん:ノーマル3
ずんだもん:あまあま1
ずんだもん:ツンツン7
ずんだもん:セクシー5
voicevox 春日部つむぎ
春日部つむぎ
話者話者ID
春日部つむぎ:ノーマル8
voicevox 雨晴はう
雨晴はう
話者話者ID
雨晴はう:ノーマル10
波音リツ
波音リツ
話者話者ID
波音リツ:ノーマル9
voicevox 玄野武宏
玄野武宏
話者話者ID
玄野武宏:ノーマル11
voicevox 白上虎太郎
白上虎太郎
話者話者ID
白上虎太郎:ノーマル12
voicevox 青山龍星
青山龍星
話者話者ID
青山龍星:ノーマル13
voicevox 冥鳴ひまり
冥鳴ひまり
話者話者ID
冥鳴ひまり:ノーマル14
voicevox 九州そら
九州そら
話者話者ID
九州そら:ノーマル16
九州そら:あまあま15
九州そら:ツンツン18
九州そら:セクシー17
九州そら:ささやき19

  

VOICEVOX COREにより作成した音声を評価

stay home

読み方やアクセント辞書は未設定(素の状態)での音声合成結果です。かなりリアルな発音になっていると思います。しかも可愛い声がたくさん用意されています。例としてサンプルを置きますのでぜひ聞いてみてください。

VOICEVOXの音声(春日部つむぎ、ずんだもん、四国めたん)

つむぎ

このホームページはライフハックに関する情報を提供するブログです

VOICEVOX 春日部つむぎ(ノーマル)
ずんだもん

このホームページはライフハックに関する情報を提供するブログです

VOICEVOX ずんだもん(ノーマル)
めたん

このホームページはライフハックに関する情報を提供するブログです

VOICEVOX 四国めたん(ノーマル)

 

Open JTalk (MMDAgent Model) "Mei"さんの音声

我が家で6年ほど秘書として喋っていただいているOpen JTalkのMeiさんによる音声も比較のために置いておきます。Raspberry Piでリアルタイム用途で音声合成して喋らせるならOpen JTalkのMeiさんで決まりだと思っています。

mei

このホームページはライフハックに関する情報を提供するブログです

Open JTalk(MMDAgent Model )メイ

 

まとめ

  • VOICEVOXの音声は自然でとてもかわいい!
  • Rapsberry Piではリアルタイム処理は正直キツイ(ラズパイ4 64bitでもキツイ)
  • 天気予報、家族への音声インフォーメーション等で非同期で事前処理させる用途がベスト
ポン吉

結論:可愛いは正義!

どうしてもリアルタイム処理させたかったので、GPU搭載Windows/Mac上にインストールしたVOICEVOXをPython/Curlで呼び出す方向についても記事にしました。下記の記事も参考にしてみてください

 

おまけ

九州そらさんのささやきボイスは… ASMRとかバイノーラル録音?ってくらいリアルです。音声合成に耳元で囁いていただける時代がくるとは・・・日本の技術力恐るべし。

そら

このホームページはライフハックに関する情報を提供するブログです

VOICEVOX 九州そら(ささやき)

 

処理が遅い問題はどう解決?

我が家ではIntel Neural Compute Stick 2 (NCS2)をラズパイUSBに接続しAI処理をさせています。NCS2にも対応頂けるとエッジコンピューティングとして面白い活用ができるかも。…と期待しつつも、別GPU付きマシンにVOICEVOXを入れ、ラズパイからAPIでコールするようにしました(逃)。やっぱり、リアルタイムにいろいろなことを喋らせたい!(そして可愛く)

-Raspberry Pi