Google Cloud Text-to-Speech の使い方 日本語テキストを読み上げさせてみよう

Google Cloud Text-to-Speech の使い方 日本語テキストを読み上げさせてみよう
あぱーブログ
2018年5月9日  カテゴリー:WEB  タグ: , , ,
Pocket
LINEで送る

Google Cloud Text-to-Speech は、テキストを読み上げてくれる音声変換サービスです。日本語を含め複数の言語に対応し、機械学習を利用して自然な発音の音声を合成することができます。そこで今回は、日本語のテキストを Google Cloud Text-to-Speech に読み上げさせる手順をまとめてみました。

 
(2018年7月22日追記)WaveNet voices が日本語にも対応しましたので記事を更新しました。

5秒で試せる Cloud Text-to-Speech

Google Cloud Text-to-Speech のページ にあるデモアプリに、適当な日本語のテキストを入力して言語「Japanese」を選択すれば日本語で読み上げてくれます、利用登録も必要ありません。

Google Cloud Platform の利用登録

Cloud Text-to-Speech API を直接使うには、まず初めに Google Cloud Platform の利用登録が必要になります。(Cloud Text-to-Speech は Google Cloud Platform が提供するサービスのひとつです)登録用のGoogleアカウントを1つ用意しましょう。

Google Cloud Platform トップページの「無料トライアル」をクリックし、Googleアカウントでログインします。

Google Cloud Platform の無料トライアルの登録画面が表示されますので、住んでいる国を選択し「同意して続行」をクリックします。

Google Cloud Platform の無料トライアルの登録画面

次の画面で「住所」「名前」「電話番号」「クレジットカード番号」(これらの項目は必須です)を入力し、「無料トライアルを開始」をクリックします。

項目の入力と「無料トライアルを開始」をクリック

以上で登録完了です。しばらくすると Google Cloud Platform のコンソール(管理画面)が表示されます。

Google Cloud Platform のコンソール

プロジェクトの作成

Cloud Text-to-Speech のテスト用に新しいプロジェクトを作成します。(テストが終わったらプロジェクトを削除するだけで片付けができます)

「プロジェクトを選択」(もしくは「My First Project」)をクリックします。

「+」ボタンをクリックします。

適当なプロジェクト名を入力して、「作成」をクリックします。

1分ほどでプロジェクトが作成されますので、選択します。(自動で選択されている場合もあります) 

Cloud Text-to-Speech API の有効化

続いて今回の本題、Cloud Text-to-Speech API を有効化します。Standard (non-WaveNet) voices は、月間400万文字までは無料で使えます。(より自然な発音を可能とする WaveNet voices は、現時点では日本語に対応していません。2018年5月9日現在)

(2018年7月22日追記)WaveNet voices が日本語にも対応しました。

参考資料:Pricing | Cloud Text-to-Speech API

左上のハンバーガー「≡」メニューから「APIとサービス」>「ライブラリ」を選択します。

かなりの数の APIがあるので「Text-to-Speech」を検索して選択します。(名前が似ている Cloud Speech API は "音声を" テキストに変換してくれるサービスです。 間違えないようにしましょう)

「有効」にするをクリックします。

以上で Cloud Text-to-Speech API が有効になりました。

Google Cloud SDK のインストール

Cloud Text-to-Speech API の認証情報を作成するのに Google Cloud SDK が必要になりますので、インストールします。

SDKのインストールの前に、システムに Python 2.7 がインストールされていることを確認します。最近のmacOSやCentOS7であれば、Python2.7がインストールされていると思います。(今回はmacOS10.13のマシンにインストールしました)

$ python -V
Python 2.7.10 ← インストールされている

ローカルPCがWindowsの場合は「Windows 用のクイックスタート | Cloud SDK のドキュメント」ページから、インストーラをダウンロードできます。

SDKをインストールしたいディレクトリに移動して、以下のコマンドを実行します。

$ cd ~
$ curl https://sdk.cloud.google.com | bash

SDKのインストール先ディレクトリの指定です。よければそのままエンターを押してください。SDKのダウンロードが始まります。

Installation directory (this will create a google-cloud-sdk subdirectory) (/Users/foo): <そのままエンター>

