トラブルシューティング

Speech-to-Text の使用中に問題が発生した場合に役立つトラブルシューティング手順について説明します。

Speech-to-Text を認証できない

「アプリケーションのデフォルト認証情報」が利用できないことを示すエラー メッセージが表示される場合や、Speech-to-Text を呼び出すときに使用する API キーを取得する方法がわからない場合があります。

Speech-to-Text では認証にアプリケーションのデフォルト認証情報(ADC)を使用します。

ADC の認証情報は、Speech-to-Text API を呼び出すコンテキスト内で使用可能でなければなりません。たとえば、ターミナルで ADC を設定し、IDE のデバッガでコードを実行すると、コードの実行コンテキストが認証情報にアクセスできないことがあります。その場合、Speech-to-Text へのリクエストが失敗する可能性があります。

ADC に認証情報を指定する方法については、アプリケーションのデフォルト認証情報を設定するをご覧ください。

Speech-to-Text で空のレスポンスが返される

Speech-to-Text が空のレスポンスを返すことがある理由は複数あります。問題の原因は RecognitionConfig の場合も、音声自体の場合も考えられます。

RecognitionConfig のトラブルシューティング

RecognitionConfig オブジェクト(または StreamingRecognitionConfig)は Speech-to-Text 認識リクエストの一部です。音声文字変換を正しく実行するには、主に次の 2 つのフィールドを設定する必要があります。

  • 音声構成。
  • モデルと言語。

空のレスポンス(空の {} JSON レスポンスを受け取る場合など)の最も一般的な原因の一つは、音声メタデータに関する誤った情報が提供されることです。音声構成フィールドが正しく設定されていない場合、ほとんどのケースで音声文字変換が失敗し、認識モデルは空の結果を返します。

音声構成には、提供された音声のメタデータが含まれます。音声ファイルのメタデータは、FFMPEG の一部である ffprobe コマンドを使用して取得できます。

次の例では、ffprobe を使用して https://storage.googleapis.com/cloud-samples-tests/speech/commercial_mono.wav のメタデータを取得する方法を示します。

$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
  Duration: 00:00:35.75, bitrate: 128 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s

上述のコマンドにより、ファイルに以下のものが含まれていることを確認できます。

  • sample_rate_hertz: 8000
  • チャンネル: 1
  • LINEAR16 (s16) エンコード

この情報は RecognitionConfig で使用できます。

空のレスポンスが発生するその他のオーディオ関連の理由は、オーディオ エンコードに関連している可能性があります。他にも次のようなツールをお試しください。

  1. ファイルを再生し、出力を聴きます。音声がクリアで、話を理解できるか確認します。

    ファイルを再生するには、SoX(Sound eXchange)play コマンドを使用します。音声エンコード別の例を以下に示します。

    FLAC ファイルにはサンプルレート、エンコード タイプ、チャンネル数を示すヘッダーが含まれ、次のように再生できます。

    play audio.flac

    LINEAR16 ファイルにはヘッダーが含まれません。LINEAR16 ファイルを再生するには、サンプルレート、エンコード タイプ、チャンネル数を指定する必要があります。LINEAR16 のエンコードは 16 ビット、符号付き整数、リトル エンディアンにする必要があります。

    play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw

    MULAW ファイルにもヘッダーが含まれず、多くの場合に低いサンプルレートを使用します。

    play --channels=1 --rate=8000 --encoding=u-law audio.raw
  2. データの音声エンコードが、RecognitionConfig で送信したパラメータと一致していることを確認してください。たとえば、リクエストで "encoding":"FLAC""sampleRateHertz":16000 が指定されている場合、SoX play コマンドによって一覧表示される音声データ パラメータはそれらのパラメータと一致する必要があります。次のコマンドを実行します。

    play audio.flac

    次のように表示されます。

    Encoding: FLAC
    Channels: 1 @ 16-bit
    Sampleratehertz: 16000Hz
    

    SoX のリストに 16000Hz 以外の Sampleratehertz が示されている場合は、一致するように InitialRecognizeRequest"sampleRateHertz" を変更します。EncodingFLAC でない場合や Channels1 @ 16-bit でない場合は、このファイルを直接使用することはできず、互換性のあるエンコードに変換する必要があります(次の手順を参照)。

  3. 音声ファイルが FLAC エンコードではない場合、SoX を使用して FLAC に変換します。さらに、上記の手順を繰り返してファイルを再生し、エンコード、sampleRateHertz、チャンネルを確認します。さまざまな音声ファイル形式を FLAC エンコードに変換する例を以下に示します。

    sox audio.wav --channels=1 --bits=16 audio.flac
    sox audio.ogg --channels=1 --bits=16 audio.flac
    sox audio.au --channels=1 --bits=16 audio.flac
    sox audio.aiff --channels=1 --bits=16 audio.flac
    

    未加工ファイルを FLAC に変換するには、ファイルの音声エンコードを知る必要があります。たとえば、16,000 Hz のステレオ 16 ビット符号付きリトル エンディアンを FLAC に変換するには、次のように指定します。

    sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw --channels=1 --bits=16 audio.flac
    
  4. 提供されているサンプル音声ファイルを使用して、クイックスタートの例やサンプル アプリケーションのいずれかを実行します。この例が正常に動作したら、サンプル音声ファイルをご自身の音声ファイルに置き換えます。

モデルと言語の構成

高品質の音声文字変換の結果を得るには、モデルの選択が非常に重要になります。Speech-to-Text は、ユースケースに合わせて調整された複数のモデルを提供します。使用する音声に最も近いものを選択する必要があります。たとえば、一部のモデル(latest_shortcommand_and_search など)は短形式のモデルで、短い音声やプロンプトに適しています。これらのモデルは、無音期間が検出されるとすぐに結果を返す可能性があります。一方、長形式のモデル(latest_short, phone_call, video and default など)は、長い音声にも適しており、音声の終わりのような無音の解釈には適していません。

認識が突然終了したり、すぐに返されなかった場合は、他のモデルでテストを行い、音声文字変換の品質を改善できるかどうか確認することをおすすめします。Speech UI を使用して、複数のモデルを試すことができます。

音声認識からの予期しない結果

Speech-to-Text から返される結果が期待どおりではない場合は、次のようにします。