音声認識

音声認識は、音声をリアルタイムまたは事前に記録されたファイルからテキストに文字起こしする、AI を利用したオンデバイス音声テキスト変換テクノロジです。 完全にデバイス上で実行することで、ネットワーク接続やクラウドへのオーディオ データの送信を必要とせずに、待機時間の短い文字起こしを実現します。 すべての AI モデルと同様に、文字起こしの出力は常に正確であるとは限らないため、重要なユース ケースについて検証する必要があります。

音声認識機能をアプリに追加すると、次のようなシナリオが可能になります。

  • 会議またはメディア再生のためのリアルタイムキャプションと字幕
  • 音声駆動のノート作成とディクテーション
  • 音声入力に依存するユーザー向けのアクセシビリティ機能
  • インタビューや講義などの録音されたオーディオ ファイルの文字起こし
  • デスクトップ アプリケーションでの音声コマンドとハンズフリー操作

API では、次の 2 つの操作モードがサポートされています。

  • バッチ認識: 1 回のパスで完全なオーディオ ファイルを文字起こしし、事前に記録されたコンテンツに最適です。
  • ストリーミング認識: マイクまたはオーディオ ストリームからの継続的なリアルタイムの文字起こし。フレーズが認識されると結果が提供されます。

SpeechRecognitionModel を使用して、オーディオ ファイルまたはデバイス上のリアルタイム オーディオ ストリームから音声を文字起こしできます。

API の詳細については、AI Speech 機能の API リファレンスを参照してください。

コンテンツ モデレーションの詳細については、「生成 AI API を使用したコンテンツの安全性」を参照してください。

Important

パッケージ マニフェストの要件: Windows AI イメージング API を使用するには、systemAIModelsで宣言されたPackage.appxmanifest機能を備えた MSIX パッケージとしてアプリをパッケージ化する必要があります。 さらに、マニフェストの MaxVersionTested 属性が最新の Windows バージョン ( 10.0.26226.0 以降など) に設定されていることを確認して、Windows AI 機能を適切にサポートします。 古い値を使用すると、モデルの読み込み時に "アプリによって宣言されていません" エラーが発生する可能性があります。

<Dependencies>
  <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
  <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
</Dependencies>

Prerequisites

  • Windows バージョン: Windows 11 バージョン 24H2 (ビルド 26100) 以降
  • WinAppSDK のバージョン: バージョン 1.7.1 以降
  • ハードウェア: NPU 搭載の Copilot+ PC、または推奨 CPU 仕様を満たす任意の Windows PC

サポートされているハードウェア

音声認識は、次のハードウェアで実行されます。

Hardware 地位 詳細情報
NPU (Copilot+ PC) ✅ 使用可能 最高のパフォーマンスを発揮します。 モデルがプレインストールされています。 Copilot+ PCs開発者ガイドを参照してください。
CPU ✅ 使用可能 (オプション、リムーバブル) モデルがプレインストールされていません。 モデルの可用性とダウンロードに関するページを参照してください。 推奨される CPU 仕様を満たすデバイスに最適です。
GPU ❌ サポートされていません 音声認識は GPU では使用できません。

Note

ハードウェアの選択は自動的に行われます。 NPU を使用するCopilot+ PCでは、音声認識は常に NPU で実行されます。 Copilot+ 以外のデバイスでは、CPU 上で自動的に実行されます。Copilot+ デバイスで CPU を選択するための開発者またはエンドユーザーのオプトインはありません。 これは、他のWindows AI API で使用されるパターンと一致します。クロス API ビューについては、サポートされているハードウェアを参照してください。

音声認識は、他の Windows AI API が動作するあらゆる CPU 上で実行できますが、リアルタイム文字起こしの品質と遅延はホスト CPU の性能に応じて変化します。

優れた CPU エクスペリエンスを実現するために、次の推奨仕様 をすべて 満たすデバイスをターゲットにしてください。

  • 4 つ以上の物理コア
  • 3 GHz 以上のベース クロック
  • 32 MB 以上の L3 キャッシュ

