Googleライブラリを使いText-to-SpeechをPythonで動かす方法。関数として使う方法も紹介【GCP】【JSON】

プログラミング

GCP (Google Cloud Platform)の Text-to-Speech という API を Python から実行する方法について紹介します。

APIというのは、プログラミングでいろいろなサービスを呼び出せるツールです。例えば、GoogleのAPIを使えば、PythonコードでGoogleドライブにアクセスしたり、Gmailを送信したりすることができます。

Text-to-Speech は、テキストを読み上げてくれるAPIです。英語、日本語、中国語などさまざまな言語に対応しており、話す速度や音程も変えることができます。

デモ

公式サイトでデモ音声を試聴できます。ほかの音声合成サービスと比較して使用を検討してみてください。

Text-to-Speech AI: Lifelike Speech Synthesis | Google Cloud
Turn text into natural-sounding speech in 220+ voices across 40+ languages and variants with an API powered by Google’s ...

Text-to-Speech は有料です。使えば使うほど料金は増えていきます。しかし、1か月に100万文字ほど使わないと課金されないので、よほど大規模でない限り無料で使用できます。
詳しい料金体制は公式サイトを確認してください。

料金  |  Cloud Text-to-Speech  |  Google Cloud
Text-to-Speech の料金を確認する

APIの登録

GCPアカウントの作成

Google の API を使用するためには、Google Cloud Platform のアカウントの作成が必要です。ここではすでにアカウントを取得済みだとして話を進めます。

新規プロジェクトの作成

GCPにアクセスし、左上のプロジェクトを選択後、「新しいプロジェクト」を押して新規プロジェクトを作成します。あるいは既存のプロジェクトを選択します。
プロジェクトごとに使用する API を分けられるので、アプリごとにプロジェクトを分けるのが良い?と思います。

新規プロジェクトの作成

左上の「≡」から「お支払い」を選択し、請求先アカウントを登録しましょう。登録しないとAPIを使用することができません。

APIの有効化

Text-to-Speech の API を使えるように設定します。

APIとサービスに行き(すべてのプロダクトを表示>APIとサービス などからアクセスできます)、

すべてのプロダクトを表示

上の方にある「APIとサービスの有効化」をクリック

APIとサービスの有効化

Cloud Text-to-Speech API を探して(あるいは検索して)、有効化します。

text-to-speechを押す

認証情報の作成

APIを使うときは、APIキーを送信するか、サービスアカウントで認証するかの主には二つの方法があります。サービスアカウントを作ると解説している記事が多いので、ここでもサービスアカウントを使った認証方法を紹介します。

APIとサービスを押した後のページで、認証情報>認証情報を作成>サービスアカウントをクリック

サービスアカウントをクリック

その後、サービスアカウント名を入力します。それ以外はスキップでOK。

完了を押すと、サービスアカウントが追加されるので、メールをクリック。

サービスアカウントのメールをクリック

上のタブにある、キー>鍵を追加>新しい鍵を作成

新しい鍵を作成

JSONを選んで「作成」をクリック

JSONを選択

するとJSONファイルがダウンロードされます。

これでAPIキーの準備は完了しました。次はPythonプログラムを書いていきます。

Pythonコード

Pythonはすでにインストールされているものとします。もしPythonの導入方法が分からない場合は、Google Colaboratory を使ってもOKです。

仮想環境の作成(任意)(Google Colabの人は不要)

PythonをPCに直接インストールしている場合やAnacondaでインストールしている場合は仮想環境の作成がオススメです(Google Colabotaroryの人は不要)。ターミナルを開いて、プログラムを作成するフォルダに移動します(cd ファイルパス)。その後、

Python直接インストールの人は

python -m venv .venv

Anacondaの人は

conda create --name .venv python=3.10

で仮想環境を作成できます。(.venvが仮想環境名。python=3.10でpythonを同時にインストール)

作成できたら、Pythonの人は

.venv/Scripts/activate.ps1

Anacondaの人は

conda activate .venv

で仮想環境に入ります。「(.venv)」というのが行の先頭についたらOKです。ターミナルを閉じたら仮想環境から出てしまいますので、もう一度activateして仮想環境に入りなおしてください。

