複数の長い音声ファイルを非同期で音声文字変換する

このページでは、1 個または複数の長い音声ファイルを非同期で音声文字変換する方法について説明します。Recognize では、音声の長さの上限が 1 分に設定されています。そのため、これよりも長いファイルには BatchRecognize を使用する必要があります。

一括音声認識google.longrunning.Operation を返します。これを使用して、ファイルの音声文字変換が完了したかどうかについてポーリングすることができます。変換された結果は、指定した Google Cloud Storage バケットに書き込まれます。

一括音声認識を実行する

Speech-to-Text が Google Cloud Storage 内のファイルにアクセスするには、Speech-to-Text 用のサービス アカウントを作成し、関連するストレージ オブジェクトへの読み取りアクセス権をそのアカウントに付与する必要があります。サービス アカウントを作成するには、Cloud Shell で次のコマンドを実行してアカウントを作成します(存在しない場合)。

BatchRecognizeRequest の構成

BatchRecognize は、指定された認識器を使用して認識を行います。したがって、必要な構成はデコード パラメータだけです。デコード パラメータは明示的に指定するか、または自動デコードを選択します。

BatchRecognize リクエストの例を次に示します。

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
    'config': {
      'autoDecodingConfig': {}
    },
    'files': [
      {
        'uri': "gs://my-audio-bucket/en-us/cheese.wav"
      }
    ],
    'recognitionOutputConfig': {
      'gcsOutputConfig': {
        'uri': "gs://my-transcripts-bucket/en-us"
      }
    }
}

リクエスト レベルのオーバーライド

認識器には、言語とモデルのほかに、認識パラメータのリストも含まれます(enable_automatic_punctuation など)。これらのパラメータはリクエストのレベルでオーバーライドできるため、必要な認識機能の組み合わせごとに異なる認識器を作成する必要はありません。

次のような認識器を作成したとします。

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers?recognizer_id=<RECOGNIZER-ID>
{
  'languageCodes': 'en-US',
  'model': 'latest_long',
  'config': {
    'features': {
      'enableAutomaticPunctuation': true
      'enableWordTimeOffsets': true
    }
  }
}

次のように、リクエストのレベルで機能をオーバーライドできます(各ファイルを認識するときに、オーバーライドした機能が適用されます)。

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
    'config': {
      'autoDecodingConfig': {}
      'features': {
        'enableAutomaticPunctuation': false
      }
    },
    'files': [
      {
        'uri': "gs://my-audio-bucket/en-us/cheese.wav"
      }
    ],
    'recognitionOutputConfig': {
      'gcsOutputConfig': {
        'uri': "gs://my-transcripts-bucket/en-us"
      }
    }
}

認識機能 enableWordTimeOffsets は、認識器のレベルで有効になっており、リクエストのレベルでは指定がないため、gs://my-audio-bucket/en-us/cheese.wav に対して非同期音声文字変換が実行される際には、この認識機能のみが有効になります。enableAutomaticPunctuation は、リクエストのレベルで false に指定されており、認識器のレベルで設定された元の値(true)はこれによってオーバーライドされるため、このリクエストでは句読点自動入力は行われません。

ファイルレベルのオーバーライド

ファイルのレベルでもまったく同じ理屈が適用されるため、ファイルごとに柔軟に認識機能を設定できます。たとえば、すべてのファイルで句読点自動入力を有効にする一方で、単語の時間オフセットについては特定のファイルのみで有効にすることができます。

たとえば、認識器を前述のように作成し、リクエストを以下のように指定できます。

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
  # This specifies that all files will use automatic decoding
  'config': {
    'autoDecodingConfig': {}
  },
  'files': [
    {
      'uri': "gs://my-audio-bucket/en-us/cheese1.wav"
      'config': {
        # This file will not include word time offsets.
        'features': {
          'enableAutomaticPunctuation': false
        }
      },
    },
    {
      'uri': "gs://my-audio-bucket/en-us/cheese2.wav"
      'config': {
        # This file will include word time offsets.
        'features': {
          'enableAutomaticPunctuation': true
        }
      },
    },
  ]
  'recognitionOutputConfig': {
    'gcsOutputConfig': {
      'uri': "gs://my-transcripts-bucket/en-us"
    }
  }
}

BatchRecognize のレスポンスの処理

BatchRecognize はレスポンスとして google.longrunning.Operation を返します。オペレーションをポーリングする方法については、オペレーションのページをご覧ください。

完了時に BatchRecognizeResponse が設定され、これにファイルごとの結果の情報が含まれます。結果は、音声文字変換の Cloud Storage URI、またはエラーの内容を示すエラー メッセージです。

レスポンスの JSON は次のようになります。

'response': {
  '@type': 'type.googleapis.com/google.cloud.speech.v2.BatchRecognizeResponse',
  'results': {
    # Input file name
    'gs://my-audio-bucket/audio/en-us/cheese.wav': {
      # Output (transcript) file name
      'uri': 'gs://my-transcripts-bucket/en-us/cheese_transcript_63d14a9d-0000-2c31-b9b4-c82add6c82a4.json'
    }
  }
}

BatchRecognize の音声文字変換ファイルの形式は、BatchRecognizeResults 型のオブジェクトです。