これらは、ハードな最小値ではなく、推奨事項です。API は、下位仕様のデバイスで文字起こしを試みます。 広範な CPU 範囲を対象とするアプリでは、VSR に対して示されているのと同じランタイム CPU チェックを使用できます。 (WMI) を使用する C# サンプルの System.Managementを参照してください。 結果を使用して、境界ハードウェアでの既定のバッチ認識やライブ ストリーミング エントリ ポイントの非表示など、UX の選択肢をゲートします。

モデルの可用性とダウンロード

Copilot+ PC では、音声認識モデルが NPU 上に あらかじめインストールされています。 CPU 専用デバイスでは、モデルはプレインストール されません 。アプリが EnsureReadyAsync を初めて呼び出す際にオンデマンドでダウンロードされます。 ダウンロードは、Windows Updateを通じてバックグラウンドで実行されます。 エンド ユーザーは、後でモデルを削除してディスク領域を再利用することもできます。

この動作は、他のオプションの Windows AI モデルで使用されるモデル のライフサイクルと一致します。アプリでは、モデルが存在すると想定するのではなく、"まだインストールされていない" ケースを明示的に処理する必要があります。

音声認識モデルは CPU 専用デバイスでオンデマンドでダウンロードされるため、ユーザーがバックグラウンド ダウンロードに同意できるようにEnsureReadyAsyncを呼び出す前に確認ダイアログを表示します。 一般的なパターン:

  1. GetReadyState を呼び出し、返された AIFeatureReadyState に応じて分岐します。

    • Ready — モデルがインストールされています。続行。
    • NotReady または EnsureNeeded — 同意ダイアログ (下記参照) を表示し、ユーザーが同意した場合にのみ EnsureReadyAsync を呼び出します。
    • NotSupportedOnCurrentSystem — デバイスが サポートされているハードウェアの要件を満たしていません。 フォールバック エクスペリエンス (たとえば、 Windows SDK を使用したSpeech Recognition またはクラウドベースのサービス) を提供し、必要に応じてハードウェア要件を表示して、ユーザーが情報に基づいてアップグレードを決定できるようにします。
  2. 同意ダイアログで、次の内容を説明します。

    • オプションの音声認識モデルがダウンロードされます。
    • ダウンロードは、Windows Updateを通じてバックグラウンドで行われます。
    • ユーザーは、Settings>Windows Update でダウンロードの進行状況を監視できます。
    • ユーザーは、後で必要なくなった場合に 、設定>System>AI コンポーネント でモデルを削除できます。

    Tip

    ユーザー向けの文字列 (ダイアログ テキスト、ステータス メッセージ) では、基になるモデル名ではなく、モデルを "音声認識モデル" または "省略可能な AI モデル" として参照します。 ほとんどのエンド ユーザーはブランド名に慣れていないので、一般的な用語はより明確に目的を伝えます。

  3. EnsureReadyAsync進行中は、アプリに進行状況インジケーターを表示します。 読み込み UI パターンについては、「get started with Windows AI API」を参照してください。

モデルのインストール後

モデルは、ユーザーが削除するまでデバイス上に残ります。 ユーザーは、インストールされているモデル (音声認識モデルを含む) を設定>System>AI コンポーネントで管理します。 ユーザーが後でモデルを削除した場合、 GetReadyState に対するアプリの次の呼び出しは NotReady または EnsureNeeded を返し、同意とダウンロードフローを繰り返す必要があります。

オーディオ ファイルからのバッチ認識

バッチ認識を使用して、完全なオーディオ ファイルを文字起こしします。 この方法は、事前に録音されたオーディオ コンテンツに最適です。

  1. GetReadyState を呼び出し、EnsureReadyAsync が正常に完了するのを待って、SpeechRecognitionModel の準備ができていることを確認します。
  2. モデルの準備ができたら、 TryCreateAsync を呼び出して SpeechRecognitionModel オブジェクトをインスタンス化します。
  3. SpeechRecognitionModel を使用して BatchRecognition インスタンスを作成します。
  4. オーディオ ファイルへのパスを指定して RecognizeFromFile を呼び出して文字起こしします。
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.Speech;

