このトピックでは、Fun-ASR-Realtime リアルタイム音声認識モデル用の Python SDK のパラメータとインターフェイスについて説明します。
前提条件
クイックスタート
コアリソース(client.audio.asr)は、非ストリーミング呼び出しと双方向ストリーミング呼び出しなどのインターフェイスを提供します。実際の要件に応じて、適切な呼び出し方法を選択してください:
- 非ストリーミング呼び出し(
recognize_file):ローカルファイルを認識します。SDK が自動的に音声を分割送信し、タスクの終了までドライブします。事前に録音された音声の処理に適しています。 - 双方向ストリーミング呼び出し(
recognizeセッション):音声ストリームを直接認識し、結果をリアルタイムで出力します。音声ストリームは、マイクなどの外部デバイスから取得することも、ローカルファイルから読み取ることもできます。即時のフィードバックを必要とするシナリオに適しています。
- 非ストリーミング呼び出し
- 双方向ストリーミング呼び出し
単一のリアルタイム音声認識タスクを送信し、ローカルファイルを渡す方式で同期的にブロックして認識結果を取得します。コアリソース(
client.audio.asr)の recognize_file メソッドを呼び出してリクエストパラメーターをバインドし、ローカルファイルのパスを渡します。サーバーイベントを反復処理して認識結果を取得します。リクエストパラメーター
リクエストパラメーターは、コアリソース(client.audio.asr)の recognize/recognize_file メソッドで設定します:model、format、sample_rate、vocabulary_id は具名パラメーターで、その他のパラメーター(max_sentence_silence、language_hints など)は parameters ディクショナリで渡します。
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
model | str | はい | モデル名。 |
sample_rate | int | はい | サンプリングレート (Hz)。有効な値: 8 kHz モデルは 8000 Hz のみをサポートします。その他のモデルは任意のサンプリングレートをサポートします。 |
format | str | はい | オーディオフォーマット。有効な値:
|
vocabulary_id | str | いいえ | 事前コンパイル済みのホットワードリストのID。ホットワードリスト作成 API を呼び出して、この ID を事前に生成します。認識時に ID を渡して、リスト内のホットワードを使用します。語彙が既知で比較的安定しており、リクエスト間で同じ単語リストを再利用する必要があるシナリオに適しています。使用法の詳細については、「事前コンパイル済みホットワード」をご参照ください。 |
max_sentence_silence | int | いいえ | セグメンテーションのための VAD の無音しきい値 (ミリ秒)。音声セグメントの後の無音時間がこのしきい値を超えると、システムは文が終了したと判断します。デフォルト値: 1300。有効な値: [200, 6000]。 |
multi_threshold_mode_enabled | bool | いいえ | マルチしきい値モードを有効にするかどうか。有効にすると、VAD セグメンテーションが長すぎるセグメントを生成するのを防ぎます。デフォルト:False。 |
punctuation_prediction_enabled | bool | いいえ | 認識結果に句読点を自動的に追加するかどうか:
|
heartbeat | bool | いいえ | ハートビートパケットを有効にするかどうか。デフォルト:False。
|
language_hints | list[str] | いいえ | 認識する音声の言語。デフォルト値はありません。設定しない場合、モデルは自動的に言語を検出します。1 つの値を設定できます。複数設定した場合は、最初の値のみが有効です。
クリックしてサポートされている言語コードを表示
|
speech_noise_threshold | float | いいえ | 音声とノイズを区別するためのしきい値であり、VAD (音声アクティビティ検出) の感度調整に使用します。有効な値: [-1.0, 1.0]。値の説明:
|
special_word_filter | str | いいえ | 音声認識中に処理するセンシティブな単語を指定し、単語ごとに異なる処理方法を設定できます。詳細については、「センシティブな単語のフィルタリング」をご参照ください。 |
callback | RecognitionCallback | いいえ | コールバックインターフェイス (RecognitionCallback)。 |
Recognition インスタンスの call または start メソッドにキーワード引数として渡します。
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
raw_input | dict | いいえ | 会話コンテキストを渡すために使用される入力オブジェクト。コンテキスト強化により、ドメイン固有の用語の認識精度が向上します。使用方法については、「クイックスタート」をご参照ください。dict には、値がメッセージのリスト (list[dict]) である context キーを含める必要があります。各メッセージには、次のフィールドが含まれます:
このフィールドには SDK バージョン 2.0.1 以降が必要です。 |
主要なインターフェイス
コアリソース(client.audio.asr)
リアルタイム音声認識能力は client.audio.asr リソースにマウントされています:recognize は双方向ストリーミング認識セッション(Recognition)を作成し、recognize_file はローカルファイルを一度に認識します。
| メンバーメソッド | メソッドシグネチャ | 説明 |
|---|---|---|
| recognize | 双方向ストリーミング認識セッションを作成します。with コンテキストに入ると start が自動的に呼び出され、接続の確立とタスクの送信が行われます。音声の送信とイベントの消費は並行して行う必要があります(send_audio_frame、events()/results()、stop と組み合わせて使用します)。 | |
| recognize_file | ローカルファイルをベースとした非ストリーミング呼び出しです:SDK が自動的に音声を分割送信し、タスクの終了までドライブして、サーバーイベントを 1 つずつ産出します。このメソッドは、認識対象のファイルに読み取り権限があることを要求します。 | |
| start | 音声認識を開始します:接続を確立し、タスクを送信して task-started を待機します。with コンテキストに入ると自動的に呼び出され、起動に成功した後に音声を送信できます。 | |
| send_audio_frame | 音声をプッシュします。毎回プッシュされる音声ストリームは、大きすぎたり小さすぎたりしないようにしてください。各音声パケットの長さは約 100 ms、サイズは 1 KB~16 KB の間にすることを推奨します。認識結果は events()/results() の反復処理で取得します。 | |
| stop | 音声認識を停止します:サーバーに入力の終了のみを通知します。受信スレッドは events() を task-finished イベントまで消費し続ける必要があります。 | |
| events / results | サーバーイベントを反復処理します:events() は原始イベント dict を産出します(認識テキストは payload.output.sentence にあります)。results() は認識結果フレームのみを産出し、認識結果(RecognitionResult)の型付きオブジェクトを返します(ハートビートフレームはフィルタリング済み)。 | |
| close | 認識セッションを閉じます。with コンテキストから抜けるときに自動的に呼び出されます。 | |
| request_id / first_package_delay / last_package_delay / last_response | request_id、初回パケット遅延(最初の音声パケットの送信から最初の認識結果パケットの受信までのレイテンシー)、最終パケット遅延(stop 指令の送信から最後の認識結果パケットの受信までの所要時間)を取得します。タスク完了後に使用します。last_response は最後に正常に読み取った原始メッセージであり、task-failed のエラー取得に使用できます。セッションを閉じた後も読み取り可能です。 |
イベント反復(events()/results())
双方向ストリーミング呼び出しでは、サーバーはイベントの方式で主要なプロセス情報とデータをクライアントに返します。受信スレッドでセッションの events()(原始イベント dict)または results()(型付き認識結果フレーム)を反復処理し、サーバーから返された情報やデータを処理する必要があります。
| イベント/反復メソッド | 産出内容 | 戻り値 | 説明 |
|---|---|---|---|
task-started イベント | なし | start() 内部で読み取られ、起動の戻り時に last_response に保存されます。events() から再度産出されることはありません。 | |
event:サーバーイベント dict | イテレーター | サーバーからの返信があるときにイベントを産出します。認識結果は payload.output.sentence にあり、ハートビートや空テキストのイベントである場合があります。アプリケーションは必要に応じて無視できます。1 つの受信スレッドで消費し続けてください。複数の読み取り者を並行して作成しないでください。 | |
result:認識結果(RecognitionResult) | イテレーター | 認識結果フレームのみを産出します(ハートビートフレームはフィルタリング済み)。すべての認識結果が返された後に反復処理が終了します。 | |
DashScopeError 例外 | なし | 異常発生時に送信/受信スレッドでスローされます。try/except で捕捉できます。 | |
task-finished イベント | なし | サーバーがすべての認識を完了した後に events() から産出され、その後反復処理が終了します。stop() を送信した後もこのイベントを読み取る必要があります。 |
応答
認識結果 (RecognitionResult)
RecognitionResult は、セッションの results() の反復処理で産出される 1 回の認識結果フレームを表します(双方向ストリーミング呼び出しと非ストリーミング呼び出しのどちらでも使用できます。events() が産出するのは原始イベント dict であるため、この型付きビューが必要な場合は results() を使用してください)。
| メンバーメソッド | メソッドシグネチャ | 説明 |
|---|---|---|
get_sentence | 現在認識されている文と、そのタイムスタンプ情報を取得します。このメソッドは、Dict[str, Any](単文情報)を返します。詳細については、「単文情報 (Sentence)」をご参照ください。 | |
request_id | 現在のイベントに対応するリクエストの request_id。 | |
is_sentence_end | 現在の文が終了したかどうかを判定します。このメソッドは、get_sentence() が返す単文情報の end_time フィールドが None かどうかを確認します。end_time が None でない場合は、文が終了したことを示します。 |
文情報 (Sentence)
Sentence クラスのメンバーは次のとおりです:
| パラメーター | 型 | 説明 |
|---|---|---|
begin_time | int | 文の開始時刻 (ms) です。 |
end_time | int | 文の終了時刻 (ms) です。 |
text | str | 認識されたテキストです。 |
words | 単語レベルのタイムスタンプ情報 (Word) のリスト | 単語レベルのタイムスタンプ情報です。 |
単語レベルのタイムスタンプ情報 (Word)
Word クラスのメンバーは次のとおりです:
| パラメーター | 型 | 説明 |
|---|---|---|
begin_time | int | 単語の開始時刻 (ms) です。 |
end_time | int | 単語の終了時刻 (ms) です。 |
text | str | 単語です。 |
punctuation | str | 句読点です。 |
エラーコード
エラーが発生した場合は、「エラーコード」を参照してトラブルシューティングを行ってください。
問題が解決しない場合は、開発者コミュニティ に参加し、問題を報告して Request ID を提供してください。
よくある質問
機能
Q:長時間の無音状態でも接続を維持するにはどうすればよいですか?
heartbeat リクエストパラメーターを true に設定し、サーバーに無音オーディオを送信し続けます。
無音オーディオは、オーディオファイルまたはストリームに含まれる音響信号のないコンテンツです。無音オーディオは、Audacity や Adobe Audition などのオーディオ編集ソフトウェア、または FFmpeg などのコマンドラインツールを使用して、いくつかの方法で生成できます。
Q:オーディオをサポートされているフォーマットに変換するにはどうすればよいですか?
FFmpeg を使用します。詳しい使い方については、FFmpeg の公式サイトをご参照ください。
Q:ローカルファイル (録音) を認識するにはどうすればよいですか?
ローカルファイルを認識するには 2 つの方法があります:
-
ローカルファイルパスを直接渡す:この方法では、認識が完了した後にのみ完全な結果が返されるため、即時のフィードバックが必要なシナリオには適していません。
「非ストリーミング呼び出し」を参照し、Recognition クラス の
callメソッドにファイルパスを渡して録音を直接認識します。 -
ローカルファイルをバイナリストリームに変換して認識する:この方法では、結果をストリーミングしながらファイルを認識するため、即時のフィードバックが必要なシナリオに適しています。
「双方向ストリーミングコール」を参照し、Recognition クラスの
send_audio_frameメソッドを使用して、バイナリ ストリームをサーバーに送信して認識を行います。
トラブルシューティング
Q:音声が認識されない (認識結果がない) のはなぜですか?
-
リクエストパラメーターの音声フォーマット (
format) とサンプルレート (sampleRate/sample_rate) が正しいこと、およびパラメーターの制約を満たしていることを確認してください。 よくあるエラーとして、以下が挙げられます。- 音声ファイルの拡張子は .wav ですが、実際は MP3 形式であり、
formatリクエストパラメーターは mp3 に設定されています(パラメーター設定が正しくありません)。 - 音声サンプルレートは 3600 Hz ですが、
sampleRate/sample_rateリクエストパラメーターは 48000 に設定されています (不正なパラメーター設定)。
- 音声ファイルの拡張子は .wav ですが、実際は MP3 形式であり、
- 上記のいずれのチェックでも問題が解決しない場合は、カスタムホットワードを追加して特定の用語の認識を向上させてください。