Windows10のAWS CLIを使ってAmazon Pollyを使用してみる
先日、JAWS-UG名古屋の勉強会に行ってきました。久々のCLIという感じだったのですが、RaspberryPiを触っているので何とかなるだろうと思っていたのですが、Windows10のBash環境からの前提だったためか、Webの画面からのコピー&ペーストがうまくいかず泣きたくなりました。
CLIの使い方に関しては勉強にはなりましたが、コマンドラインヘルパーみたいなものがないと正直厳しいなあと感じました。
Windows10のBash環境はさすがにアレなので、それ以外の方法を探してみたらふつうにあるんすね>標準のCLIインストーラ。ってことで復習もかねてWindows10でAWS CLIをインストールして、さらに最近Amazonの方が会社に来られたときにPolly
っていうのもあるんですよと言われていたので、CLI経由で試してみることにしました。(基本はRESTでの使用ではなく、SDK経由の利用っぽいですけど。)
Amazon Pollyとは?
Amazon Polly
は、文章をリアルな音声に変換するサービスで、話すことができるアプリケーションを作成でき、まったく新しいカテゴリの音声対応製品を構築できます。Amazon Polly は、高度なディープラーニング技術を使用したテキスト読み上げサービスで、人間の声のような音声を合成します。
引用元 aws.amazon.com
TTS+ディープラーニングという感じのようです。抑揚の部分なんかがディープラーニングの効果なんでしょうかね。
AWS CLIのインストール
AWS コマンドラインインターフェイス(AWS CLI)のインストーラは以下のリンクからダウンロードできます。
リンクを開くと以下のような画面になると思います。
画面の右のほうにインストーラのダウンロードリンクがありますので、OSのbit数にあわせてインストーラをダウンロードします。自分は64bit版を選択しました。
Windows10のBash環境やそのほかのOSではPython
とpip
を使ってインストールできます。どっちが簡単かというと…難しいところですね。(Windows10のBash環境でコピペができなかったのはWindowsのビルドに関係しているような気がします。)
ダウンロードが終わったらインストーラを起動します。
インストーラが起動したら【Next】ボタンをクリックします。
続いてライセンス確認の画面になるので、下にある【I accept the terms in the License Agreement】にチェックを入れて、【Next】ボタンをクリックします。
次はインストールする場所の設定画面になります。デフォルトのロケーションはC:\Program Files\Amazon\AWSCLI\
になりますので、変更する際は【Browse…】を押して変更を行ってください。問題ない場合には【Next】ボタンをクリックします。
あとはインストールを行うだけです。ここまでで問題なければ【Install】ボタンをクリックします。
進捗がプログレスバーに表示されます。
以下の画面がでればインストールは完了です。【Finish】をクリックしてインストーラを終了させます。
あとは実行の確認です。powershell
を起動し、以下のように打ち込みます。
PS C:\> aws --version aws-cli/1.11.141 Python/2.7.9 Windows/8 botocore/1.6.8
CLIのバージョン情報がでていれば問題ありません。(Windows10なのになぜWindows8ってなるのだろうか?)
インストーラでセットアップを行うとpowershell
だけでなくcmd
でもAWS CLI
を使用できます。
(注意)PowerShellのCodePageをchcp
コマンドで変更していると実行できないようです。
PS > aws configure Traceback (most recent call last): File "aws", line 27, in <module> File "aws", line 23, in main File "awscli\clidriver.pyc", line 56, in main File "awscli\clidriver.pyc", line 192, in main File "awscli\argparser.pyc", line 100, in parse_known_args LookupError: unknown encoding: cp65001
このようになったら
PS > chcp 932 現在のコード ページ: 932
として変更してください。つまりShift_JIS環境でしか使えないということです。cmd
での実行には関係はありません。
Amazon Pollyを使用するためのIAMの設定する
AWS CLIでは使用する際に認証情報を設定しないといけないのでAWSマネージメントコンソールからIAMを設定し、CLIに設定する必要があります。ここからはその設定になります。ここからはあまり自分も詳しくないのでつらい…
IAMの画面からユーザの追加を選択します。今回のユーザー名はpolly_user
として【プログラムによるアクセス】にチェックを入れ、画面下の【次のステップ:アクセス権限】ボタンをクリックします。
作成されたpolly_user
の権限を追加する画面です。
アクセス権限に【既存のポリシーを直接アタッチ】を選択し、フィルターの検索ボックスにpolly
と入力して検索をします。
すると検索されたリストに
- AmazonPollyFullAccess
- AmazonPollyReadOnlyAccess
がでてくるので、今回はAmazonPollyFullAccess
にチェックをいれて、【次のステップ:確認】ボタンをクリックします。
(注意)実際には、適切な権限を与えるようにしてください。
ボタンをクリックすると、作成内容の確認画面になります。問題なければ【ユーザの作成】ボタンをクリックします。
成功すると以下のような画面に遷移します。
ユーザ名、アクセスキーID、シークレットアクセスキーが表示されますが、画面の中ほどにある【.csvのダウンロード】ボタンをクリックすれば、表示された情報が含まれたCSVファイルがダウンロードできるのでそれをダウンロードしておきます。この情報をあとの手順で使用します。
Amazon PollyをAWS CLIから使用する
CLIに先ほど作成したユーザ名のIAM情報を登録します。 powershell上から以下のコマンドを実行します。
PS C:\> aws configure AWS Access Key ID : <ダウンロードしたCSVに記載> AWS Secret Access Key :<ダウンロードしたCSVに記載> Default region name :ap-northeast-1 Default output format :json
これで設定できました。
早速、polly
コマンドを実行してみたいと思います。
以下の情報を参考にしています。
すると…
PS C:\> aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text 'Hello, earned about the W3C on 10/3 of last year.' hello.mp3 Could not connect to the endpoint URL: "https://polly.ap-northeast-1.amazonaws.com/v1/speech"
APIのエンドポイントに接続できないといわれました。
先ほどの設定ではデフォルトのリージョンをap-northeast-1
にしていました。このリージョンはpollyに対応していないので対応しているリージョンに変更する必要があります。環境変数で指定してもいいのですが、今回はデフォルト値を変更することにしました。
再度、awsコマンドで設定を行います。デフォルトのリージョンをus-west-2
に変更しています。あとは入力せずEnter
で前回の設定値が引き継がれます。
これを行わなくても良いようです。Optionスイッチに以下を追加すれば都度リージョンを変更できます。
--region us-west-2
PS C:\> aws polly synthesize-speech --region us-west-2 --output-format mp3 --voice-id Joanna --text 'Hello, earned about the W3C on 10/3 of last year.' hello.mp3
PS C:\> aws configure AWS Access Key ID [********************]: <そのままEnter> AWS Secret Access Key [********************]:<そのままEnter> Default region name [ap-northeast-1]:us-west-2 Default output format [json]:<そのままEnter>
設定後、もう一度pollyにアクセスすると…
PS C:\> aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text 'Hello, my name is Joanna. I l earned about the W3C on 10/3 of last year.' hello.mp3 { "ContentType": "audio/mpeg", "RequestCharacters": "71" } PS C:\Users\CTV> ls hello.mp3 ディレクトリ: C:\Users\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2017/08/27 15:12 33743 hello.mp3
無事にPollyによってTTSを行ったmp3ファイル(hello.mp3
)がダウンロードされています。
日本語の場合にはオプションを変更すれば問題ありません。(環境変数を指定してもOKです)
PS C:\Users\> aws polly synthesize-speech --output-format mp3 --voice-id Mizuki --text '坊やだからさ。' polly.mp3 { "ContentType": "audio/mpeg", "RequestCharacters": "7" }
実験してみたのですが、英語と日本語の混じった文章ではどうなるのかなと思ったのですが、英語の部分は英語にしてくれているのでAIっぽさのあるTTSになっているのだなと思いました。他のだと混じっているとうまくいかないことが多いのでかなり助かります。
たとえば以下のようにすると```you````の部分はユーと話してくれます。ルー語もOKのようです。
PS C:\Users\> aws polly synthesize-speech --output-format mp3 --voice-id Mizuki --text 'youは坊やだからさ。' polly.mp3 { "ContentType": "audio/mpeg", "RequestCharacters": "11" }
番外編
RaspberryPiにもAWS CLIをインストールしてみました。ドキュメント通りpip install awscli
でインストールしています。
$ pip install awscli Collecting awscli Downloading awscli-1.11.141-py2.py3-none-any.whl (1.2MB) 100% |????????????????????????????????| 1.2MB 225kB/s Collecting PyYAML<=3.12,>=3.10 (from awscli) Downloading PyYAML-3.12.tar.gz (253kB) 100% |????????????????????????????????| 256kB 807kB/s Collecting rsa<=3.5.0,>=3.1.2 (from awscli) Downloading rsa-3.4.2-py2.py3-none-any.whl (46kB) 100% |????????????????????????????????| 51kB 1.7MB/s Collecting botocore==1.6.8 (from awscli) Downloading botocore-1.6.8-py2.py3-none-any.whl (3.6MB) 100% |????????????????????????????????| 3.6MB 71kB/s Collecting docutils>=0.10 (from awscli) Downloading docutils-0.14-py2-none-any.whl (543kB) 100% |????????????????????????????????| 552kB 419kB/s Collecting s3transfer<0.2.0,>=0.1.9 (from awscli) Downloading s3transfer-0.1.10-py2.py3-none-any.whl (54kB) 100% |????????????????????????????????| 61kB 1.8MB/s Collecting colorama<=0.3.7,>=0.2.5 (from awscli) Downloading colorama-0.3.7-py2.py3-none-any.whl Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli) Downloading pyasn1-0.3.3-py2.py3-none-any.whl (63kB) 100% |????????????????????????????????| 71kB 1.9MB/s Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.6.8->awscli) Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB) 100% |????????????????????????????????| 194kB 968kB/s Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.6.8->awscli) Downloading jmespath-0.9.3-py2.py3-none-any.whl Collecting futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" (from s3transfer<0.2.0,>=0.1.9->awscli) Downloading futures-3.1.1-py2-none-any.whl Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore==1.6.8->awscli) Downloading six-1.10.0-py2.py3-none-any.whl Building wheels for collected packages: PyYAML Running setup.py bdist_wheel for PyYAML ... done Stored in directory: /home/pi/.cache/pip/wheels/2c/f7/79/13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc Successfully built PyYAML Installing collected packages: PyYAML, pyasn1, rsa, six, python-dateutil, docutils, jmespath, botocore, futures, s3transfer, colorama, awscli Successfully installed PyYAML-3.12 awscli-1.11.141 botocore-1.6.8 colorama-0.3.7 docutils-0.14 futures-3.1.1 jmespath-0.9.3 pyasn1-0.3.3 python-dateutil-2.6.1 rsa-3.4.2 s3transfer-0.1.10 six-1.10.0
aws
コマンドを実行してもうまく行かなったのですが、インストールパスが違っていたようです。
$ ~/.local/bin/aws --version
aws-cli/1.11.141 Python/2.7.13 Linux/4.9.41-v7+ botocore/1.6.8
$ ~/.local/bin/aws configure AWS Access Key ID : <ダウンロードしたCSVに記載> AWS Secret Access Key :<ダウンロードしたCSVに記載> Default region name :us-west-2 Default output format :json
設定はこれでOKです。
では、Pollyを呼び出して見ます。
$ ~/.local/bin/aws polly synthesize-speech --output-format mp3 --voice-id Mizuki --text 'youは坊やだからさ。' polly.mp3 ; mpg321 polly.mp3 { "ContentType": "audio/mpeg", "RequestCharacters": "11" } High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3. Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew, now maintained by Nanakos Chrysostomos and others. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Playing MPEG stream from polly.mp3 ... MPEG 2.0 layer III, 48 kbit/s, 22050 Hz mono [0:01] Decoding of polly.mp3 finished.
無事にTTSが行われました。
おわりに
AWS CLI
とAmazon Polly
を使ってみました。アルファベット混じり文章も使えるし、抑揚もいい感じなので使えそうですね!というか英語はもう実用レベルでしょう。
DragonBoard410cでもつかえるのかな?pythonだし使えると思いますが、あとで実験してみます。