【ROS】クラウド音声合成が利用できるtts-ros1パッケージを使ってみた

スポンサーリンク

手軽に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コンソールでアクセスキー、シークレットキーを発行する必要がある。発行方法はこちらが詳しい。

AWS CLIのインストール

$ sudo snap install aws-cli --classic

AWS CLIの設定

$ 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:

リンク

GitHub: tts-ros1

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パッケージ。