SDKがクラッシュした場合に、匿名化された使用データをGoogleに送ってもいいか聞かれます。(ここはお好みで選択してください)

Do you want to help improve the Google Cloud SDK (Y/n)?

シェルの設定ファイルに SDKコマンドへのパスを追加してもいいか聞かれますので「Y」を入力してください。

Modify profile to update your $PATH and enable shell command
completion?
Do you want to continue (Y/n)? Y

シェルの設定ファイルのパスの確認です。よければそのままエンターを押してください。

Enter a path to an rc file to update, or leave blank to use
[/Users/foo/.bash_profile]:

シェルの設定ファイルを再読み込みして「gcloud」コマンドが実行できることを確認します。

$ source ~/.bash_profile
$ gcloud help
(ヘルプが表示されればOKです)

続いて Google Cloud SDK の初期化を行います。

Google Cloud SDK の初期化

Google Cloud SDK の認証

Googleアカウントで Google Cloud SDK をアプリ認証します。以下のコマンドを実行してください。

$ gcloud init

Googleアカウントにログインしていいですか? と聞いてきますので「Y」を入力します。(WEBブラウザが開きます)

You must log in to continue. Would you like to log in (Y/n)? Y

Google Cloud Platform で使っている Googleアカウントを選択します。

Google Cloud SDK のリクエストを許可します。(この許可はGoogleアカウントの管理画面でいつでも取り消すことができます)

「Google Cloud SDK の認証が完了しました」が表示されたら、ターミナル(コマンドプロンプト)に戻ります。

プロジェクトIDの選択

ターミナルに戻ったら、先ほど作成したプロジェクトのIDを選択しておきます。

Pick cloud project to use:
[1] my-first-project-203409
[2] text-to-speech-test-203409
[3] Create a new project
Please enter numeric choice or text value (must exactly match list
item): 2

(捕捉)Google Cloud SDK の設定情報は「/<ホームディレクトリ>/.config/gcloud/」以下に保存されます。

以上で Google Cloud SDK を使う準備ができました。

認証情報の作成

Cloud Text-to-Speech API の認証情報を作成します。

「IAM と管理」>「サービスアカウント」を選択します。

「+サービスアカウントを作成」をクリックします。

適当なサービスアカウント名を入力し、役割「Project オーナー」を選択します。続いて「新しい秘密鍵の提供」にチェックを入れて「保存」をクリックします。(キーのタイプは「JSON」のままでOKです)

サービスアカウントが作成されると、キーファイルがダウンロードされます。(メッセージの通りキーファイルの取り扱いには注意しましょう!)

以下のコマンドを実行して、認証情報を指定します。

gcloud auth activate-service-account --key-file=<キーファイルのパス>

環境変数「GOOGLE_APPLICATION_CREDENTIALS」にもキーファイルのパスを追加しておきます。

export GOOGLE_APPLICATION_CREDENTIALS=<キーファイルのパス>

Cloud Text-to-Speech API へのリクエスト実行

かな〜り下準備が長くなりましたが、いよいよ Cloud Text-to-Speech API へのリクエスト実行です。

まずリクエスト用の JSON ファイルを作成します。(ファイル名はなんでもかまいません)「text」フィールドに読み上げてほしいテキストを入力します。日本語の WaveNet voices を使う場合は、voice の name フィールドに「ja-JP-Wavenet-A」を指定してください。

vi synthesize-input.json

参考資料:Cloud Text-to-Speech API | APIs & Reference

curl コマンドで Cloud Text-to-Speech API にリクエストを投げます。-d オプションで先ほど作成した、リクエスト用の JSON ファイルを指定します。(パスの先頭に「@」をつけるのを忘れずに!)

curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @<JSON ファイルのパス> \
https://texttospeech.googleapis.com/v1beta1/text:synthesize > synthesize-output.txt

下のような内容が「synthesize-output.txt」に出力されます。「audioContent」フィールドの値が base64 でエンコードされた音声データです。(メチャクチャ長いです)
cat synthesize-output.txt

{
"audioContent": "//NAxAAR4EooAAjGJBwAABE(略)
}

