OpenAIリリースのWhisperで文字起こし後にテキスト読み上げした話
皆さんこんにちは、クルトンです。 今回は耳で内容を把握できると便利だなと思い、Whisperで文字起こししたtxtファイルをVOICEVOXさん(テキスト読み上げソフト)のAPIを利用して、音声をつけてみました。
なお、今回の実行は全てCPUで実行しています。(GPUで実行する場合でも参考にはなります。)
Whisperを使った文字起こしについて気になる方はこちらの記事を参考にしてみてください。
動作環境
% sw_vers ProductName: macOS ProductVersion: 12.6 BuildVersion: 21G115 % docker --version Docker version 20.10.14, build a224086 % docker-compose --version docker-compose version 1.29.2, build 5becea4c
環境構築にはDockerとDocker Composeが必要となっています。ご自身の環境で、docker --version
とdocker-compose --version
の2つのコマンドが打てる事をご確認ください。
Docker Composeを入れる場合はこちらが参考になります。
また、Docker DesktopをインストールするとDocker Composeが一緒に入ってきますのでそちらで打てるように整えても大丈夫です。(筆者はこちらをインストールしてDocker Composeを打てる状態になっています。)
Docker Compose実行前に
コマンドを実行しても問題無いディレクトリ配下に以下のdocker-compose.ymlファイルを配置してください。
version: "2" services: voicevox_engine: image: voicevox/voicevox_engine:cpu-ubuntu20.04-latest # image: voicevox/voicevox_engine:nvidia-ubuntu20.04-latest ports: - "50021:50021" tty: true whisper: build: . image: whisper tty: true
voicevox_engine
今回、テキスト読み上げにあたってVOICEVOXさんのDocker Imageを使用しています。今回はCPUで実行するため、
image: voicevox/voicevox_engine:cpu-ubuntu20.04-latest
を使用していますが、GPUで実行したい場合は、image: voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
のコメントアウトを外し、その後1つ上の行をコメントアウトしてください。(実行時のimageを一つになるように調整してください。)
whisper
whisperについては、以下の記事で使用しているDockerファイルを、docker-compose.ymlファイルと同じファイルパス内に配置してください。 (自分でコンテナ作成する場合は、buildタグが必要となりますが、これはDockerファイルのあるパスを明記しています。)
whisperのコンテナを作った事がない場合はdocker-compose build
をしてdocker-compose images
を実行し、whisperという名前のimageが存在する事を確認してから次に進んでください。
テキストに音声をつける
コンテナ起動
まずdocker-compose up -d
でコンテナを起動します。
こちらのdオプションはバックグランドでコンテナ実行をするためのもので、こちらをつけないと同じCLIでそのままコマンドが打てないです。
次にdocker-compose ps
を打ちます。Stateの欄が2つともUpとなっていれば成功です。
テキスト読み上げ対象のtxtファイルを作成
Whisperで文字起こしをします。既に文字を起こしたものがある、またはテキスト読み上げのみ試したい場合などtxtファイルが準備出来ている場合はこちらは飛ばして大丈夫です。
docker-compose.ymlファイルと同じディレクトリパスに、文字起こししたい音声ファイルを配置します。次にdocker-compose exec whisper /bin/bash
コマンドを実行します。
これで対象のファイルをwhisperコマンドを叩くことで文字起こし可能になります。
文字起こしにはwhisper
コマンドを叩いてください。(喋っている言語が分かっている場合はlanguageオプションを使うと文字起こしの時間が短縮されます。)
こちらがコマンド例です。
whisper <音声ファイルの名前.拡張子> --language ja
文字起こし完了後に、exit
というコマンドを叩いてください。
テキスト読み上げまでのステップ
ここからtxtファイルを使ってテキスト読み上げに入ります。(ファイル名は英文字のみが良いと思われます。)
手順は簡単で2ステップでできます。
- APIに渡す用のquery.jsonを作成
- query.jsonから音声ファイル作成
なお今回使用したテキストファイルの内容はこちらになります。
こんにちは。これはテスト音声です。 今回はウィスパーを使って、音声の認識をやってみました。 ウィスパーというのはオープンAIがリリースしたものになります。
query作成
コマンド内のファイル名.txt
を自身のファイル名に置き換えた後で次のコマンドを実行してください。
curl -s \ -X POST \ "localhost:50021/audio_query?speaker=1"\ --get --data-urlencode text@<ファイル名.txt> \ > query.json
query.jsonの末尾にファイル名.txt
の内容がカタカナで表記されていたらquery.jsonの完成です。
query.jsonを使ってAPIを叩いて音声ファイル作成
次のコマンドを叩いてファイルが出来るまでお待ちください。 (wavファイルの名前はお好みで変えても大丈夫です。)
curl -s \ -H "Content-Type: application/json" \ -X POST \ -d @query.json \ "localhost:50021/synthesis?speaker=1" \ > audio.wav
実際に作ったものはこちらになります。
テキスト読み上げに際してVOICEVOX:ずんだもんを使用させていただきました。
読み上げの話者を変えたい場合はコンテナ起動中にhttp://localhost:50021/speakersでidを確認後、コマンドのlocalhost:50021/synthesis?speaker=1
部分の数字を変更してください。
ここまで実行した後にコンテナの動作を停止したい場合は、docker-compose stop
コマンドを叩いてください。docker-compose ps
コマンドでStateの欄が2つともExitとなっていれば停止しています。
おわりに
今回は、Whisperで文字起こししたtxtファイルを使って、テキスト読み上げをしてみました。
今回の内容だと、日本語から日本語への話者変換の形になりますが、Whisperは翻訳してから文字を書き起こすという事も可能なので、英語音声を日本語音声にする事が可能になります。
今回はここまで。
それでは、また!