PythonでIBM Watsonを用いてテキストを自然な音声に変換する

PythonでIBM Watsonを用いてテキストを自然な音声に変換してみます。

IBM Watson (ワトソン)は、自然言語を理解・学習し人間の意思決定を支援するコグニティブ・コンピューティング・システムである。

変換するために、IBMCloudの無料アカウントを新しく作成する必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■Text to Speech サービスのライトプランに登録する

IBMCloudの無料アカウントを作成した後に、「Text to Speech(https://cloud.ibm.com/catalog/services/text-to-speech)」に移動します。

移動すると、「作成」の項目に「ロケーションの選択」がありますので、「ダラス」という地名が表示されていますので、こちらをクリックします。

クリックすると、プルダウンメニューが表示されますので、「東京」を選択します。

選択後、ページ下に移動し、「料金プランの選択」が「ライト(無料)」になっているかを確認します。

確認後、ページ下に移動し、「リソースの構成」を確認します。「サービス名」や「タグ」を編集することができますが、自動的に編集されていますので、今回はデフォルトのままでライトプランインスタンスの作成を行います。

確認後、右側の「作成」ボタンをクリックします。クリックするとインスタンスの作成が開始されます。

しばらくすると、「リソース・リスト」の「IBM Watson」の「Text to Speech」ページに移動します。これでインスタンスの作成は完了となります。

■ibm_watsonのライブラリをインストールする

完了後、PythonでIBM Watsonを用いてテキストを自然な音声に変換するために、ibm_watsonのライブラリをインストールします。

ibm_watsonをインストールを行いますが、今回はpipを経由してインストールを行うので、まずWindowsのコマンドプロンプトを起動します。

pip install ibm_watson

起動後、上記のコマンドを入力し、Enterキーを押します。

なお、今回は、pythonランチャーを使用しており、Python Version 3.8.5にインストールを行うために、pipを使う場合にはコマンドでの切り替えを行います。

py -3.8 -m pip install ibm_watson

切り替えるために、上記のコマンドを入力し、Enterキーを押します。

Defaulting to user installation because normal site-packages is not writeable
Collecting ibm_watson
Downloading ibm-watson-5.2.2.tar.gz (407 kB)
|████████████████████████████████| 407 kB 930 kB/s
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Collecting ibm-cloud-sdk-core==3.*,>=3.3.6
Downloading ibm-cloud-sdk-core-3.11.0.tar.gz (44 kB)
|████████████████████████████████| 44 kB 612 kB/s
Requirement already satisfied: python-dateutil>=2.5.3 in c:\users\user_\appdata\roaming\python\python38\site-packages (from ibm_watson) (2.8.1)
Requirement already satisfied: websocket-client==1.1.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from ibm_watson) (1.1.0)
Requirement already satisfied: requests<3.0,>=2.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from ibm_watson) (2.25.1)
Requirement already satisfied: PyJWT<3.0.0,>=2.0.1 in c:\users\user_\appdata\roaming\python\python38\site-packages (from ibm-cloud-sdk-core==3.*,>=3.3.6->ibm_watson) (2.1.0)
Requirement already satisfied: six>=1.5 in c:\users\user_\appdata\roaming\python\python38\site-packages (from python-dateutil>=2.5.3->ibm_watson) (1.15.0)
Requirement already satisfied: chardet<5,>=3.0.2 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0,>=2.0->ibm_watson) (4.0.0)
Requirement already satisfied: idna<3,>=2.5 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0,>=2.0->ibm_watson) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0,>=2.0->ibm_watson) (2021.5.30)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0,>=2.0->ibm_watson) (1.26.5)
Building wheels for collected packages: ibm-watson, ibm-cloud-sdk-core
Building wheel for ibm-watson (PEP 517) ... done
Created wheel for ibm-watson: filename=ibm_watson-5.2.2-py3-none-any.whl size=403388 sha256=89156bc6414c0bdc10766b329c4e3e0fa8991e6bca4a4f189e0ee5432ba5538b
Stored in directory: c:\users\user_\appdata\local\pip\cache\wheelsf3c4d4d244aa2e6c139fc93bfc2d6c4d7a231b4d5472fda08
Building wheel for ibm-cloud-sdk-core (setup.py) ... done
Created wheel for ibm-cloud-sdk-core: filename=ibm_cloud_sdk_core-3.11.0-py3-none-any.whl size=74241 sha256=9aeee92326575bec40dba9af95ec9b7fa045c5921fa82ba3d6a8b3829da2f6f4
Stored in directory: c:\users\user_\appdata\local\pip\cache\wheels\bb64bb66cbf597c8401825d418dde8e998e3405d62c196fdf9
Successfully built ibm-watson ibm-cloud-sdk-core
Installing collected packages: ibm-cloud-sdk-core, ibm-watson
Successfully installed ibm-cloud-sdk-core-3.11.0 ibm-watson-5.2.2

Enterキーを押すと、インストールが開始され、上記のように「Successfully installed」と表示されます。これが表示されれば、ibm-watsonが正常にインストールされたことになります。

なお、今回はibm-watsonのバージョン5.2.2をインストールしました。

■PythonでIBM Watsonを用いてテキストを自然な音声に変換する

インストール後、PythonでIBM Watsonを用いてテキストを自然な音声に変換するスクリプトを書いていきます。

■コード

from ibm_cloud_sdk_core import authenticators
from ibm_watson import TextToSpeechV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

url = "https://api.jp-tok.text-to-speech.watson.cloud.ibm.com/instances/***"
apikey = "***********"

authenticator = IAMAuthenticator(apikey)
tts = TextToSpeechV1(authenticator=authenticator)
tts.set_service_url(url)

with open("./speech.mp3",'wb') as audio_file:
    res = tts.synthesize("こんにちは、世界", accept="audio/mp3",voice="ja-JP_EmiVoice").get_result()
    audio_file.write(res.content)

テキストを自然な音声に変換するために、importでTextToSpeechモデル、Watson authenticatorを呼び出します。

その後、urlとapikeyという変数を定義し、それぞれにURLとAPIを記述し、格納します。これで認証を行います。

なお、URLとAPIキーの取得するには、先ほどの「リソース・リスト」の「IBM Watson」の「Text to Speech」ページ内の「管理」をクリックすると、「資格情報」という項目がありますので、こちらから情報をコピーして貼り付けることができます。

urlとapikeyの変数に情報を格納後、テキスト読み上げの設定を行います。今回は「こんにちは、世界」という文字列を音声ファイルに生成して、Pythonが実行される作業ディレクトリ(カレントディレクトリ)内に「speech.mp3」というmp3形式の音声ファイルとしてエクスポートします。

文字列を音声ファイルに生成する際に、tts.synthesize()を使用しますが、括弧内で引数,パラメーターとして、「voice=”ja-JP_EmiVoice”」を渡すことで、今回は日本語でのテキスト読み上げを行います。日本語以外の言語も対応しています(https://cloud.ibm.com/docs/text-to-speech?topic=text-to-speech-voices)。

■実行・検証

このスクリプトを「text_reading.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、print()関数を使用し、テキストの読み上げ結果を出力するといったコードは記述していないので、何も出力されません。

何も出力されませんが、作業ディレクトリ(カレントディレクトリ)を確認すると、「speech.mp3」というmp3形式の音声ファイルが保存されていることが確認できました。

確認後、音声ファイルを再生すると、今回指定した文字列が読み上げが実行されていることが確認できました。

今回利用したライトプランでは、1カ月あたり10,000文字まで無料で利用することができますが、非アクティブで30日経過すると自動的に削除されます。

コメント

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