音声ファイルにデコードしますので「audioContent」の値を「synthesize-output-base64.txt」というファイルにコピーします。(ファイル名はなんでもかまいません)
vi synthesize-output-base64.txt

//NAxAAR4EooAAjGJBwAABE(略)

最後に base64 コマンドで音声ファイルにデコードします。

base64 synthesize-output-base64.txt --decode > synthetic-audio.mp3

読み上げてもらった音声サンプル

Google Cloud Text-to-Speech(スタンダード)で読み上げてもらった音声がこちらです。

(2018年7月22日追記)日本語の WaveNet voices を使って読み上げてもらった音声です。

こちらは同じテキストを IBMクラウドの Watson Text to Speech で読み上げてもらった音声です。どちらも個性がありますね(^^)

おわりに

次回は、競合となる IBM Cloud の 音声合成サービス Watson Text to Speech を試してみたいと思います。

スポンサーリンク
Pocket
LINEで送る

Google Cloud Text-to-Speech の使い方 日本語テキストを読み上げさせてみよう」への4件のフィードバック

  1. 小林隆弘

    おかげさまでGoogle Cloudの登録から始めて無事に音声ファイルを取得することができました!こちらでサンプルのMP3ファイルを再生できたので、めげずにできました。
    ありがとうございます。

    Windowsではまった点を書いておきます。PowerShellで実行しました。
    1. 行継続文字は”\”ではなく”`”
    2. $(gcloud auth application-default print-access-token)はうまく動かないので、実際に取得した結果文字列(ya29で始まる)をそのまま入力
    3. 入力ファイル synthesize-input.json はSJISではなくUTF-8で保存する
    SJISなのを気づかずに読み上げてとんでもないMP3が出来上がりました(笑)
    4. 出力ファイルからaudioContentの”値のみ”に加工するのを忘れてデコードできない
    5. 実行場所のC:\Program Files (x86)\Google\Cloud SDKに結果を書こうとすると権限がないのでデコードできない→別の場所を指定
    6. フォルダ名”Program Files”をダブルクオートで囲まなかったのでエラー
    7. curl.exeがなければダウンロードする

    途中からの流れは、
    1. curl.exeをダウンロードして適当な場所に置く C:\Program Files\bin\curl.exe
    2. リクエスト用JSONファイルを作成してUTF-8で保存
    3. トークンを取得
    gcloud auth application-default print-access-token
    出力(例): ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
    4. 次のようなcurlコマンドを発行
    C:\”Program Files”\bin\curl.exe -H “Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg” -H “Content-Type: application/json; charset=utf-8” -d @C:\Users\takahiro\Downloads\synthesize-input.json https://texttospeech.googleapis.com/v1beta1/text:synthesize > C:\Users\takahiro\Downloads\synthesize-output.txt
    5. 出来上がったファイル(synthesize-output.txt)から最初と最後を削除してダブルクオート内の文字列だけにする
    6. Windowsではcertutilでbase64のデコードができるので次のように入力
    certutil -f -decode “C:\Users\takahiro\Downloads\synthesize-output.txt” “C:\Use
    rs\takahiro\Downloads\synthesize-output.mp3”
    7. mp3ファイルを再生する

    返信
  2. 小林隆弘

    Windowsではこのコマンドでできました。

    C:\”Program Files”\bin\curl.exe
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)"

    -H “Content-Type: application/json; charset=utf-8”
    -d @C:\Users\takahiro\Downloads\synthesize-input.json

    https://texttospeech.googleapis.com/v1beta1/text:synthesize
    > C:\Users\takahiro\Downloads\synthesize-output.txt

    certutil -f -decode "C:\Users\takahiro\Downloads\synthesize-output.txt"
    “C:\Users\takahiro\Downloads\synthesize-output.mp3”

    簡単に申し込めて、安価で手軽に商用利用できる日本語対応TTSはこの他にありそうでしょうか。
    Google Cloud TTS
    AWS Polly
    Azure TTS
    IBM Watson TTS

    返信
    1. あぱーブログあぱーブログ 投稿作成者

      >小林隆弘さん
      コメントありがとうございます。
      私の知る限りですが、現時点で日本語に対応しているTTSは、
      小林さんが上げられている4サービスくらいだと思います。

      返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です