ketyiaの作ってみた

このサイトでは作ってみたことを記事にまとめていきます!

Azureで翻訳と音声のサービスを使ってみる ~TextTranslationとSpeechServices~

翻訳と音声のサービス


こんばんは!

Azureを勉強中でして、翻訳と音声のサービスについて学んだのでアウトプットのため記事を書いていきます。

本記事では、AzureのTextTranslationとSpeechServicesで、日本語の自己紹介を英語に翻訳して、その英文をWAV形式の音声ファイルで出力するまでをまとめていきます。

Azureでサービス登録


Azureで、翻訳サービス(TextTranslation)と音声サービス(SpeechServices)を作成します。

サブスクリプション情報とインスタンス情報を入力することで簡単に作成できます。作成出来たら、APIとリージョン情報を控えておきます、使うので。(翻訳サービスはエンドポイントも使用します)

Pythonに組み込む


では、プログラムで先ほどのサービスを組み込んでいきます!

日本語の自己紹介は下記文とします。

こんにちは、私はケイタです。
趣味は、プログラミングと映画を観ること、美術館に行くことです。
他にも色々興味あるので教えてください!
普段は、プログラミングとセキュリティを勉強してます。
それ以外の分野も色々勉強をしています。
勉強方法はブログを書いています!どうぞよろしくお願いします。


まずは翻訳サービスを試してみます。
下記のようにコードを書きました!

import requests, uuid, json

def translate_text(text, target_language):
    # Azureのサブスクリプションキーとエンドポイントを設定します。
    subscription_key = "翻訳のAPIキー"
    endpoint = "翻訳のエンドポイント"

    # 翻訳するテキストとターゲット言語を設定します。
    body = [{'text': text}]

    params = {
        'api-version': '3.0',
        'to': target_language
    }

    # ヘッダーを設定します。
    headers = {
        'Ocp-Apim-Subscription-Key': subscription_key,
        'Ocp-Apim-Subscription-Region': '翻訳のリージョン情報',
        'Content-type': 'application/json',
        'X-ClientTraceId': str(uuid.uuid4())
    }

    # POSTリクエストを送信します。
    response = requests.post(
        endpoint + '/translate',
        params=params,
        headers=headers,
        json=body
    )

    # 翻訳結果を取得します。
    result = response.json()
    translated_text = result[0]['translations'][0]['text']

    return translated_text

text ="""こんにちは、私はケイタです。
    趣味は、プログラミングと映画を観ること、美術館に行くことです。
    他にも色々興味あるので教えてください!
    普段は、プログラミングとセキュリティを勉強してます。
    それ以外の分野も色々勉強をしています。
    勉強方法はブログを書いています!どうぞよろしくお願いします。
"""

print(translate_text(text, "en"))


出力は下記のようになります。


翻訳はできました!
次にこれを基にWAV形式の音声データを作成していきます。

先ほどの翻訳のコードに追記します!コードは下記です。

import azure.cognitiveservices.speech as speechsdk
import requests, uuid, json

#翻訳関数
def translate_text(text, target_language):
    # Azureのサブスクリプションキーとエンドポイントを設定します。
    subscription_key = "翻訳のAPIキー"
    endpoint = "翻訳のエンドポイント"

    # 翻訳するテキストとターゲット言語を設定します。
    body = [{'text': text}]

    params = {
        'api-version': '3.0',
        'to': target_language
    }

    # ヘッダーを設定します。
    headers = {
        'Ocp-Apim-Subscription-Key': subscription_key,
        'Ocp-Apim-Subscription-Region': '翻訳のリージョン情報',
        'Content-type': 'application/json',
        'X-ClientTraceId': str(uuid.uuid4())
    }

    # POSTリクエストを送信します。
    response = requests.post(
        endpoint + '/translate',
        params=params,
        headers=headers,
        json=body
    )

    # 翻訳結果を取得します。
    result = response.json()
    translated_text = result[0]['translations'][0]['text']

    return translated_text

#音声
def text_to_speech(text, output_filename):
    # Azureのサブスクリプションキーとリージョンを設定します。
    speech_key = "音声のAPIキー"
    service_region = "音声のリージョン"

    # SpeechConfigオブジェクトを作成します。
    speech_config = speechsdk.SpeechConfig(
        subscription=speech_key,
        region=service_region
    )

    # SpeechSynthesizerオブジェクトを作成します。
    speech_synthesizer = speechsdk.SpeechSynthesizer(
        speech_config=speech_config
    )

    # テキストを音声に変換します。
    result = speech_synthesizer.speak_text_async(text).get()

    # 結果をWAVファイルとして保存します。
    if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
        stream = speechsdk.AudioDataStream(result)
        stream.save_to_wav_file(output_filename)
    else:
        print(f"Speech synthesis failed: {result.error_details}\n")


text ="""こんにちは、私はケイタです。
    趣味は、プログラミングと映画を観ること、美術館に行くことです。
    他にも色々興味あるので教えてください!
    普段は、プログラミングとセキュリティを勉強してます。
    それ以外の分野も色々勉強をしています。
    勉強方法はブログを書いています!どうぞよろしくお願いします。
"""

print(translate_text(text, "en"))
text_to_speech(translate_text(text,"en"), "output.wav")


以下が出力の結果です。

まずはコンソールです


次に音声です。

音声をブログでは載せられないので下記で許してください!


これでシナリオ完了となりました。

紹介した機能は一例で、他にも面白い機能がたくさんあります!

まとめ


本記事では、Azureで翻訳と音声のサービスを使ってみました!

これらのサービスは結構ブラウザ上のサービスとしては存在してますが、APIとして使えると柔軟に動かすことができて楽しいですね!

ここまで読んでいただきありがとうございました。