You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ja/6-consumer/lessons/1-speech-recognition/pi-speech-to-text.md

6.6 KiB

音声からテキストへ - Raspberry Pi

このレッスンのこの部分では、キャプチャした音声を音声サービスを使ってテキストに変換するコードを書きます。

音声を音声サービスに送信する

音声はREST APIを使用して音声サービスに送信できます。音声サービスを使用するには、まずアクセス トークンをリクエストし、そのトークンを使用してREST APIにアクセスします。これらのアクセス トークンは10分で期限切れになるため、コードは定期的にトークンをリクエストして、常に最新の状態を保つ必要があります。

タスク - アクセストークンを取得する

  1. Pi上でsmart-timerプロジェクトを開きます。

  2. play_audio関数を削除します。スマートタイマーがあなたの発言を繰り返す必要がないため、これはもう必要ありません。

  3. 次のインポートをapp.pyファイルの先頭に追加します:

    import requests
    
  4. 次のコードをwhile Trueループの上に追加して、音声サービスの設定を宣言します:

    speech_api_key = '<key>'
    location = '<location>'
    language = '<language>'
    

    <key>を音声サービスリソースのAPIキーに置き換えます。<location>を音声サービスリソースを作成したときに使用した場所に置き換えます。

    <language>を、話す言語のロケール名に置き換えます。例えば、英語の場合はen-GB、広東語の場合はzn-HKです。サポートされている言語とそのロケール名のリストは、Microsoft Docsの言語と音声サポートのドキュメントで確認できます。

  5. この下に、アクセストークンを取得するための次の関数を追加します:

    def get_access_token():
        headers = {
            'Ocp-Apim-Subscription-Key': speech_api_key
        }
    
        token_endpoint = f'https://{location}.api.cognitive.microsoft.com/sts/v1.0/issuetoken'
        response = requests.post(token_endpoint, headers=headers)
        return str(response.text)
    

    これはトークン発行エンドポイントを呼び出し、APIキーをヘッダーとして渡します。この呼び出しは、音声サービスを呼び出すために使用できるアクセストークンを返します。

  6. この下に、キャプチャした音声をREST APIを使用してテキストに変換する関数を宣言します

    def convert_speech_to_text(buffer):
    
  7. この関数内で、REST APIのURLとヘッダーを設定します

    url = f'https://{location}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1'
    
    headers = {
        'Authorization': 'Bearer ' + get_access_token(),
        'Content-Type': f'audio/wav; codecs=audio/pcm; samplerate={rate}',
        'Accept': 'application/json;text/xml'
    }
    
    params = {
        'language': language
    }
    

    これは、音声サービスリソースの場所を使用してURLを構築します。その後、get_access_token関数から取得したアクセストークン、音声をキャプチャする際に使用したサンプルレートをヘッダーに設定します。最後に、音声の言語を含むURLに渡すパラメータを定義します。

  8. この下に、REST APIを呼び出してテキストを取得する次のコードを追加します

    response = requests.post(url, headers=headers, params=params, data=buffer)
    response_json = response.json()
    
    if response_json['RecognitionStatus'] == 'Success':
        return response_json['DisplayText']
    else:
        return ''
    

    これはURLを呼び出し、レスポンスで返されるJSON値をデコードします。レスポンス内のRecognitionStatus値は、音声をテキストに正常に変換できたかどうかを示します。この値がSuccessの場合、関数からテキストが返されます。それ以外の場合は空の文字列が返されます。

  9. while True:ループの上に、音声からテキストサービスで返されたテキストを処理する関数を定義します。この関数は、現在のところテキストをコンソールに出力するだけです。

    def process_text(text):
        print(text)
    
  10. 最後に、while Trueループ内のplay_audioの呼び出しを、convert_speech_to_text関数の呼び出しに置き換え、テキストをprocess_text関数に渡します:

    text = convert_speech_to_text(buffer)
    process_text(text)
    
  11. コードを実行します。ボタンを押してマイクに向かって話します。話し終わったらボタンを離すと、音声がテキストに変換され、コンソールに出力されます。

    pi@raspberrypi:~/smart-timer $ python3 app.py 
    Hello world.
    Welcome to IoT for beginners.
    

    さまざまな種類の文や、同じ音でも異なる意味を持つ単語を含む文を試してみてください。例えば、英語で話している場合、「I want to buy two bananas and an apple too」と言ってみてください。文脈に基づいて「to」「two」「too」を正しく使い分ける様子を確認できます。

💁 このコードはcode-speech-to-text/piフォルダーにあります。

😀 音声からテキストへのプログラムが成功しました!

免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。