音声を認識する方法
リファレンス ドキュメント | パッケージ (NuGet) | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
音声構成インスタンスを作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
- Azure portal で音声リソースを作成します。 Speech リソース キーとリージョンを取得します。
- 次のコードを使用して、
SpeechConfig
インスタンスを作成します。YourSpeechKey
とYourSpeechRegion
は、自分の音声リソース キーとリージョンに置き換えます。
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
}
}
SpeechConfig
は、その他いくつかの方法で初期化できます。
- エンドポイントを使用します。Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストを使用します。ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- リージョン/場所に関連付けられた認可トークンを使用します。
Note
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
マイクから音声を認識する
デバイス マイクを使用して音声を認識するには、FromDefaultMicrophoneInput()
メソッドを使用して AudioConfig
インスタンスを作成します。 次に、speechConfig
と audioConfig
を渡して SpeechRecognizer
オブジェクトを初期化します。
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromMic(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Console.WriteLine("Speak into your microphone.");
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromMic(speechConfig);
}
}
"特定の" オーディオ入力デバイスを使用したい場合、AudioConfig
でデバイス ID を指定する必要があります。 デバイス ID を取得する方法については、「Speech SDK を使用してオーディオ入力デバイスを選択する」を参照してください。
ファイルから音声を認識する
マイクではなくオーディオ ファイルから音声を認識する場合でも、AudioConfig
インスタンスを作成する必要があります。 ただし、FromDefaultMicrophoneInput()
は呼び出しません。 FromWavFileInput()
を呼び出してファイル パスを渡します。
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromFile(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromFile(speechConfig);
}
}
インメモリ ストリームから音声を認識する
多くのユース ケースでは、音声データはたいてい Azure Blob Storage から取得されるか、または、あらかじめメモリ内に byte[]
インスタンスや同様の生データ構造として存在します。 以下の例では、PushAudioInputStream
という、実質的に抽象化されたメモリ ストリームを使用して音声を認識します。 サンプル コードは、次のアクションを実行します。
byte[]
インスタンスを引数として受け取るWrite()
関数を使用して、生の音声データをPushAudioInputStream
に書き込みます。- デモンストレーションのために、
FileReader
を使用して .wav ファイルを読み取ります。 既にbyte[]
インスタンスに音声データが存在する場合は、スキップして、入力ストリームへのコンテンツの書き込みに進んでください。 - 既定の形式は、16 ビット、16 kHz のモノラル パルス符号変調 (PCM) データです。 この形式をカスタマイズしたい場合は、静的関数
AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels)
を使用して、CreatePushStream()
にAudioStreamFormat
オブジェクトを渡してください。
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromStream(SpeechConfig speechConfig)
{
var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
using var audioConfigStream = AudioInputStream.CreatePushStream();
using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
byte[] readBytes;
do
{
readBytes = reader.ReadBytes(1024);
audioConfigStream.Write(readBytes, readBytes.Length);
} while (readBytes.Length > 0);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromStream(speechConfig);
}
}
プッシュ ストリームを入力として使用する場合、音声データは生の PCM で、ヘッダーをスキップすることが前提となります。 ヘッダーがスキップされない場合でも、一部のケースでは、API が機能します。 最良の結果を得るためには、"音声データの開始" 位置から byte[]
が始まるよう、ヘッダーを除外して読み取るロジックを実装することを検討してください。
エラーの処理
これまでの例は、認識されたテキストを speechRecognitionResult.Text
プロパティから取得するだけのものでした。 エラーやその他の応答を処理するためには、結果を処理するためのコードを記述する必要があります。 以下のコードでは、speechRecognitionResult.Reason
プロパティを評価したうえで、次の処理を行っています。
- 認識結果を出力します:
ResultReason.RecognizedSpeech
。 - 認識が一致しない場合は、ユーザーに通知します:
ResultReason.NoMatch
。 - エラーが検出された場合は、エラー メッセージを出力します:
ResultReason.Canceled
。
switch (speechRecognitionResult.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(speechRecognitionResult);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
break;
}
継続的認識を使用する
これまでの例では、1 つの発話を認識する単発の認識を使用してきました。 1 つの発話の終わりは、終了時の無音状態をリッスンするか、最大 15 秒のオーディオが処理されるまで待機することによって決定されます。
一方、認識を停止するタイミングを制御したい場合は、継続的認識を使用します。 この場合は、認識結果を取得するために、Recognizing
、Recognized
、Canceled
の各イベントをサブスクライブする必要があります。 認識を停止するには、StopContinuousRecognitionAsync
を呼び出す必要があります。 オーディオ入力ファイルに対して継続的認識を実行する方法の例を次に示します。
まず、入力を定義し、SpeechRecognizer
を初期化します。
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
次に、音声認識の状態を管理する TaskCompletionSource<int>
インスタンスを作成します。
var stopRecognition = new TaskCompletionSource<int>();
次に、SpeechRecognizer
から送信されるイベントをサブスクライブします。
Recognizing
: 中間的な認識結果を含むイベントのシグナル。Recognized
: 認識の試行が成功したことを示す最終的な認識結果を含むイベントのシグナル。SessionStopped
: 認識セッション (操作) の終了を示すイベントのシグナル。Canceled
: キャンセルされた認識結果を含むイベントのシグナル。 これらの結果は、直接的なキャンセル要求の結果としてキャンセルされた認識試行を示します。 または、転送またはプロトコルのエラーを示します。
speechRecognizer.Recognizing += (s, e) =>
{
Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};
speechRecognizer.Recognized += (s, e) =>
{
if (e.Result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
}
else if (e.Result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.Canceled += (s, e) =>
{
Console.WriteLine($"CANCELED: Reason={e.Reason}");
if (e.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
stopRecognition.TrySetResult(0);
};
speechRecognizer.SessionStopped += (s, e) =>
{
Console.WriteLine("\n Session stopped event.");
stopRecognition.TrySetResult(0);
};
すべての設定が完了したら、StartContinuousRecognitionAsync
を呼び出して認識を開始します。
await speechRecognizer.StartContinuousRecognitionAsync();
// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });
// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();
ソース言語を変更する
音声認識の一般的なタスクは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コード内で、SpeechConfig
インスタンスを見つけて、そのすぐ下にこの行を追加します。
speechConfig.SpeechRecognitionLanguage = "it-IT";
SpeechRecognitionLanguage
プロパティには、言語ロケールの書式指定文字列が必要です。 サポートされるロケールの一覧については、「音声サービスの言語と音声のサポート」を参照してください。
言語識別
オーディオ ソース内の言語を識別し、それをテキストに文字起こしする必要があるときに、音声テキスト変換認識の言語識別を使用できます。
完全なコード サンプルについては、言語識別に関するページを参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
無音の処理方法を変更する
ユーザーが通常よりも速く、または遅く話す場合、入力オーディオで話がされていない無音状態に対する既定の動作では、想定した結果が得られない可能性があります。 無音処理に関する一般的な問題には次のものがあります。
- 複数の文を個別の結果に分割できず、多数の文が 1 つの認識結果に連結されてしまう速い話し方。
- 1 つの文が複数の結果に分割されてしまう遅い話し方。
- 発話が始まるのを待っているときに、あまりにも早く終了してしまう 1 つの発話の認識。
これらの問題は、SpeechRecognizer
を作成するために使用される SpeechConfig
インスタンスの次の 2 つの "タイムアウト プロパティ" のいずれかを設定することで対処できる可能性があります。
- セグメント化の無音タイムアウトでは、そのフレーズが "完了" と見なされるまでに現在話されているフレーズ内で許可される無音声のオーディオの量を調整します。
- 一般的に、値が "大きいほど" 結果が長くなり、話者のフレーズ内の一時停止がより長く許容されますが、結果が到着するまでに時間がかかります。 また、設定が大きすぎると、個別のフレーズが 1 つの結果にまとめられる可能性があります。
- 値を "小さく" すると、一般的に結果が短くなり、フレーズ間でより多くのプロンプトと頻繁な区切りが確保されますが、設定を小さくしすぎると単一のフレーズが複数の結果に分割される可能性もあります。
- このタイムアウトは、100 から 5000 の整数値 (ミリ秒単位) に設定でき、一般的な既定値は 500 です。
- 初期無音タイムアウトでは、認識試行が "一致なし" の結果で終了する前に、フレーズの "前に" 許容される無音声のオーディオの量を調整します。
- 値が "大きいほど"、話者が反応して話し始めるまでの時間が長くなりますが、何も話されないときの応答性が低下する可能性もあります。
- 値を "小さく" すると、"一致なし" の認識が迅速になって、より高速なユーザー エクスペリエンスとより制御されたオーディオ処理が行われますが、設定を小さくしすぎると発話者を待たないで打ち切ってしまう可能性があります。
- 継続的な認識では多くの結果が生成されるため、この値によって "一致なし" となる結果が生じる頻度が決定しますが、それ以外の認識結果の内容には影響しません。
- このタイムアウトは、負でない整数値 (ミリ秒単位) に設定するか、完全に無効にするために 0 に設定できます。 単発認識の一般的な既定値は 5000、継続的認識の一般的な既定値は 15000 です。
これらのタイムアウトを変更する際にはトレードオフがあるため、設定を変更するのは、無音処理に関連する問題が発生した場合にのみにする必要があります。 既定値はほとんどの発話音声を最適に処理します。問題が発生するのは、一般的でないシナリオでのみです。
例: "ABC-123-4567" のようなシリアル番号を話しているユーザーは、シリアル番号が複数の結果に分割されるのに十分な長さの一時停止を文字グループ間に入れることがあります。 この場合、セグメント化の無音タイムアウトを 2,000 ミリ秒のような大きい値にしてみてください。
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");
例: 記録された発表者の話し方が速く、複数の連続した文が結合され、1 分あたり 1 回や 2 回の大きな認識結果のみとなることがあります。 この場合、セグメント化の無音タイムアウトを 300 ミリ秒のような小さい値に設定します。
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");
例: シリアル番号を見つけて読み上げるよう話者に求めるような 1 つの発話の認識が、番号を見つけている間に終わってしまう場合があります。 この場合、10,000 ミリ秒のような長い初期無音タイムアウトを設定してみてください。
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");
セマンティック セグメンテーション
セマンティック セグメント化は、無音ベースのセグメント化に関連する問題を軽減するために設計された、音声認識セグメント化戦略です。
- セグメント化の不足: ユーザーが休むことなく長時間話した場合、途切れ目がない長いテキスト シーケンス ("テキストの壁") が表示されることがあり、これは読み取りのエクスペリエンスを大幅に低下させます。
- 過剰なセグメント化: ユーザーの休止時間が短い場合、無音検出メカニズムが誤ったセグメント化を行う可能性があります。
セマンティック セグメントは、無音タイムアウトに依存するのではなく、文末句読点 ('。' や '?' など) を検出したときに最終的な結果を返します。 これが、ユーザー エクスペリエンスをより高い品質と意味的に完全なセグメントにより向上するとともに、中間的な結果が長くなるのを防ぎます。
セマンティック セグメント化を使用するには、SpeechRecognizer
の作成で使用する SpeechConfig
インスタンスにおいて、次のプロパティを設定する必要があります。
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
セマンティック セグメント化の制限事項の一部を次に示します。
- セマンティック セグメント化を使用するには、Speech SDK バージョン 1.41 以降が必要です。
- セマンティック セグメント化は、継続的な認識でのみ使用することを目的としています。 これには、文字起こしやキャプションなどのシナリオが含まれます。 単一の認識モードとディクテーション モードでは使用しないでください。
- セマンティック セグメント化は、すべての言語とロケールで使用できるわけではありません。 現在、セマンティック セグメント化が使用できるのは、英語 (en) ロケール (en-US、en-GB、en-IN、en-AU など) でのみです。
- セマンティック セグメント化では、信頼度スコアと NBest リストはまだサポートされていません。 そのため、信頼度スコアまたは NBest リストを使用している場合は、セマンティック セグメント化はお勧めしません。
リファレンス ドキュメント | パッケージ (NuGet) | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
音声構成インスタンスを作成する
Speech SDK を使用して音声サービスを呼び出すには、SpeechConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
- Azure portal で音声リソースを作成します。 Speech リソース キーとリージョンを取得します。
- 次のコードを使用して、
SpeechConfig
インスタンスを作成します。YourSpeechKey
とYourSpeechRegion
は、自分の音声リソース キーとリージョンに置き換えます。
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");
SpeechConfig
は、その他いくつかの方法で初期化できます。
- エンドポイントを使用します。Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストを使用します。ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- リージョン/場所に関連付けられた認可トークンを使用します。
Note
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
マイクから音声を認識する
デバイス マイクを使用して音声を認識するには、FromDefaultMicrophoneInput()
メンバー関数を使用して AudioConfig
インスタンスを作成します。 次に、audioConfig
と config
を渡して SpeechRecognizer
オブジェクトを初期化します。
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
"特定の" オーディオ入力デバイスを使用したい場合、AudioConfig
でデバイス ID を指定する必要があります。 デバイス ID を取得する方法については、「Speech SDK を使用してオーディオ入力デバイスを選択する」を参照してください。
ファイルから音声を認識する
マイクを使用するのでなくオーディオ ファイルから音声を認識する場合でも、AudioConfig
インスタンスを作成する必要があります。 ただし、FromDefaultMicrophoneInput()
は呼び出しません。 FromWavFileInput()
を呼び出してファイル パスを渡します。
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
Recognizer クラスを使用して音声を認識する
Speech SDK for C++ 用の 認識エンジン では、音声認識に使用できるいくつかの手法が公開されています。
単発の認識
単発の認識では、1 つの発話が非同期的に認識されます。 1 つの発話の終わりは、終了時の無音状態をリッスンするか、最大 15 秒のオーディオが処理されるまで待機することによって決定されます。 RecognizeOnceAsync
を介した非同期の単発認識の例を次に示します。
auto result = speechRecognizer->RecognizeOnceAsync().get();
結果を処理するコードを記述する必要があります。 このサンプルでは、result->Reason
を評価します。
- 認識結果を出力します:
ResultReason::RecognizedSpeech
。 - 認識が一致しない場合は、ユーザーに通知します:
ResultReason::NoMatch
。 - エラーが検出された場合は、エラー メッセージを出力します:
ResultReason::Canceled
。
switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
cout << "We recognized: " << result->Text << std::endl;
break;
case ResultReason::NoMatch:
cout << "NOMATCH: Speech could not be recognized." << std::endl;
break;
case ResultReason::Canceled:
{
auto cancellation = CancellationDetails::FromResult(result);
cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
if (cancellation->Reason == CancellationReason::Error) {
cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
}
}
break;
default:
break;
}
継続的認識
継続的認識は、単発の認識よりも少し複雑です。 この場合は、認識結果を取得するために、Recognizing
、Recognized
、Canceled
の各イベントをサブスクライブする必要があります。 認識を停止するには、StopContinuousRecognitionAsync を呼び出す必要があります。 オーディオ入力ファイルに対して実行される継続的認識の例を次に示します。
まず、入力を定義し、SpeechRecognizer
を初期化します。
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
次に、音声認識の状態を管理する変数を作成します。 認識の開始時は当然、完了していないと考えられるので、promise<void>
を宣言します。
promise<void> recognitionEnd;
次に、SpeechRecognizer
から送信されるイベントをサブスクライブします。
Recognizing
: 中間的な認識結果を含むイベントのシグナル。Recognized
: 認識の試行が成功したことを示す最終的な認識結果を含むイベントのシグナル。SessionStopped
: 認識セッション (操作) の終了を示すイベントのシグナル。Canceled
: キャンセルされた認識結果を含むイベントのシグナル。 これらの結果は、直接的なキャンセル要求の結果としてキャンセルされた認識試行を示します。 または、転送またはプロトコルのエラーを示します。
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
{
cout << "Recognizing:" << e.Result->Text << std::endl;
});
speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
{
if (e.Result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << e.Result->Text
<< " (text could not be translated)" << std::endl;
}
else if (e.Result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
});
speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
{
cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
if (e.Reason == CancellationReason::Error)
{
cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
<< "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
<< "CANCELED: Did you set the speech resource key and region values?" << std::endl;
recognitionEnd.set_value(); // Notify to stop recognition.
}
});
speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
{
cout << "Session stopped.";
recognitionEnd.set_value(); // Notify to stop recognition.
});
すべての設定が完了したら、StartContinuousRecognitionAsync
を呼び出して認識を開始します。
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();
// Waits for recognition end.
recognitionEnd.get_future().get();
// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();
ソース言語を変更する
音声認識の一般的なタスクは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をドイツ語に変更する方法を示しています。 コード内で、SpeechConfig
インスタンスを見つけて、そのすぐ下にこの行を追加します。
speechConfig->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage
は、引数として文字列を取るパラメーターです。 サポートされるロケールの一覧については、「音声サービスの言語と音声のサポート」を参照してください。
言語識別
オーディオ ソース内の言語を識別し、それをテキストに文字起こしする必要があるときに、音声テキスト変換認識の言語識別を使用できます。
完全なコード サンプルについては、言語識別に関するページを参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
セマンティック セグメンテーション
セマンティック セグメント化は、無音ベースのセグメント化に関連する問題を軽減するために設計された、音声認識セグメント化戦略です。
- セグメント化の不足: ユーザーが休むことなく長時間話した場合、途切れ目がない長いテキスト シーケンス ("テキストの壁") が表示されることがあり、これは読み取りのエクスペリエンスを大幅に低下させます。
- 過剰なセグメント化: ユーザーの休止時間が短い場合、無音検出メカニズムが誤ったセグメント化を行う可能性があります。
セマンティック セグメントは、無音タイムアウトに依存するのではなく、文末句読点 ('。' や '?' など) を検出したときに最終的な結果を返します。 これが、ユーザー エクスペリエンスをより高い品質と意味的に完全なセグメントにより向上するとともに、中間的な結果が長くなるのを防ぎます。
セマンティック セグメント化を使用するには、SpeechRecognizer
の作成で使用する SpeechConfig
インスタンスにおいて、次のプロパティを設定する必要があります。
speechConfig->SetProperty(PropertyId::Speech_SegmentationStrategy, "Semantic");
セマンティック セグメント化の制限事項の一部を次に示します。
- セマンティック セグメント化を使用するには、Speech SDK バージョン 1.41 以降が必要です。
- セマンティック セグメント化は、継続的な認識でのみ使用することを目的としています。 これには、文字起こしやキャプションなどのシナリオが含まれます。 単一の認識モードとディクテーション モードでは使用しないでください。
- セマンティック セグメント化は、すべての言語とロケールで使用できるわけではありません。 現在、セマンティック セグメント化が使用できるのは、英語 (en) ロケール (en-US、en-GB、en-IN、en-AU など) でのみです。
- セマンティック セグメント化では、信頼度スコアと NBest リストはまだサポートされていません。 そのため、信頼度スコアまたは NBest リストを使用している場合は、セマンティック セグメント化はお勧めしません。
リファレンス ドキュメント | パッケージ (Go) | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
マイクからの音声を認識してテキストに変換する
- Azure portal で音声リソースを作成します。 Speech リソース キーとリージョンを取得します。
- 既定のデバイスのマイクから音声認識を実行するには、以下のコード サンプルを使用します。
YourSpeechKey
とYourSpeechRegion
は、自分の音声リソース キーとリージョンに置き換えます。 スクリプトを実行すると、既定のマイクで認識セッションが開始されてテキストが出力されます。
package main
import (
"bufio"
"fmt"
"os"
"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)
func sessionStartedHandler(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Started (ID=", event.SessionID, ")")
}
func sessionStoppedHandler(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}
func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
defer event.Close()
fmt.Println("Recognizing:", event.Result.Text)
}
func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
defer event.Close()
fmt.Println("Recognized:", event.Result.Text)
}
func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
defer event.Close()
fmt.Println("Received a cancellation: ", event.ErrorDetails)
fmt.Println("Did you set the speech resource key and region values?")
}
func main() {
subscription := "YourSpeechKey"
region := "YourSpeechRegion"
audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer audioConfig.Close()
config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer config.Close()
speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer speechRecognizer.Close()
speechRecognizer.SessionStarted(sessionStartedHandler)
speechRecognizer.SessionStopped(sessionStoppedHandler)
speechRecognizer.Recognizing(recognizingHandler)
speechRecognizer.Recognized(recognizedHandler)
speechRecognizer.Canceled(cancelledHandler)
speechRecognizer.StartContinuousRecognitionAsync()
defer speechRecognizer.StopContinuousRecognitionAsync()
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
次のコマンドを実行して、GitHub でホストされているコンポーネントにリンクする go.mod ファイルを作成します。
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
ここでコードをビルドして実行します。
go build
go run quickstart
詳細については、SpeechConfig
クラスと SpeechRecognizer
クラスのリファレンス コンテンツを参照してください。
オーディオ ファイルからの音声を認識してテキストに変換する
オーディオ ファイルから音声認識を実行するには、以下のサンプルを使用します。 YourSpeechKey
と YourSpeechRegion
は、自分の音声リソース キーとリージョンに置き換えます。 加えて、変数 file
を .wav ファイルのパスに置き換えます。 スクリプトを実行すると、ファイルから音声が認識され、テキスト結果が出力されます。
package main
import (
"fmt"
"time"
"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)
func main() {
subscription := "YourSpeechKey"
region := "YourSpeechRegion"
file := "path/to/file.wav"
audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer audioConfig.Close()
config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer config.Close()
speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
if err != nil {
fmt.Println("Got an error: ", err)
return
}
defer speechRecognizer.Close()
speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Started (ID=", event.SessionID, ")")
})
speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
defer event.Close()
fmt.Println("Session Stopped (ID=", event.SessionID, ")")
})
task := speechRecognizer.RecognizeOnceAsync()
var outcome speech.SpeechRecognitionOutcome
select {
case outcome = <-task:
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
return
}
defer outcome.Close()
if outcome.Error != nil {
fmt.Println("Got an error: ", outcome.Error)
}
fmt.Println("Got a recognition!")
fmt.Println(outcome.Result.Text)
}
次のコマンドを実行して、GitHub でホストされているコンポーネントにリンクする go.mod ファイルを作成します。
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
ここでコードをビルドして実行します。
go build
go run quickstart
詳細については、SpeechConfig
クラスと SpeechRecognizer
クラスのリファレンス コンテンツを参照してください。
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
リファレンス ドキュメント | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
音声構成インスタンスを作成する
Speech SDK を使用して音声サービスを呼び出すには、SpeechConfig インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
- Azure portal で音声リソースを作成します。 Speech リソース キーとリージョンを取得します。
- 自分の音声キーとリージョンを使用して
SpeechConfig
インスタンスを作成します。
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
}
}
SpeechConfig
は、その他いくつかの方法で初期化できます。
- エンドポイントを使用します。Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストを使用します。ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- リージョン/場所に関連付けられた認可トークンを使用します。
Note
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
マイクから音声を認識する
デバイス マイクを使用して音声を認識するには、fromDefaultMicrophoneInput()
メソッドを使用して AudioConfig
インスタンスを作成します。 次に、audioConfig
と config
を渡して SpeechRecognizer
オブジェクトを初期化します。
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromMic(speechConfig);
}
public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
System.out.println("Speak into your microphone.");
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
"特定の" オーディオ入力デバイスを使用したい場合、AudioConfig
でデバイス ID を指定する必要があります。 デバイス ID を取得する方法については、「Speech SDK を使用してオーディオ入力デバイスを選択する」を参照してください。
ファイルから音声を認識する
マイクを使用するのでなくオーディオ ファイルから音声を認識する場合でも、AudioConfig
インスタンスを作成する必要があります。 ただし、FromDefaultMicrophoneInput()
は呼び出しません。 fromWavFileInput()
を呼び出してファイル パスを渡します。
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromFile(speechConfig);
}
public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
エラーの処理
これまでの例は、認識されたテキストを speechRecognitionResult.getText()
を使用して取得するだけのものでした。 エラーやその他の応答を処理するためには、結果を処理するためのコードを記述する必要があります。 次の例では、speechRecognitionResult.getReason()
を評価し、
- 認識結果を出力します:
ResultReason.RecognizedSpeech
。 - 認識が一致しない場合は、ユーザーに通知します:
ResultReason.NoMatch
。 - エラーが検出された場合は、エラー メッセージを出力します:
ResultReason.Canceled
。
switch (speechRecognitionResult.getReason()) {
case ResultReason.RecognizedSpeech:
System.out.println("We recognized: " + speechRecognitionResult.getText());
exitCode = 0;
break;
case ResultReason.NoMatch:
System.out.println("NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled: {
CancellationDetails cancellation = CancellationDetails.fromResult(speechRecognitionResult);
System.out.println("CANCELED: Reason=" + cancellation.getReason());
if (cancellation.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
}
break;
}
継続的認識を使用する
これまでの例では、1 つの発話を認識する単発の認識を使用してきました。 1 つの発話の終わりは、終了時の無音状態をリッスンするか、最大 15 秒のオーディオが処理されるまで待機することによって決定されます。
一方、認識を停止するタイミングを制御したい場合は、継続的認識を使用します。 この場合は、認識結果を取得するために、recognizing
、recognized
、canceled
の各イベントをサブスクライブする必要があります。 認識を停止するには、stopContinuousRecognitionAsync
を呼び出す必要があります。 オーディオ入力ファイルに対して継続的認識を実行する方法の例を次に示します。
まず、入力を定義し、SpeechRecognizer
を初期化します。
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);
次に、音声認識の状態を管理する変数を作成します。 クラス スコープで Semaphore
インスタンスを宣言します。
private static Semaphore stopTranslationWithFileSemaphore;
次に、SpeechRecognizer
から送信されるイベントをサブスクライブします。
recognizing
: 中間的な認識結果を含むイベントのシグナル。recognized
: 認識の試行が成功したことを示す最終的な認識結果を含むイベントのシグナル。sessionStopped
: 認識セッション (操作) の終了を示すイベントのシグナル。canceled
: キャンセルされた認識結果を含むイベントのシグナル。 これらの結果は、直接的なキャンセル要求の結果としてキャンセルされた認識試行を示します。 または、転送またはプロトコルのエラーを示します。
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);
speechRecognizer.recognizing.addEventListener((s, e) -> {
System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});
speechRecognizer.recognized.addEventListener((s, e) -> {
if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
}
else if (e.getResult().getReason() == ResultReason.NoMatch) {
System.out.println("NOMATCH: Speech could not be recognized.");
}
});
speechRecognizer.canceled.addEventListener((s, e) -> {
System.out.println("CANCELED: Reason=" + e.getReason());
if (e.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
stopTranslationWithFileSemaphore.release();
});
speechRecognizer.sessionStopped.addEventListener((s, e) -> {
System.out.println("\n Session stopped event.");
stopTranslationWithFileSemaphore.release();
});
すべての設定が完了したら、startContinuousRecognitionAsync
を呼び出して認識を開始します。
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();
ソース言語を変更する
音声認識の一般的なタスクは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をフランス語に変更する方法を示しています。 コード内で、SpeechConfig
インスタンスを見つけて、そのすぐ下にこの行を追加します。
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage
は、引数として文字列を取るパラメーターです。 「サポートされている音声テキスト変換ロケールのリスト」を参照してください。
言語識別
オーディオ ソース内の言語を識別し、それをテキストに文字起こしする必要があるときに、音声テキスト変換認識の言語識別を使用できます。
完全なコード サンプルについては、言語識別に関するページを参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
セマンティック セグメンテーション
セマンティック セグメント化は、無音ベースのセグメント化に関連する問題を軽減するために設計された、音声認識セグメント化戦略です。
- セグメント化の不足: ユーザーが休むことなく長時間話した場合、途切れ目がない長いテキスト シーケンス ("テキストの壁") が表示されることがあり、これは読み取りのエクスペリエンスを大幅に低下させます。
- 過剰なセグメント化: ユーザーの休止時間が短い場合、無音検出メカニズムが誤ったセグメント化を行う可能性があります。
セマンティック セグメントは、無音タイムアウトに依存するのではなく、文末句読点 ('。' や '?' など) を検出したときに最終的な結果を返します。 これが、ユーザー エクスペリエンスをより高い品質と意味的に完全なセグメントにより向上するとともに、中間的な結果が長くなるのを防ぎます。
セマンティック セグメント化を使用するには、SpeechRecognizer
の作成で使用する SpeechConfig
インスタンスにおいて、次のプロパティを設定する必要があります。
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
セマンティック セグメント化の制限事項の一部を次に示します。
- セマンティック セグメント化を使用するには、Speech SDK バージョン 1.41 以降が必要です。
- セマンティック セグメント化は、継続的な認識でのみ使用することを目的としています。 これには、文字起こしやキャプションなどのシナリオが含まれます。 単一の認識モードとディクテーション モードでは使用しないでください。
- セマンティック セグメント化は、すべての言語とロケールで使用できるわけではありません。 現在、セマンティック セグメント化が使用できるのは、英語 (en) ロケール (en-US、en-GB、en-IN、en-AU など) でのみです。
- セマンティック セグメント化では、信頼度スコアと NBest リストはまだサポートされていません。 そのため、信頼度スコアまたは NBest リストを使用している場合は、セマンティック セグメント化はお勧めしません。
リファレンスドキュメント | パッケージ (npm) | GitHub 上のその他のサンプル | ライブラリのソース コード
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
音声構成インスタンスを作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
- Azure portal で音声リソースを作成します。 Speech リソース キーとリージョンを取得します。
- 次のコードを使用して、
SpeechConfig
インスタンスを作成します。YourSpeechKey
とYourSpeechRegion
は、自分の音声リソース キーとリージョンに置き換えます。
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
SpeechConfig
は、その他いくつかの方法で初期化できます。
- エンドポイントを使用します。Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストを使用します。ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- リージョン/場所に関連付けられた認可トークンを使用します。
Note
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
マイクから音声を認識する
マイクからの音声認識は、Node.js ではサポートされていません これがサポートされているのは、ブラウザー ベースの JavaScript 環境内のみです。 詳細については、GitHub で、React のサンプルとマイクからの音声変換の実装に関するページを参照してください。 React サンプルには、認証トークンの交換と管理のための設計パターンが示されています。 音声テキスト変換のための、マイクまたはファイルからのオーディオのキャプチャについても示されています。
Note
"特定の" オーディオ入力デバイスを使用したい場合、AudioConfig
でデバイス ID を指定する必要があります。 デバイス ID を取得する方法については、「Speech SDK を使用してオーディオ入力デバイスを選択する」を参照してください。
ファイルから音声を認識する
オーディオ ファイルから音声を認識するには、Buffer
オブジェクトを受け取る fromWavFileInput()
メソッドを使用して AudioConfig
インスタンスを作成します。 次に、audioConfig
と speechConfig
を渡して SpeechRecognizer
を初期化します。
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromFile() {
let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromFile();
インメモリ ストリームから音声を認識する
多くのユース ケースでは、音声データはたいてい Azure Blob Storage から取得されます。 または、あらかじめメモリ内に ArrayBuffer
や同様の生データ構造として存在します。 コード例を次に示します。
createPushStream()
を使用してプッシュ ストリームを作成します。- デモンストレーションのために、
fs.createReadStream
を使用して .wav ファイルを読み取ります。 既にArrayBuffer
に音声データが存在する場合は、スキップして、入力ストリームへのコンテンツの書き込みに進んでください。 - プッシュ ストリームを使用してオーディオ構成を作成します。
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromStream() {
let pushStream = sdk.AudioInputStream.createPushStream();
fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
pushStream.write(arrayBuffer.slice());
}).on('end', function() {
pushStream.close();
});
let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromStream();
プッシュ ストリームを入力として使用する場合、音声データは、ヘッダーをスキップした生のパルス符号変調 (PCM) データであることが前提となります。 ヘッダーがスキップされない場合でも、一部のケースでは、API が機能します。 最良の結果を得るためには、"音声データの開始" 位置から fs
が始まるよう、ヘッダーを除外して読み取るロジックを実装することを検討してください。
エラーの処理
これまでの例は、認識されたテキストを result.text
プロパティから取得するだけのものでした。 エラーやその他の応答を処理するためには、結果を処理するためのコードを記述する必要があります。 以下のコードでは、result.reason
プロパティを評価したうえで、次の処理を行っています。
- 認識結果を出力します:
ResultReason.RecognizedSpeech
。 - 認識が一致しない場合は、ユーザーに通知します:
ResultReason.NoMatch
。 - エラーが検出された場合は、エラー メッセージを出力します:
ResultReason.Canceled
。
switch (result.reason) {
case sdk.ResultReason.RecognizedSpeech:
console.log(`RECOGNIZED: Text=${result.text}`);
break;
case sdk.ResultReason.NoMatch:
console.log("NOMATCH: Speech could not be recognized.");
break;
case sdk.ResultReason.Canceled:
const cancellation = sdk.CancellationDetails.fromResult(result);
console.log(`CANCELED: Reason=${cancellation.reason}`);
if (cancellation.reason == sdk.CancellationReason.Error) {
console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
break;
}
継続的認識を使用する
これまでの例では、1 つの発話を認識する単発の認識を使用してきました。 1 つの発話の終わりは、終了時の無音状態をリッスンするか、最大 15 秒のオーディオが処理されるまで待機することによって決定されます。
一方、認識を停止するタイミングを制御したい場合は、継続的認識を使用できます。 この場合は、認識結果を取得するために、Recognizing
、Recognized
、Canceled
の各イベントをサブスクライブする必要があります。 認識を停止するには、[stopContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync) を呼び出す必要があります。 オーディオ入力ファイルに対して継続的認識を実行する方法の例を次に示します。
まず、入力を定義し、SpeechRecognizer
を初期化します。
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
次に、SpeechRecognizer
から送信されたイベントをサブスクライブします。
recognizing
: 中間的な認識結果を含むイベントのシグナル。recognized
: 認識の試行が成功したことを示す最終的な認識結果を含むイベントのシグナル。sessionStopped
: 認識セッション (操作) の終了を示すイベントのシグナル。canceled
: キャンセルされた認識結果を含むイベントのシグナル。 これらの結果は、直接的なキャンセル要求の結果としてキャンセルされた認識試行を示します。 または、転送またはプロトコルのエラーを示します。
speechRecognizer.recognizing = (s, e) => {
console.log(`RECOGNIZING: Text=${e.result.text}`);
};
speechRecognizer.recognized = (s, e) => {
if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
console.log(`RECOGNIZED: Text=${e.result.text}`);
}
else if (e.result.reason == sdk.ResultReason.NoMatch) {
console.log("NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.canceled = (s, e) => {
console.log(`CANCELED: Reason=${e.reason}`);
if (e.reason == sdk.CancellationReason.Error) {
console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
speechRecognizer.stopContinuousRecognitionAsync();
};
speechRecognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
speechRecognizer.stopContinuousRecognitionAsync();
};
すべての設定が完了したら、[startContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-startkeywordrecognitionasync) を呼び出して認識を開始します。
speechRecognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();
ソース言語を変更する
音声認識の一般的なタスクは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コード内で、SpeechConfig
インスタンスを見つけて、そのすぐ下にこの行を追加します。
speechConfig.speechRecognitionLanguage = "it-IT";
speechRecognitionLanguage
プロパティには、言語ロケールの書式指定文字列が必要です。 サポートされるロケールの一覧については、「音声サービスの言語と音声のサポート」を参照してください。
言語識別
オーディオ ソース内の言語を識別し、それをテキストに文字起こしする必要があるときに、音声テキスト変換認識の言語識別を使用できます。
完全なコード サンプルについては、言語識別に関するページを参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
リファレンス ドキュメント | パッケージ (ダウンロード) | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
Speech SDK とサンプルをインストールする
Azure-Samples/cognitive-services-speech-sdk リポジトリには、iOS および Mac 向けに Objective-C で記述されたサンプルが含まれています。 リンクを選択して、各サンプルのインストール手順を参照してください。
詳細については、「Objective-C 向け Speech SDK リファレンス」を参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
リファレンス ドキュメント | パッケージ (ダウンロード) | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
Speech SDK とサンプルをインストールする
Azure-Samples/cognitive-services-speech-sdk リポジトリには、iOS および Mac 向けに Swift で記述されたサンプルが含まれています。 リンクを選択して、各サンプルのインストール手順を参照してください。
詳細については、「Objective-C 向け Speech SDK リファレンス」を参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
リファレンス ドキュメント | パッケージ (PyPi) | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
音声構成インスタンスを作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechConfig
インスタンスを作成する必要があります。 このクラスには、音声キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
- Azure portal で音声リソースを作成します。 Speech リソース キーとリージョンを取得します。
- 次のコードを使用して、
SpeechConfig
インスタンスを作成します。YourSpeechKey
とYourSpeechRegion
は、自分の音声リソース キーとリージョンに置き換えます。
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
SpeechConfig
は、その他いくつかの方法で初期化できます。
- エンドポイントを使用します。Speech Service エンドポイントを渡します。 音声キーまたは認証トークンは省略可能です。
- ホストを使用します。ホスト アドレスを渡します。 音声キーまたは認証トークンは省略可能です。
- リージョン/場所に関連付けられた認可トークンを使用します。
Note
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
マイクから音声を認識する
デバイスのマイクを使用して音声を認識するには、AudioConfig
を渡さずに SpeechRecognizer
インスタンスを作成し、speech_config
を渡します。
import azure.cognitiveservices.speech as speechsdk
def from_mic():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("Speak into your microphone.")
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_mic()
"特定の" オーディオ入力デバイスを使用したい場合、AudioConfig
でデバイス ID を指定し、それを SpeechRecognizer
コンストラクターの audio_config
パラメーターに渡す必要があります。 デバイス ID を取得する方法については、「Speech SDK を使用してオーディオ入力デバイスを選択する」を参照してください。
ファイルから音声を認識する
マイクを使用するのでなくオーディオ ファイルから音声を認識する場合、AudioConfig
インスタンスを作成し、filename
パラメーターを使用します。
import azure.cognitiveservices.speech as speechsdk
def from_file():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_file()
エラーを処理する
これまでの例は、認識されたテキストを speech_recognition_result.text
プロパティから取得するだけのものでした。 エラーやその他の応答を処理するためには、結果を処理するためのコードを記述する必要があります。 以下のコードでは、speech_recognition_result.reason
プロパティを評価したうえで、次の処理を行っています。
- 認識結果を出力します:
speechsdk.ResultReason.RecognizedSpeech
。 - 認識が一致しない場合は、ユーザーに通知します:
speechsdk.ResultReason.NoMatch
。 - エラーが検出された場合は、エラー メッセージを出力します:
speechsdk.ResultReason.Canceled
。
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(speech_recognition_result.text))
elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_recognition_result.cancellation_details
print("Speech Recognition canceled: {}".format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(cancellation_details.error_details))
print("Did you set the speech resource key and region values?")
継続的認識を使用する
これまでの例では、1 つの発話を認識する単発の認識を使用してきました。 1 つの発話の終わりは、終了時の無音状態をリッスンするか、最大 15 秒のオーディオが処理されるまで待機することによって決定されます。
一方、認識を停止するタイミングを制御したい場合は、継続的認識を使用します。 その場合、認識結果を取得するには、EventSignal
に接続する必要があります。 認識を停止するには、stop_continuous_recognition() または stop_continuous_recognition_async() を呼び出す必要があります。 オーディオ入力ファイルに対して継続的認識を実行する方法の例を次に示します。
まず、入力を定義し、SpeechRecognizer
を初期化します。
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
次に、音声認識の状態を管理する変数を作成します。 認識の開始時は当然、完了していないと考えられるので、この変数は False
に設定します。
done = False
次に、evt
が受信されたときに、継続的認識を停止するコールバックを作成します。 次の点に留意してください。
evt
が受信されると、evt
メッセージが出力されます。evt
が受信されたら、認識を停止するためにevt
が呼び出されます。- 認識状態が
True
に変更されます。
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
以下のコード サンプルでは、SpeechRecognizer
から送信されたイベントにコールバックを接続する方法を示します。 イベントは次のとおりです。
recognizing
: 中間的な認識結果を含むイベントのシグナル。recognized
: 認識の試行が成功したことを示す最終的な認識結果を含むイベントのシグナル。session_started
: 認識セッション (操作) の開始を示すイベントのシグナル。session_stopped
: 認識セッション (操作) の終了を示すイベントのシグナル。canceled
: キャンセルされた認識結果を含むイベントのシグナル。 これらの結果は、直接的なキャンセル要求の結果としてキャンセルされた認識試行を示します。 または、転送またはプロトコルのエラーを示します。
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)
すべてが設定されると、start_continuous_recognition() を呼び出すことができます。
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(.5)
ソース言語を変更する
音声認識の一般的なタスクは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をドイツ語に変更する方法を示しています。 コード内で、SpeechConfig
インスタンスを見つけて、そのすぐ下にこの行を追加します。
speech_config.speech_recognition_language="de-DE"
speech_recognition_language
は、引数として文字列を取るパラメーターです。 サポートされるロケールの一覧については、「音声サービスの言語と音声のサポート」を参照してください。
言語識別
オーディオ ソース内の言語を識別し、それをテキストに文字起こしする必要があるときに、音声テキスト変換認識の言語識別を使用できます。
完全なコード サンプルについては、言語識別に関するページを参照してください。
カスタム エンドポイントを使用する
Custom Speech を使用すると、独自データのアップロード、カスタム モデルのテストとトレーニング、モデル間の精度の比較、カスタム エンドポイントへのモデルのデプロイを行うことができます。 次の例は、カスタム エンドポイントを設定する方法を示しています。
speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。
セマンティック セグメンテーション
セマンティック セグメント化は、無音ベースのセグメント化に関連する問題を軽減するために設計された、音声認識セグメント化戦略です。
- セグメント化の不足: ユーザーが休むことなく長時間話した場合、途切れ目がない長いテキスト シーケンス ("テキストの壁") が表示されることがあり、これは読み取りのエクスペリエンスを大幅に低下させます。
- 過剰なセグメント化: ユーザーの休止時間が短い場合、無音検出メカニズムが誤ったセグメント化を行う可能性があります。
セマンティック セグメントは、無音タイムアウトに依存するのではなく、文末句読点 ('。' や '?' など) を検出したときに最終的な結果を返します。 これが、ユーザー エクスペリエンスをより高い品質と意味的に完全なセグメントにより向上するとともに、中間的な結果が長くなるのを防ぎます。
セマンティック セグメント化を使用するには、SpeechRecognizer
の作成で使用する SpeechConfig
インスタンスにおいて、次のプロパティを設定する必要があります。
speech_config.set_property(speechsdk.PropertyId.Speech_SegmentationStrategy, "Semantic")
セマンティック セグメント化の制限事項の一部を次に示します。
- セマンティック セグメント化を使用するには、Speech SDK バージョン 1.41 以降が必要です。
- セマンティック セグメント化は、継続的な認識でのみ使用することを目的としています。 これには、文字起こしやキャプションなどのシナリオが含まれます。 単一の認識モードとディクテーション モードでは使用しないでください。
- セマンティック セグメント化は、すべての言語とロケールで使用できるわけではありません。 現在、セマンティック セグメント化が使用できるのは、英語 (en) ロケール (en-US、en-GB、en-IN、en-AU など) でのみです。
- セマンティック セグメント化では、信頼度スコアと NBest リストはまだサポートされていません。 そのため、信頼度スコアまたは NBest リストを使用している場合は、セマンティック セグメント化はお勧めしません。
Speech to Text REST API リファレンス | Speech to Text REST API for short audio リファレンス | GitHub 上のその他のサンプル
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
音声をテキストに変換する
コマンド プロンプトで、次のコマンドを実行します。 コマンドには以下の値を挿入します。
- 音声リソース用のサブスクリプション キー
- 音声サービスのリージョン
- 入力オーディオ ファイルのパス
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'
次の例のような応答を受け取ります。
{
"RecognitionStatus": "Success",
"DisplayText": "My voice is my passport, verify me.",
"Offset": 6600000,
"Duration": 32100000
}
詳細については、「音声テキスト変換 REST API リファレンス」を参照してください。
このハウツー ガイドでは、リアルタイムの音声テキスト変換に Azure AI 音声を使用する方法について説明します。 リアルタイム音声認識は、ディクテーション、コール センター支援、ライブ会議のキャプションなど、即時の文字起こしを必要とするアプリケーションに最適です。
サンプル アプリケーションの環境を設定する方法については、「クイックスタート: 音声を認識してテキストに変換する」を参照してください。
マイクから音声を認識する
PC のマイクを接続してオンにします。 マイクを使用する可能性のある他のアプリはすべてオフにしてください。 マイクが内蔵されているコンピューターもあれば、Bluetooth デバイスの構成が必要なコンピューターもあります。
Speech CLI を実行して、マイクからの音声を認識する準備ができました。 コマンド ラインから、Speech CLI バイナリ ファイルが含まれるディレクトリに変更します。 次に、次のコマンドを実行します。
spx recognize --microphone
Note
Speech CLI の既定値は英語です。 「音声テキスト変換」表から別の言語を選択できます。 たとえば、ドイツ語の音声を認識するには、--source de-DE
を追加します。
マイクに向かって話すと、自分が発した言葉がテキストに文字起こしされるのを、リアルタイムで確認できます。 Speech CLI は、無音が一定時間続いた後、または Ctrl + C キーを選択したときに停止します。
ファイルから音声を認識する
Speech CLI では、多くのファイル形式と自然言語で音声認識を行うことができます。 この例では、英語の音声が含まれる .wav ファイル (16 kHz または 8 kHz、16 ビット、モノラル PCM) を使用できます。 または、クイック サンプルが必要な場合、whatstheweatherlike.wav ファイルをダウンロードし、それを Speech CLI バイナリ ファイルと同じディレクトリにコピーします。
次のコマンドを使用して Speech CLI を実行すると、オーディオ ファイルで検出された音声が認識されます。
spx recognize --file whatstheweatherlike.wav
Note
Speech CLI の既定値は英語です。 「音声テキスト変換」表から別の言語を選択できます。 たとえば、ドイツ語の音声を認識するには、--source de-DE
を追加します。
Speech CLI により音声がテキストに文字起こしされて、画面に表示されます。
コンテナーを実行して使用する
音声コンテナーは、WebSocket ベースのクエリ エンドポイント API シリーズを提供します。これには、Speech SDK および Speech CLI を介してアクセスします。 既定では、Speech SDK と Speech CLI ではパブリック音声サービスが使用されます。 コンテナーを使用するには、初期化方法を変更する必要があります。 キーとリージョンではなく、コンテナー ホスト URL を使用します。
音声コンテナーの詳細については、「Docker で音声コンテナーをインストールして実行する」の「ホスト URL」を参照してください。