if (SpeechRecognitionModel.GetReadyState() != AIFeatureReadyState.Ready)
{
    await SpeechRecognitionModel.EnsureReadyAsync();
}

var speechModelResult = await SpeechRecognitionModel.TryCreateAsync();
if (speechModelResult.SpeechModel == null)
{
    throw new InvalidOperationException(
        $"Failed to create SpeechRecognitionModel: {speechModelResult.ExtendedError}");
}

var speechModel = speechModelResult.SpeechModel;

var batchRecognition = new BatchRecognition(speechModel);
string transcription = await batchRecognition.RecognizeFromFile("path/to/audio.wav");

Console.WriteLine($"Transcription: {transcription}");

リアルタイム オーディオ ソースからのストリーミング認識

ストリーミング認識を使用して、マイクやその他のオーディオ入力デバイスからリアルタイムでオーディオを文字起こしします。 この方法では、完全な語句が認識されると最終的な結果が得られます。

  1. GetReadyState を呼び出し、EnsureReadyAsync が正常に完了するのを待って、SpeechRecognitionModel の準備ができていることを確認します。
  2. モデルの準備ができたら、 TryCreateAsync を呼び出して SpeechRecognitionModel オブジェクトをインスタンス化します。
  3. FromAudioDevice とマイク デバイス名を使用して AudioConfiguration を作成します。
  4. AudioConfiguration と SpeechRecognitionModel を使用して StreamingRecognition インスタンスを作成します。
  5. 文字起こし結果を受け取るには、Recognized イベントを購読します。
  6. StartContinuousRecognitionAsync を呼び出して文字起こしを開始します。
  7. 終了したら StopContinuousRecognition を呼び出します。
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.Speech;

if (SpeechRecognitionModel.GetReadyState() != AIFeatureReadyState.Ready)
{
    await SpeechRecognitionModel.EnsureReadyAsync();
}

var speechModelResult = await SpeechRecognitionModel.TryCreateAsync();
if (speechModelResult.SpeechModel == null)
{
    throw new InvalidOperationException(
        $"Failed to create SpeechRecognitionModel: {speechModelResult.ExtendedError}");
}

var speechModel = speechModelResult.SpeechModel;

var audioConfig = AudioConfiguration.FromAudioDevice(microphoneDeviceName);
var streamingRecognition = new StreamingRecognition(audioConfig, speechModel);

// Subscribe to receive transcription results as phrases are recognized
streamingRecognition.Recognized += (sender, args) =>
{
    Console.WriteLine($"Recognized: {args.Text}");
};

// Start real-time recognition
await streamingRecognition.StartContinuousRecognitionAsync();

// ... recognition is active, audio is being transcribed in real-time ...

// Stop recognition when done
streamingRecognition.StopContinuousRecognition();

関連項目


第三者モデルに関する通知と情報

この API は、 OpenAI ささやき モデルのコンポーネントを使用します。このモデルは、次のライセンスで提供されます。

MIT ライセンス

Copyright (c) 2022 OpenAI

本契約により本ソフトウェアと関連ドキュメント ファイル (「ソフトウェア」) の複製を取得したユーザーに対し、ソフトウェアの使用、複製、修正、結合、発行、配布、二次ライセンス付与、複製の販売を行う権利を制限なく含め、ソフトウェアを制限なしに扱うこと、およびソフトウェアを供与された人物のかかる行為を許可する権限を、次の条件に従い無償で付与します。

上記の著作権通知および権限通知は、本ソフトウェアのすべての複製または実質的な部分に含めるものとします。

本ソフトウェアは「現状有姿」で提供されており、明示または黙示を問わず、商品性、特定目的に対する適合性、非侵害性に関するものなど、一切の保証をいたしません。 いかなる場合であっても、制作者または著作権所有者は、契約上の行為、不法行為、その他により生じたか否かにかかわらず、ソフトウェア、ソフトウェアの使用、またはソフトウェアの操作に起因もしくは関連して生じた、いかなる主張、損害、その他の障害に対して責任を負わないものとします。