Speech-to-Text は、Google Distributed Cloud(GDC)エアギャップ環境の 3 つの Vertex AI 事前トレーニング済み API の 1 つです。Speech-to-Text サービスは、音声ファイル内の音声を認識し、音声をテキストに変換します。Speech-to-Text は、データ所在地とコンプライアンスの要件を満たしています。
次の表に、Speech-to-Text の主な機能を示します。
| 主な機能 | |
|---|---|
| 音声文字変換 | 高度なディープ ラーニング ニューラル ネットワーク アルゴリズムを自動音声認識に適用します。 |
| モデル | サイズが 1 GB 未満で、リソースの消費量が最小限の認識モデルをデプロイします。 |
| API との互換性 | Speech-to-Text API とそのクライアント ライブラリを使用して、音声を送信し、Speech-to-Text サービスから音声文字変換されたテキストを受け取ります。 |
Speech-to-Text でサポートされている音声エンコード
Speech-to-Text API は、さまざまなエンコードをサポートしています。次の表に、サポートされているオーディオ コーデックをリスト表示します。
| コーデック | 名前 | ロスレス | 使用上の注意 |
|---|---|---|---|
FLAC |
Free Lossless Audio Codec | ○ | ストリームには 16 ビットまたは 24 ビットが必要 |
LINEAR16 |
Linear PCM | ○ | 16 ビット リニアパルス符号変調(PCM)エンコード。ヘッダーにはサンプリング レートを含める必要があります。 |
MULAW |
μ-law | × | 8 ビット PCM エンコード |
OGG_OPUS |
Ogg コンテナ内の Opus でエンコードされた音声フレーム | × | サンプルレートは 8,000 Hz、12,000 Hz、16,000 Hz、24,000 Hz、 または 48,000 Hz のいずれかにする必要があります |
FLAC は、オーディオ コーデックとオーディオ ファイル形式の両方です。FLAC エンコードを使用して音声
ファイルを文字変換するには、メタデータを含むヘッダーを含む .FLAC ファイル形式
で提供する必要があります。
Speech-to-Text は、LINEAR16 または MULAW でエンコードされた音声を含む WAV ファイルをサポートしています。
Speech-to-Text 音声コーデックの詳細については、
AudioEncoding
リファレンス ドキュメントをご覧ください。
ソース マテリアルのエンコード時に選択できる場合は、音声認識向上のために、FLAC や LINEAR16 などのロスレス エンコードを使用してください。
Speech-to-Text の機能
Distributed Cloud の Speech-to-Text には、音声認識を行う次の 3 つの方法があります。
同期認識: 音声データを Speech-to-Text API に送信して、 データの認識を行い、音声処理後に結果を返します。 同期認識リクエストは、1 分以内の音声データに制限されます。
非同期認識: 音声データを Speech-to-Text API に送信し、長時間実行オペレーションを開始します。このオペレーションを使用すると、認識結果を定期的にポーリングできます。 最長 480 分の音声データには、非同期リクエストを使用します。
ストリーミング認識: 双方向ストリーム内で提供された音声データの認識を行います。ストリーミング リクエストは、マイクからのライブ音声のキャプチャなどのリアルタイムの認識を目的として設計されています。 ストリーミング認識では、音声をキャプチャしながら暫定的な結果を生成して、結果を表示できます。たとえば、ユーザーがまだ話している間に結果を表示できます。
リクエストには、構成パラメータと音声データが含まれます。以下のセクションでは、これらの認識リクエスト、それらが生成するレスポンス、それらのレスポンスの処理方法について詳しく説明します。
同期リクエストとレスポンス
Speech-to-Text 同期認識リクエストは、スピーチ音声データに対して認識を行うための最も簡単な方法です。Speech-to-Text は、同期リクエストで送信された最大 1 分間のスピーチ音声データを処理できます。Speech-to-Text はすべての音声を処理して認識した後に、レスポンスを返します。
Speech-to-Text は、次のリクエストを処理する前にレスポンスを返す必要があります。 通常、Speech-to-Text はリアルタイムよりも速く音声を処理し、30 秒の音声を平均 15 秒で処理します。音質が低い場合、認識リクエストに時間がかかることがあります。
音声認識リクエスト
同期 Speech-to-Text API リクエストは、音声認識構成と音声データで構成されます。次の例はリクエストを示しています。
{
"config": {
"encoding": "LINEAR16",
"sample_rate_hertz": 16000,
"language_code": "en-US",
},
"audio": {
"content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
}
}
Speech-to-Text 同期認識リクエストのすべてに、RecognitionConfig 型の音声認識 config フィールドを含める必要があります。RecognitionConfig オブジェクトには、次の必須サブフィールドが含まれています。
encoding: 提供された音声のエンコード スキームを指定します。このフィールドはAudioEncoding型です。コーデックを選択する場合は、良好なパフォーマンスを得るために、FLACやLINEAR16などのロスレス エンコードをおすすめします。サポートされている音声エンコード形式の一覧については、 Speech-to-Text でサポートされている音声エンコードをご覧ください。encodingフィールドは、ファイル ヘッダーにエンコードが含まれているFLACファイルとWAVファイルでは省略可能です。sample_rate_hertz: 提供された音声のサンプルレートをヘルツ単位で指定します。 サンプルレートの詳細については、サンプルレートをご覧ください。sample_rate_hertzフィールドは、ファイル ヘッダーにサンプルレートが含まれているFLACファイルとWAVファイルでは省略可能です。language_code: 提供された音声の音声認識に使用する言語とリージョンが含まれます。言語コードは BCP-47 識別子である必要があります。言語コードは、言語を示す第一言語タグと、言語が話される国を表す第二リージョン サブタグで構成されます。この例では、enは英語、USは米国を表します。サポートされている言語の一覧については、サポートされている言語をご覧ください。
含めることができる省略可能なサブフィールドの詳細と説明については、
config フィールドをご覧ください。RecognitionConfig
音声は、audio パラメータを通して Speech-to-Text に渡されます。型は
RecognitionAudioです。
audio フィールドには、次のサブフィールドが含まれています。
content: リクエストに埋め込まれた評価対象の音声が含まれます。 音声データのバイトは、純粋なバイナリ表現を使用してエンコードされます。JSON 表現では Base64 が使用されます。詳細については、埋め込み音声コンテンツ をご覧ください。このフィールド内で直接渡される音声は、1 分間に制限されます。
サンプルレート
音声のサンプルレートはリクエスト構成の sample_rate_hertz フィールドで指定し、関連する音声コンテンツのサンプルレートと一致している必要があります。Speech-to-Text は、8,000 Hz から 48,000 Hz の間のサンプルレートをサポートしています。sample_rate_hertz フィールドを使用する代わりに、ファイル ヘッダーで FLAC ファイルまたは WAV ファイルのサンプルレートを指定できます。ただし、他のすべての音声形式では sample_rate_hertz フィールドが必要です。
ソース素材のエンコード時に選択できる場合は、16,000 Hz のサンプルレートを使用して音声をキャプチャします。これより低い値では、音声認識の精度が低下する可能性があり、レベルを高くしても音声認識品質に目立った効果はありません。
ただし、音声データを 16,000 Hz 以外のサンプルレートで録音した場合は、音声を 16,000 Hz で再サンプリングしないでください。たとえば、以前のほとんどの電話音声では 8,000 Hz のサンプルレートが使われており、正確な結果が生成されないことがあります。そのような音声を使用する必要がある場合は、元のサンプルレートで音声を Speech-to-Text API に渡します。
言語
Speech-to-Text の認識エンジンは、多様な言語をサポートしています。BCP-47
サポートされている言語のページ には、各機能でサポートされている言語の完全なリストが記載されています。
モデルの選択
Speech-to-Text に音声文字変換リクエストを送信すると、特定のソースタイプから音声認識を行うようにトレーニングされた機械学習モデルを使用して音声ファイルを処理できます。
音声認識のモデルを指定するには、リクエストの RecognitionConfig
オブジェクトに model フィールド
を含め、使用するモデルを指定します。
Distributed Cloud の Speech-to-Text は、次のモデルをサポートしています。
default: 長尺音声など、特定の音声モデルではない音声を文字変換します。
埋め込み音声コンテンツ
リクエストの audio フィールドに content パラメータを渡すとき、音声認識リクエストに埋め込み音声が含まれます。REST リクエスト内のコンテンツとして渡される埋め込み音声の場合、その音声は JSON のシリアル化との互換性が必要です。
音声データが 60 秒以下で 10 MB 以下の場合にのみ、同期認識の content フィールドでデータを直接送信できます。content フィールド内の音声データは Base64 形式である必要があります。
クライアント ライブラリを使用してリクエストを作成するとき、このバイナリデータまたは Base64 でエンコードされたデータを contentフィールドに直接書き出します。
ほとんどの開発環境には、バイナリを ASCII テキストデータにエンコードする base64 ユーティリティが用意されており、必要なツールとサポートが提供されます。
また、Python には Base64 エンコード コンテンツを組み込むメカニズムがあります。次の例は、ファイルをエンコードする方法を示しています。
Linux
base64 コマンドライン ツールを使用してファイルをエンコードします。-w 0 フラグを使用して、行の折り返しを防ぎます。
base64 INPUT_FILE -w 0 > OUTPUT_FILE
Python
Python では、次のように音声ファイルを Base64 エンコードします。
# Import the base64 encoding library.
import base64
# Pass the audio data to an encoding function.
def encode_audio(audio):
audio_content = audio.read()
return base64.b64encode(audio_content)
音声認識レスポンス
同期 Speech-to-Text API レスポンスは、結果を返すまでに時間がかかることがあります。処理が完了すると、API は次の例のようなレスポンスを返します。
{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}
]
}
]
}
Speech-to-Text API 同期認識レスポンスにはすべて、RecognizeResponse 型の音声認識結果が含まれます。RecognizeResponse オブジェクトには、次のフィールドが含まれています。
results:SpeechRecognitionResult型の結果のリストが含まれます。各結果は音声のセグメントに対応します。 各結果は、次の 1 つ以上のサブフィールドで構成されます。alternatives:SpeechRecognitionAlternative型の音声文字変換テキスト候補のリストが含まれます。レスポンスの最初の候補が常に最も可能性の高い候補です。各候補は、次のサブフィールドで構成されます。transcript: 文字変換されたテキストが含まれます。このような音声文字変換テキストが連続した変換候補とともに提供される場合、それらを連結できます。words: 認識された単語ごとに、単語固有の情報を含むリストが含まれます。
詳細については、RecognizeResponse をご覧ください。
非同期リクエストとレスポンス
非同期 Speech-to-Text API リクエストの形式は、 同期リクエストと同じです。ただし、非同期リクエストは、レスポンスを返す代わりに長時間実行オペレーションを開始して、このオペレーションをすぐに返します。非同期音声認識は、最長 480 分の音声で使用できます。
オペレーション レスポンスの例を次に示します。
{
"name": "OPERATION_NAME",
"metadata": {
"@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata"
"progressPercent": 34,
"startTime": "2016-08-30T23:26:29.579144Z",
"lastUpdateTime": "2016-08-30T23:26:29.826903Z"
}
}
結果はまだ表示されていません。Speech-to-Text は引き続き音声を処理し、このオペレーションを使用して結果を保存します。LongRunningRecognize リクエストが完了すると、返されるオペレーションの response フィールドに結果が表示されます。
リクエスト完了後の完全なレスポンスの例を次に示します。
{
"name": "1268386125834704889",
"metadata": {
"lastUpdateTime": "2016-08-31T00:16:32.169Z",
"@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata",
"startTime": "2016-08-31T00:16:29.539820Z",
"progressPercent": 100
}
"response": {
"@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
"results": [{
"alternatives": [{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}]}]
},
"done": True
}
done が True に設定され、オペレーションの response に
SpeechRecognitionResult 型の結果セットが格納されていることがわかります。この型は、同期認識リクエストによって返される型と同じです。
ストリーミングのリクエストとレスポンス
ストリーミング Speech-to-Text API 認識呼び出しは、双方向ストリーム内の音声をリアルタイムでキャプチャし、認識するために設計されています。アプリケーションは、リクエスト ストリームで音声を送信し、レスポンス ストリームでリアルタイムの中間認識結果と最終認識結果を受け取ることができます。中間結果は音声の断片に対する現時点の認識結果を示しますが、最終認識結果は、その音声の断片の最終的で最良の予測を示します。
ストリーミング認識リクエスト
構成と音声の両方を 1 つのリクエストで送信する同期呼び出しや非同期呼び出しと異なり、ストリーミング Speech-to-Text API の呼び出しでは複数のリクエストを送信する必要があります。最初の
StreamingRecognizeRequest
には、
StreamingRecognitionConfig型の構成を含める必要があります。
A StreamingRecognitionConfig は config フィールドで構成されます。このフィールドには
、
RecognitionConfig
型の音声の構成情報が含まれており、同期リクエストと非同期リクエストで示されているものと同じです。
ストリーミング認識レスポンス
ストリーミング音声認識の結果は、型
StreamingRecognizeResponseの一連のレスポンスを返します。
このようなレスポンスは次のフィールドから構成されます。
speech_event_type:SpeechEventType型のイベントが含まれます。 これらのイベントの値は、1 つの発言が完了したタイミングを示します。音声イベントは、ストリームのレスポンス内のマーカーとして機能します。results: 結果のリストが含まれます。これは、中間結果または最終 結果のいずれかです。StreamingRecognitionResult。resultsリストには、次のサブフィールドが含まれます。alternatives: 候補の音声文字変換リストが含まれます。is_final: このリスト エントリ内で取得された結果が中間結果か最終結果かを示します。result_end_time: 音声の先頭から相対的な、この結果の終了時点の時間オフセットを示します。