AITuberのためのVOICEVOX環境構築(WSL2編)
はじめに
最近発売された「AITuberを作ってみたら生成AIプログラミングがよくわかった件」という本を買いました!
今回はAITuberの声となるVOICEVOXをWSL2から使えるように環境構築していきます。WSL2環境からWindows上のVOICEBOXへのアクセス方法が書かれていなかったので自分で調べて設定してみました。AITuberの仮想環境づくりに少しでもお役に立てれば幸いです!思わぬところでつまづいてしまったので、みなさんにもシェアしていきたいと思います。
今回の開発環境
AITuberのための環境構築シリーズ(WSL2編)
AITuberの声「VOICEVOX」とは
VOICEVOXのWEBサイトの説明では「無料で使える中品質なテキスト読み上げソフトウェア」とあります。とはいえずいぶん高品質な読み上げソフトウェアだと思います!
AITuberの声の部分としてこちらのVOICEVOXがプログラム上から使えるように環境づくりをしていきます。
以下の「ダウンロード」を押してWindowsにアプリケーションをダウンロードしておきます。
VOICEVOXをダウンロードしてインストールしてある状態から以下の設定を始めていきましょう。
Windows上のVOICEVOXにWSL2からアクセスする
WSL2でAITuberのプログラムを作っていこうとしているので、VOICEVOXにもこのWSL2からアクセスしていきたいです。
今回はWSL2からWindows上にダウンロードしたVOICEVOXのサーバーにアクセスしようと思います。
詰まったところ
前提としてWindows上にダウンロードしたVOICEVOXアプリケーションにアクセスするには同じWindows環境からじゃないとアクセスできません。
そして、WSL2はWindows上から操作できますが、Windows上に作ったLinuxシステムという仮想環境にあるので同じWindows環境とは言えません。この前提にたどり着くまでに時間がかかっていまいましたので、みなさんもお気をつけください。
*技術的にできないことはないかもしれませんが、今回はできない前提で進めていきます
解決策
結論、Windows環境に外部からアクセスするための「ngrok」というツールを導入します
これによってWindows上にあるVOICEVOXのサーバーにWSL2などのWindowsの外部からアクセスするためのエンドポイントとなるURLを簡単に作ることができます。
ngrokの導入
ngrokの導入には以下のURLにアクセスします。
まずは右上のSingUPからngrokのアカウントを新規作成しておきましょう。
今回はWindows版のZipファイルをダウンロードしていきます。
ZIPファイルが解凍できたら、PowerShellからアカウント作成したngrokのトークンを設定していきます。
解凍したファイルの中からngrok.exeファイルを開くと、Powershellが起動します。
NAME:
ngrok - tunnel local ports to public URLs and inspect traffic
USAGE:
ngrok [command] [flags]
DESCRIPTION:
ngrok exposes local networked services behinds NATs and firewalls to the
public internet over a secure tunnel. Share local websites, build/test
webhook consumers and self-host personal services.
Detailed help for each command is available with 'ngrok help <command>'.
Open http://localhost:4040 for ngrok's web interface to inspect traffic.
Author:
ngrok - <support@ngrok.com>
TERMS OF SERVICE: https://ngrok.com/tos
EXAMPLES:
ngrok http 80 # secure public URL for port 80 web server
ngrok http --domain baz.ngrok.dev 8080 # port 8080 available at baz.ngrok.dev
ngrok http foo.dev:80 # tunnel to host:port instead of localhost
ngrok http https://localhost # expose a local https server
ngrok tcp 22 # tunnel arbitrary TCP traffic to port 22
ngrok tls --domain=foo.com 443 # TLS traffic for foo.com to port 443
ngrok start foo bar baz # start tunnels from the configuration file
COMMANDS:
api use ngrok agent as an api client
completion generates shell completion code for bash or zsh
config update or migrate ngrok's configuration file
credits prints author and licensing information
diagnose diagnose connection issues
help Help about any command
http start an HTTP tunnel
service run and control an ngrok service on a target operating system
start start tunnels by name from the configuration file
tcp start a TCP tunnel
tls start a TLS tunnel
tunnel start a tunnel for use with a tunnel-group backend
update update ngrok to the latest version
version print the version string
OPTIONS:
--config strings path to config files; they are merged if multiple
-h, --help help for ngrok
--metadata string opaque user-defined metadata for the tunnel session
-v, --version version for ngrok
ngrok is a command line application, try typing 'ngrok.exe http 80'
at this terminal prompt to expose port 80.
C:\Users\USER\Downloads\ngrok-v3-stable-windows-amd64>
この画面になったら以下のコマンドでトークンを設定します。
ngrok config add-authtoken <token>
そして、VOICEVOXのサーバーが立ち上がっているport50021番を指定します。
ngrok http 50021
実行結果は以下のようになりました。
Session Status online
Account アカウント名 (Plan: Free)
Version 3.4.0
Region Japan (jp)
Latency 11ms
Web Interface http://127.0.0.1:4040
Forwarding https://<作成されたアドレス>.ngrok-free.app -> http://localhost:50021
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
これでngrok側の設定は完了です!
WSL2からVOICEVOXにアクセスする
ngrokの設定ができたので、WindowsでVOICEVOXを起動させておきます。
にアクセスできてドキュメントが表示されれば起動完了です。ではWSL2で以下のpythonファイルを作成して実行してみましょう。
urlの部分は先程の出力結果にある「https://<作成されたアドレス>.ngrok-free.app」の部分と置き換えます。
import requests
import json
url = 'https://<作成されたアドレス>.ngrok-free.app/'
text ='こんにちは'
speaker_id = 1
item_data = {
"text": text,
"speaker": speaker_id
}
res = requests.post(url+'audio_query',params=item_data)
res_json = res.json()
print(res_json)
このファイルを実行していきましょう。
(.venv) yasuna:~/projects/aituber $ python3 test.py
出力結果が出ました!これでWSL2からVOICEVOXにアクセスできるようになりました。
(.venv) yasuna:~/projects/aituber $ python3 test.py
{'accent_phrases': [{'moras': [{'text': 'コ', 'consonant': 'k', 'consonant_length': 0.10002632439136505, 'vowel': 'o', 'vowel_length': 0.15740256011486053, 'pitch': 5.714912414550781}, {'text': 'ン', 'consonant': None, 'consonant_length': None, 'vowel': 'N', 'vowel_length': 0.08265873789787292, 'pitch': 5.8854217529296875}, {'text': 'ニ', 'consonant': 'n', 'consonant_length': 0.03657080978155136, 'vowel': 'i', 'vowel_length': 0.117112897336483, 'pitch': 5.998487949371338}, {'text': 'チ', 'consonant': 'ch', 'consonant_length': 0.08808862417936325, 'vowel': 'i', 'vowel_length': 0.09015568345785141, 'pitch': 5.977110385894775}, {'text': 'ワ', 'consonant': 'w', 'consonant_length': 0.08290570229291916, 'vowel': 'a', 'vowel_length': 0.2083434909582138, 'pitch': 6.048254013061523}], 'accent': 5, 'pause_mora': None, 'is_interrogative': False}], 'speedScale': 1.0, 'pitchScale': 0.0, 'intonationScale': 1.0, 'volumeScale': 1.0, 'prePhonemeLength': 0.1, 'postPhonemeLength': 0.1, 'outputSamplingRate': 24000, 'outputStereo': False, 'kana': "コンニチワ'"}
まとめ
WSL2からWindows上にあるVOICEVOXにアクセスするにはngrokというツールを使うのが簡単で便利でした!
AITuberを作ろうとすると環境構築まわりで色々大変ですが、ネットワークの勉強になりますね。
あと少しで環境構築が終わりそうなので、もう少し頑張りまーす!
ここまで読んでいただいてありがとうございました!
参考
設定できずに困りはてていましたが、この記事に救われました!神!感謝!
Discussion