手軽にROSで音声合成がしたくてtts-ros1パッケージを使ってみたので、そのメモ。
音声合成にはAWSのクラウド音声合成サービスAmazon Pollyが利用される。クラウドなので、ネットワークが必須で、ちょっとだけお金もかかる。(日本語だと100万文字で4ドル。1年間は無料枠あり)
けど、その代わりに呼び出し元のリソース少なくても動く。
英語、日本語など8言語に対応。
音質は自分としては十分過ぎるほどレベル。
音声合成のサンプルはこちら参照。
AWSにサインイン後はこちらで色々試せる。(無料かどうかは未確認。有料かも。)
ROS2向けのtts-ros2というパッケージもある。
発話方法を細かく指定するマークアップ言語SSMLにも対応。
動作確認環境
OS: Ubuntu 18.04 (Parallels Desktop 16 for Mac上で実行)
ROS: Melodic
セットアップ
$ sudo apt-get update $ sudo apt install python3-pip ros-melodic-tts mpg321 vorbis-tools -y $ pip3 install -U boto3
awscliのセットアップ
まずは、AWSコンソールでアクセスキー、シークレットキーを発行する必要がある。発行方法はこちらが詳しい。
$ sudo snap install aws-cli --classic
$ aws configure AWS Access Key ID [None]: アクセスキー AWS Secret Access Key [None]: シークレットキー Default region name [None]: ap-northeast-1 Default output format [None]:
awscliを使った音声合成の再生
AWS CLIの設定がうまくできていれば、コマンドラインからpollyを使える。行ってくれるのは音声ファイルの作成まで。
$ aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text 'Hello, my name is Joanna. I learned about the W3C on 10/3 of last year.' hello.mp3
作成された音声ファイルmp3を再生
$ mpg321 hello.mp3
ノード起動
音声合成するためには、まずはノードを起動する必要がある。
$ roslaunch tts tts_polly.launch
問題なければ、これでノード起動完了のはずだけど、次のようなメッセージが表示された。
process[soundplay_node-4]: started with pid [14100] /usr/lib/python2.7/dist-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.26.3) or chardet (3.0.4) doesn't match a supported version! RequestsDependencyWarning) Traceback (most recent call last): File "/opt/ros/melodic/lib/tts/polly_node.py", line 18, in <module> import tts.amazonpolly
requestsモジュールが古いようなので、アップデート
$ pip install requests
もう一度実行したら無事にノード起動
$ roslaunch tts tts_polly.launch
Configuration Fileを使って設定
よくわからなかったのでスキップ
音声再生のテスト
テキストから音声データに変換したあとの再生にはsound_playパッケージが使われる。そのため、まずはsound_playをテスト
$ rosrun sound_play test.py
音声合成のテスト(英語)
ノード起動後、voicer.pyを使うと音声合成と再生まで行ってくれる。
$ rosrun tts voicer.py 'Hello World' /tmp/voice_b10a8db164e0754105b7a99be72e3fe5_1613964754.29.ogg
音声合成のテスト(日本語)
オプションでvoice_idを指定すれば、日本語の音声合成もできる。
$ rosrun tts voicer.py 'こんにちは世界' '{"voice_id":"Mizuki"}' /tmp/voice_9d735278cfbdb946834416adfb5aaf6c_1613975702.83.ogg
メモ
voicer.pyなどのスクリプトのパス
/opt/ros/melodic/lib/tts
tts pythonパッケージの場所
$ pip show tts Name: tts Version: 1.0.2 Summary: Package enabling a robot to speak with a human voice by providing a Text-To-Speech ROS service Home-page: http://wiki.ros.org/tts Author: AWS RoboMaker Author-email: ros-contributions@amazon.com License: Apache 2.0 Location: /opt/ros/melodic/lib/python2.7/dist-packages Requires:
リンク
Amazon Polly 開発者ガイド
Amazon Pollyの概要とサンプル音声
Amazon Pollyのテスト
サインイン必要
Amazon Polly 料金詳細
現時点では、標準音声は100万字に対して4.00USD。1年間は無料枠あり。(日本語は対応していないけど、ニューラル音声だと100万字に対して16.00USD。)
GitHub: サンプルアプリ
tts-rosのサンプルアプリとして紹介されているが未確認
ROSで音声認識、音声合成(openhri_ros)
試してないけど、JuliusやGoogleによる音声認識、OpenJTalkやGoogleによる音声合成に対応しているROSパッケージ。