GCP (Google Cloud Platform)の Text-to-Speech という API を Python から実行する方法について紹介します。
APIというのは、プログラミングでいろいろなサービスを呼び出せるツールです。例えば、GoogleのAPIを使えば、PythonコードでGoogleドライブにアクセスしたり、Gmailを送信したりすることができます。
Text-to-Speech は、テキストを読み上げてくれるAPIです。英語、日本語、中国語などさまざまな言語に対応しており、話す速度や音程も変えることができます。
デモ
公式サイトでデモ音声を試聴できます。ほかの音声合成サービスと比較して使用を検討してみてください。
APIの登録
GCPアカウントの作成
Google の API を使用するためには、Google Cloud Platform のアカウントの作成が必要です。ここではすでにアカウントを取得済みだとして話を進めます。
新規プロジェクトの作成
GCPにアクセスし、左上のプロジェクトを選択後、「新しいプロジェクト」を押して新規プロジェクトを作成します。あるいは既存のプロジェクトを選択します。
プロジェクトごとに使用する API を分けられるので、アプリごとにプロジェクトを分けるのが良い?と思います。
左上の「≡」から「お支払い」を選択し、請求先アカウントを登録しましょう。登録しないとAPIを使用することができません。
APIの有効化
Text-to-Speech の API を使えるように設定します。
APIとサービスに行き(すべてのプロダクトを表示>APIとサービス などからアクセスできます)、
上の方にある「APIとサービスの有効化」をクリック
Cloud Text-to-Speech API を探して(あるいは検索して)、有効化します。
認証情報の作成
APIを使うときは、APIキーを送信するか、サービスアカウントで認証するかの主には二つの方法があります。サービスアカウントを作ると解説している記事が多いので、ここでもサービスアカウントを使った認証方法を紹介します。
APIとサービスを押した後のページで、認証情報>認証情報を作成>サービスアカウントをクリック
その後、サービスアカウント名を入力します。それ以外はスキップでOK。
完了を押すと、サービスアカウントが追加されるので、メールをクリック。
上のタブにある、キー>鍵を追加>新しい鍵を作成
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/
コメント