音声テキスト変換のキャプション付け

このガイドでは、音声テキスト変換でキャプションを作成する方法について説明します。 キャプション付けは、テレビ放送、Web キャスト、映画、ビデオ、ライブ イベントなどの作品に含まれるオーディオ コンテンツをテキストに変換し、スクリーンやモニターなどの視覚的ディスプレイ システムにそのテキストを表示するプロセスです。

概念には、キャプションを入力オーディオと同期する方法、不適切表現フィルターを適用する方法、部分的な結果を取得する方法、カスタマイズを適用する方法、多言語シナリオで音声言語を識別する方法などが含まれます。 このガイドでは、音声のキャプション付けについて説明しますが、話者 ID やベルの音などの効果音は含まれません。

キャプション付けの一般的なシナリオを次に示します。

  • オンライン コースと説明ビデオ
  • スポーツ イベント
  • 音声とビデオによる通話

キャプション付けを使う場合に考慮すべき面を次に示します。

  • キャプションが自動サービスによって生成されることを対象ユーザーに知らせます。
  • 画面の水平方向の中央に、大きく目立つフォントでキャプションを配置します。
  • 部分的な結果を使用するかどうか、キャプションの表示を開始するタイミング、一度に表示する語数を検討します。
  • SMPTE-TT などのキャプション プロトコルについて学習します。
  • SRT (SubRip Text) や WebVTT (Web Video Text Tracks) などの出力形式について検討します。 これらは、VLC などのほとんどのビデオ プレーヤーに読み込むことができ、ビデオにキャプションが自動的に追加されます。

ヒント

Speech Studio を試し、サンプル ビデオ クリップを選んで、リアルタイムまたはオフラインで処理されたキャプションの結果を確認してください。

アップロードするビデオのキャプションを取得する方法のデモンストレーションとして、Azure AI Video Indexer を試してください。

キャプション付けは、リアルタイムの音声でも、事前に録音された音声でも使用できます。 キャプションはリアルタイムで表示するか録音したものに表示するかにかかわらず、Speech SDK または Speech CLI が音声の認識と文字起こしに使用できます。 事前に録画されたビデオには、Batch 文字起こし API を使うこともできます。

キャプション出力の形式

音声サービスでは、SRT (SubRip Text) や WebVTT (Web Video Text Tracks) などの形式がサポートされています。 これらは、VLC などのほとんどのビデオ プレーヤーに読み込むことができ、ビデオにキャプションが自動的に追加されます。

ヒント

Azure Cognitive Service for Speech サービスには、不適切な単語フィルターのオプションが用意されています。 不適切な単語をマスク、削除、または表示するかどうかを指定できます。

SRT (SubRip Text) の期間の出力形式は hh:mm:ss,fff です。

1
00:00:00,180 --> 00:00:03,230
Welcome to applied Mathematics course 201.

WebVTT (Web Video Text Tracks) の期間の出力形式は hh:mm:ss.fff です。

WEBVTT

00:00:00.180 --> 00:00:03.230
Welcome to applied Mathematics course 201.
{
  "ResultId": "8e89437b4b9349088a933f8db4ccc263",
  "Duration": "00:00:03.0500000"
}

音声サービスにオーディオを入力する

リアルタイムのキャプション付けの場合は、ファイル入力の代わりにマイクまたはオーディオ入力ストリームを使います。 マイクから音声を認識する方法の例については、音声テキスト変換のクイックスタートに関するドキュメントと「音声を認識する方法」をご覧ください。 ストリーミングについて詳しくは、「音声入力ストリームの使用方法」をご覧ください。

事前記録のキャプション付けの場合は、音声サービスにファイル入力を送信します。 詳しくは、「圧縮された入力オーディオを使用する方法」をご覧ください。

キャプションと音声の同期

リアルタイムでも事前記録でも、キャプションとオーディオ トラックを同期させる必要があります。

Speech Service から、認識された音声のオフセットと経過時間が返されます。

  • オフセット: 認識中のオーディオ ストリームへのオフセット。経過時間として表されます。 オフセットは、SDK によって処理される最初のオーディオ バイトに関連付けられた、0 (ゼロ) ティックから始まるティック数で測定されます。 たとえば、認識を開始するとオフセットが始まります。これは、このタイミングで SDK がオーディオ ストリームの処理を開始するためです。 1 ティックは 100 ナノ秒または 1,000 万分の 1 秒を表します。
  • 経過時間: 認識中の発話の経過時間。 ティック数での経過時間に、末尾と先頭の無音は含まれません。

詳しくは、「音声認識の結果を取得する」をご覧ください。

