RaspberryPiでmycoeiroink動かしてみた
はじめに
この記事は公開されているcoeiroinkを利用してRaspberryPiで使用しましょうというものです。 とりあえずは動くものの残念ながらリアルタイム性では実用的ではないのは最初に言っておきます。
使用したソースはcommitが去年のものなので最新ではないでしょう。 ほんとにとりあえず動くのを確かめたかっただけなのでそこのところ勘案していただければと思います。 また、pythonでの開発とか全然わかんないのでもっとスマートな方法あるぜという場合もあるかとは思います。
動作環境
- ハードはRaspberryPi4|5 8GB
- OSはRasbianOSのbookworm
- mycoeiroinkで使用するモデルは自作のを使用。
事前準備
openjtalk用の辞書ファイルの準備。
cd ~ wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.11.tar.gz tar xvzf open_jtalk_dic_utf_8-1.11.tar.gz
mkdir speaker_info
scpなどでmycoeiroink用のデータをコピーしておく
環境準備
Pyenvのインストール
cd ~ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
環境変数を設定
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
設定の反映とバージョンの確認インストールできるものの確認
source .bashrc pyenv --version pyenv install -list
pythonは3.8.19の環境が使用するmycoeには望ましいので、3.8.19にする
pythonのインストールに必要なライブラリのインストール
sudo apt-get install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
Pythonをインストール
pyenv install 3.8.19
coeiroink等のインストール作業
coeiroink_core関連
cd ~ git clone https://github.com/shirowanisan/coeiroink_core
voicevox engine関連
cd ~ git clone https://github.com/shirowanisan/voicevox_engine cd voicevox_engine git checkout c-1.7.3+v-0.14.5 pyenv local 3.8.19 python3 -m venv mycoe source ./mycoe/bin/activate (mycoe) takeshich@pi5:~/voicevox_engine $ python -V Python 3.8.19
requirements.txtの編集。pyopenjtalk がビルドでコケるのでvoicevoxでの最新版のリビジョンに変更しておく。
vi requirements.txt #pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@f4ade29ef9a4f43d8605103cb5bacc29e0b2ccae pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@b35fc89fe42948a28e33aed886ea145a51113f88
vi pyproject.toml
pyopenjtalk = {git = "https://github.com/VOICEVOX/pyopenjtalk", rev = "f4ade29ef9a4f43d8605103cb5bacc29e0b2ccae"}
pyopenjtalk = {git = "https://github.com/VOICEVOX/pyopenjtalk", rev = "b35fc89fe42948a28e33aed886ea145a51113f88"}
pip install git+https://github.com/shirowanisan/espnet@espnet-0.10.3 --no-deps pip install -r requirements.txt --no-deps pip install . pip install --upgrade pip setuptools wheel pip install -r requirements.txt
pip install git+https://github.com/shirowanisan/coeiroink_core --no-deps
修正しておかないと実行時にエラーが出るので修正しておく。 コメントアウトとバージョンの変更。ここらへんもっとうまくできると思うのだけどとりあえず動かすのが目的なのでやっつけ的解決方法です。
vi ../coeiroink_core/requirements.txt #espnet-0.10.3 #pyopenjtalk llvmlite==0.39.0 numba==0.56.4 numpy==1.23.5 scipy==1.9.3
モデルおよび辞書のコピーとmycoeiroinkの起動
pip install -r ../coeiroink_core/requirements.txt --no-deps pip install . cp -r ../speaker_info ./ cp -r ../open_jtalk_dic_utf_8-1.11 mycoe/lib/python3.8/site-packages/pyopenjtalk/open_jtalk_dic_utf_8-1.11 python run.py
確認作業
echo -n "こんにちは、たけしちです。音声合成の世界ですよ。" > text.txt
curl -s \
-X POST \
"localhost:50031/audio_query?speaker=313943412"\
--get --data-urlencode text@text.txt \
> query.json
time curl -s \
-H "Content-Type: application/json" \
-X POST \
-d @query.json \
"localhost:50031/synthesis?speaker=313943412" \
> audio.wav
313943412はモデルのstyleIdです。
cpu_num_threadsは未指定の場合のtimeの結果は
pi4で
real 1m0.750s user 0m0.017s sys 0m0.034s
pi5で
real 0m14.372s user 0m0.005s sys 0m0.009s
cpu_num_threads=4場合のtimeの結果は
Pi4で
real 0m40.983s user 0m0.039s sys 0m0.034s
Pi5で
real 0m10.596s user 0m0.010s sys 0m0.005s
Pi5はPi4よりは4倍程度早いようです。
まとめ
とりあえず動かしてみたいという興味でやってみました。
速度的にはPi4はまったく使い物にならないように思えます。 天気予報の本文で短そうなのを非リアルタイムな例えばバッチとかで動かしておいてファイルにしたのを時間になったら再生するというのには使えそうです。
Pi5もPi4よりは4倍程度早いもののやはり遅いです。やはり非リアルタイムなものでの使用となるでしょう。 そもそもリアルタイム性を求められるものはPCでGPUの乗ったもので作業すればいいわけで、非リアルタイムなものをRaspberryPiにやらせればいいのだなとは思います。
それとVoiceVoxがあるのになぜcoeiroinkかというと自作のモデルがあるからで家族にネタとして使いたいというのもありました。 実際、聞かせたところ、家族からの感想はキモチワルイだったけど。
誰得な感じだけど、誰かの参考になれば幸いです。