ライブラリのインストール

Text-to-Speech の機能を使うためのライブラリ(拡張機能のようなもの)をインストールします。

pip install --upgrade google-cloud-texttospeech

を実行してください。Anaconda の人は conda install … でインストールできる場合はそちらを利用してください。また、Google Colaboratoryを使っている人は「!」をつけて

!pip install --upgrade google-cloud-texttospeech

を実行(セルの左側にある再生ボタンを押します)。

プログラムを書く

text_to_speech.py ファイルを作成し、次を書き込みます。

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'secret-key.json'
from google.cloud import texttospeech

# クライアントをインスタンス化します
client = texttospeech.TextToSpeechClient()
text = "Hello World"

# 合成するテキスト入力を設定します
synthesis_input = texttospeech.SynthesisInput(text=text)

# 声のリクエストを構築し、言語コード(「en-US」)と
# SSML音声のジェンダー(「neutral」)を選択します
voice = texttospeech.VoiceSelectionParams(
    language_code="en-US", ssml_gender=texttospeech.SsmlVoiceGender.NEUTRAL
)

# 返されるオーディオファイルの種類を選択します
audio_config = texttospeech.AudioConfig(
    audio_encoding=texttospeech.AudioEncoding.MP3
)

# 選択した音声パラメータとオーディオファイルタイプを使用して、
# テキスト入力に対してテキストから音声に変換するリクエストを実行します
response = client.synthesize_speech(
    input=synthesis_input, voice=voice, audio_config=audio_config
)

# responseのaudio_contentはバイナリです。
with open("output.mp3", "wb") as out:
    out.write(response.audio_content)
    print('Audio content written to file "output.mp3"')

textに読み上げてもらう言葉を記入します。また、language_code を指定することで言語を決定します。
今は en-US なので英語ですが、日本語をしゃべらせる場合は ja-JP とします。

また、認証で使用するJSONファイルを、この Python ファイルと同じ場所に置きます。JSONファイルは secret-key.json という名前に変更しました。
(Google Colab の人は、左のファイルマークを押してJSONファイルをアップロードすれば大丈夫だと思います)

/
| - text_to_speech.py
| - secret-key.json

あとはこれを実行するだけで Text-to-Speech を使うことができます!

python text_to_speech.py

で実行します(text_to_speech.pyはファイル名なので、ご自身のファイル名に合わせてください。)GoogleColaboratoryの人は、セルの再生ボタンをクリックで実行します。

実行結果すると、output.mp3 というファイルが出力されます。

関数化する場合

関数としてテキストを音声に変換する場合は、例えば以下のように書けます。

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'secret-key.json'
from google.cloud import texttospeech

# クライアントをインスタンス化します
client = texttospeech.TextToSpeechClient()

# テキストとを音声に変換し、返す
def text_to_speech(text):
    # 合成するテキスト入力を設定します
    synthesis_input = texttospeech.SynthesisInput(text=text)

    # 声のリクエストを構築し、言語コード(「en-US」)と
    # SSML音声のジェンダー(「neutral」)を選択します
    voice = texttospeech.VoiceSelectionParams(
        language_code="en-US", ssml_gender=texttospeech.SsmlVoiceGender.NEUTRAL
    )

    # 返されるオーディオファイルの種類を選択します
    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )

    # 選択した音声パラメータとオーディオファイルタイプを使用して、
    # テキスト入力に対してテキストから音声に変換するリクエストを実行します
    response = client.synthesize_speech(
        input=synthesis_input, voice=voice, audio_config=audio_config
    )

    # responseのaudio_contentはバイナリです。
    return response.audio_content

テキストを引数にとり、音声のバイナリデータが返却されます。

別のファイルからこの関数を使用する場合は

import text_to_speech

text = "Hello World"
speech_data = text_to_speech.text_to_speech(text)

などとすればよいでしょう。

参考

GCP Text-to-Speech APIの使い方~Pythonで音声出力
https://masa-engineer-blog.com/gcp-text-to-speech-api-python/

コメント

タイトルとURLをコピーしました