部分的な結果を取得する

キャプションの表示を開始するタイミングと、一度に表示する単語数を検討します。 発話がまだ認識されている間に、音声認識の結果が変化する可能性があります。 部分的な結果は、それぞれの Recognizing イベントで返されます。 各単語が処理されると、音声サービスによって新しいコンテキストで発話が再評価され、最適な結果が返されます。 新しい結果が前の結果と同じであるとは限りません。 発話の完全で最終的な文字起こしは、Recognized イベントで返されます。

Note

部分的な結果の句読点は使用できません。

事前記録された音声のキャプション付けの場合、または待ち時間が問題にならない場合は、各発話の完全な文字起こしを待ってから、言葉を表示することができます。 発話での各単語の最終的なオフセットと継続時間が得られると、後続の単語をサウンドトラックに合わせて表示するタイミングがわかります。

リアルタイムのキャプション付けには、待ち時間と精度に関するトレードオフがあります。 各 Recognizing イベントのテキストを使うと、可能な限り早く表示することができます。 一方、ある程度の待ち時間を受け入れることができる場合は、Recognized イベントのテキストを表示することで、キャプションの精度を向上させることができます。 また、"安定した部分的な結果" と呼ばれる中間地点もあります。

返す Recognizing イベントの数を減らして正確さを上げるよう、音声サービスに要求できます。 これは、SpeechServiceResponse_StablePartialResultThreshold プロパティを 02147483647 の間の値に設定することによって行います。 設定する値は、音声サービスが Recognizing イベントを返す前に単語を認識する必要がある回数です。 たとえば、SpeechServiceResponse_StablePartialResultThreshold プロパティの値を 5 に設定すると、音声サービスは、単語を少なくとも 5 回認識してから、Recognizing イベントで部分的な結果を返します。

speechConfig.SetProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig->SetProperty(PropertyId::SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.SetProperty(common.SpeechServiceResponseStablePartialResultThreshold, 5)
speechConfig.setProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.setProperty(sdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
[self.speechConfig setPropertyTo:5 byId:SPXSpeechServiceResponseStablePartialResultThreshold];
self.speechConfig!.setPropertyTo(5, by: SPXPropertyId.speechServiceResponseStablePartialResultThreshold)
speech_config.set_property(property_id = speechsdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, value = 5)
spx recognize --file caption.this.mp4 --format any --property SpeechServiceResponse_StablePartialResultThreshold=5 --output vtt file - --output srt file -

より安定した部分的結果を要求すると、"揺らぎ" つまりテキストの変化は減りますが、信頼度の高い結果を待つ待機時間が長くなる可能性があります。

安定した部分的しきい値の例

安定した部分的しきい値を設定していない次の認識シーケンスでは、"math" が単語として認識されますが、最終的なテキストは "mathematics" です。 別のポイントで "course 2" が認識されていますが、最終的なテキストは "course 201" です。

RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied math
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZING: Text=welcome to applied mathematics course 2
RECOGNIZING: Text=welcome to applied mathematics course 201
RECOGNIZED: Text=Welcome to applied Mathematics course 201.

前の例では、文字起こしは付加的であり、テキストは取り消されませんでした。 ただし、部分的な結果が正確ではない場合もあります。 どちらの場合も、不安定な部分的結果は、表示時に "揺らぎ" と認識される可能性があります。

この例では、安定した部分的結果のしきい値を 5 に設定した場合、単語は変更または撤回されません。

RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZED: Text=Welcome to applied Mathematics course 201.

言語識別

オーディオの言語が変化する可能性がある場合は、継続的な言語識別を使用します。 言語識別は、サポートされている言語の一覧と照合する際に、オーディオで話されている言語を識別するために使用されます。 最大 10 個の候補言語を指定します。そのうちの少なくとが 1 つが、オーディオに含まれていることが予想されます。 音声サービスからは、オーディオで最も可能性の高い言語が返されます。

精度を向上させるためのカスタマイズ

フレーズ リストは、音声認識を開始する直前に提供する語句のリストです。 フレーズ リストにフレーズを追加すると、その重要性が増加するため、認識される可能性が高くなります。

フレーズの例を、以下に示します。

  • 名前
  • 地理的な場所
  • 同音異義語
  • 業界または組織に固有の単語または略語

状況によっては、カスタム モデルをトレーニングすることが、精度を高める最善の方法と考えられます。 たとえば、歯科矯正学の講義にキャプションを付ける場合は、対応するドメイン データでカスタム モデルをトレーニングできます。

次のステップ