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日経過すると自動的に削除されます。
コメント