[音声合成] 深層学習を駆使したテキスト読み上げサービスの Amazon Polly を AWS CLI で試してみた ~ AWS re:Invent Day2

こんにちは。同僚の sparkgene と共にre:invent 2016 に参加している ma2k8 です。

Keynote Day2 で発表されたPollyを早速 AWS CLI で試してみたので紹介したいと思います。

Amazon Pollyとは?

テキストを分析し、読み上げた音声データをMP3ストリームで提供してくれるテキストスピーチサービスです。
また、lexicon(発音辞書)で任意の読み上げ方を登録することが出来ます。

img_8633-thumb

非常にインテリジェント(地名略称を正式名称にしたり)でレスポンスも非常によいとのこと。すでに24もの言語に対応しているようです。

事前準備

ここではMacOSでの手順を紹介しますが、他OSやSDKでも抑える点は同じです。
※バージョン、RegionがPolly対応しているか、IAMに権限はあるか。

AWS-CLIのupdate

[bash gutter="false"]
$ brew upgrade awscli
~略~
$ aws --version
aws-cli/1.11.23 Python/2.7.10 Darwin/15.6.0 botocore/1.4.80
[/bash]

aws configure

Pollyの現時点での対応リージョンは以下の通り

Polly-region

今回はバージニアリージョン(us-east-1)を選択します。
[bash gutter="false"]
$ aws configure
AWS Access Key ID [********************]:
AWS Secret Access Key [********************]:
Default region name [us-east-1]:
Default output format [None]:
[/bash]

IAMにはpolly:SynthesizeSpeechの権限が付与されていれば以降の手順は実行可能です。

実行してみる

[bash gutter="false"]
$ aws polly synthesize-speech --output-format=mp3 --text="こんにちは" --text-type=text --voice-id=Mizuki hello.mp3
{
"ContentType": "audio/mpeg",
"RequestCharacters": "5"
}
[/bash]

mp3で音声がダウンロードできました!

長めの文章で実行してみる

青空文庫から「吾輩は猫である」のテキストを持ってきてPollyに読んでもらいましょう。

[bash gutter="false"]
$ aws polly synthesize-speech --output-format=mp3 --text=nkf -u neko.txt --text-type=text --voice-id=Mizuki neko.mp3
{
"ContentType": "audio/mpeg",
"RequestCharacters": "1107"
}
[/bash]

生成された音声データがこちら。

1000文字以上でも40〜50秒ほどで音声ファイルを取得できました。ストリーム再生であれば遅延なく再生できそうですね。読み上げもすごく自然です。

制限

AWS Console上ではPollyが読み上げられる文章は1000文字までに制限されていますが、実際は1500文字が上限になっているようです。

polly-aws-console

入力テキストのサイズは、最大 1500 課金対象文字 (合計 3000 文字) です。SSML タグは、課金対象文字としてカウントされません。入力テキストに適用する最大 5 個のレキシコンを指定できます。出力オーディオストリーム (合成) は 5 分に制限されます。その時間を過ぎると、残りの音声は切り取られます。
Amazon Polly の制限 - Amazon Polly

ちなみに上限値を超える文字列を送ると以下のメッセージが返ってきました。

[bash gutter="false"]
An error occurred (TextLengthExceededException) when calling the SynthesizeSpeech operation: None
[/bash]