録音ファイル認識サービスは、HTTP または HTTPS の URL として送信された音声ファイルを文字起こしします。ポーリングとコールバックの 2 つの取得方法をサポートしており、リアルタイムではなく非同期でファイルを処理します。
サポートされる機能
シングルチャネルの WAV および MP3 音声ファイル
2 つの取得方法:ポーリングとコールバック
カスタム言語モデルとホットワード語彙
複数の言語:中国語 (北京語)、中国語方言、英語
制限事項
| 制約 | 詳細 |
|---|---|
| URL フォーマット | ドメイン名でパブリックにアクセスできる必要があります。IP アドレスとスペースは使用できません。 |
| ファイルサイズ | 最大 512 MB |
| 処理時間 (無料トライアル) | 24 時間以内に認識が完了 |
| 処理時間 (Commercial Edition) | 3 時間以内に認識が完了 |
| 結果の保持期間 | 72 時間 |
| 1 日あたりのクォータ (無料トライアル) | 1 暦日あたり最大 2 時間の音声 |
有効な URL の例
https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav無効な URL の例
http://127.0.0.1/sample.wav
D:\files\sample.wav30 分以内にアップロードされたファイルの合計時間が 500 時間を超える場合、24 時間および 3 時間の処理制限は適用されません。大規模な音声処理については、Alibaba Cloud のプリセールスにお問い合わせください。
仕組み
録音ファイル認識サービスは、Alibaba Cloud POP API (リモートプロシージャコールスタイル) を使用します。クライアントは HTTP 経由でリクエストを送信し、録音ファイルはパブリック URL 経由でアクセスできる必要があります。
利用可能な操作は 2 つあります:
認識タスクの送信 (POST):録音ファイルの URL と設定パラメーターを送信します。サーバーはタスク ID を返します。
認識結果のクエリ (GET):タスク ID を使用して結果をポーリングするか、コールバックメソッドを有効にしている場合はコールバック経由で結果を受け取ります。
クエリオペレーションは、1 秒あたり最大 100 クエリ (QPS) をサポートします。この制限を超えると、サーバーは Throttling.User : Request was denied due to user flow control. を返します。制限内に収まるように、ポーリング間隔を設定してください。取得方法の選択
| メソッド | 仕組み | 使用場面 |
|---|---|---|
| ポーリング | タスクを送信し、タスク ID を使用して定期的に結果をクエリします。 | デフォルト。すべての環境で動作します。 |
| コールバック | コールバック URL を指定してタスクを送信します。処理が完了すると、サーバーはその URL に結果を POST します。 | パブリックに到達可能な HTTP または HTTPS エンドポイントを公開できる場合に使用します。 |
前提条件
認識タスクを送信する前に:
ご利用の音声ファイルのフォーマットとサンプリングレートを確認します。ユースケースに基づいて、Intelligent Speech Interaction コンソールで適切なシナリオとモデルを選択します。
音声ファイルを Alibaba Cloud Object Storage Service (OSS) またはパブリックにアクセス可能なファイルサーバーに保存します。
パブリック OSS ファイル:OSS の URL を直接取得します。詳細については、「パブリック読み取りオブジェクト」をご参照ください。
プライベート OSS ファイル:SDK を使用して、有効期間付きの署名付き URL を生成します。詳細については、「プライベートオブジェクト」をご参照ください。
カスタムファイルサーバー:HTTP レスポンスヘッダーの
Content-Lengthフィールドが実際のファイルサイズと一致していることを確認してください。一致しない場合、ダウンロードは失敗します。
認識タスクの送信
メソッド:POST
リクエストパラメーターを JSON 文字列としてリクエストボディに設定します。
リクエストボディの例
{
"appkey": "your-appkey",
"file_link": "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav",
"version": "4.0",
"auto_split": false,
"enable_words": false,
"enable_sample_rate_adaptive": true,
"valid_times": [
{
"begin_time": 200,
"end_time": 2000,
"channel_id": 0
}
]
}リクエストパラメーター
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
appkey | String | はい | Intelligent Speech Interaction コンソールでのプロジェクトの appkey。 |
file_link | String | はい | 録音ファイルの URL。プロジェクトのシナリオとモデルが録音ファイルと一致していることを確認してください。 |
version | String | はい | サービスバージョン。デフォルト値:2.0。新規統合の場合は 4.0 に設定します。 |
enable_words | Boolean | いいえ | 単語レベルの認識結果を返すかどうかを指定します。デフォルト値:false。version: 4.0 が必要です。 |
enable_sample_rate_adaptive | Boolean | いいえ | 16,000 Hz を超えるサンプリングレートの音声を自動的にダウンサンプリングするかどうかを指定します。デフォルト値:false。version: 4.0 が必要です。 |
enable_callback | Boolean | いいえ | コールバックメソッドを使用するかどうかを指定します。デフォルト値:false。 |
callback_url | String | いいえ | コールバック URL。enable_callback が true の場合に必須です。ドメイン名を持つ HTTP または HTTPS URL である必要があります (IP アドレスは不可)。 |
auto_split | Boolean | いいえ | 自動トラック分割を有効にするかどうかを指定します。有効にすると、サーバーは ChannelId フィールドを使用して各文の話者を識別します。8,000 Hz のモノラル音声のみをサポートします。enable_unify_post が true の場合、true に設定することはできません。 |
enable_unify_post | Boolean | いいえ | 後処理を有効にするかどうかを指定します。デフォルト値:false。auto_split が true の場合、true に設定することはできません。 |
enable_inverse_text_normalization | Boolean | いいえ | 逆テキスト正規化 (ITN) を有効にするかどうかを指定します。これは漢数字をアラビア数字に変換します。デフォルト値:false。version: 4.0 および enable_unify_post: true が必要です。ITN は単語レベルの結果には適用されません。 |
enable_disfluency | Boolean | いいえ | 非流暢性検出を有効にするかどうかを指定します。デフォルト値:false。version: 4.0 および enable_unify_post: true が必要です。 |
valid_times | List\<ValidTime\> | いいえ | 音声認識が必要なオーディオトラック内の時間範囲。 |
max_end_silence | Integer | いいえ | 文末の無音持続時間の最大値。デフォルト値:450。単位:ミリ秒。 |
max_single_segment_time | Integer | いいえ | 1 つの文の最大持続時間。最小値:10000。デフォルト値:20000。単位:ミリ秒。 |
customization_id | String | いいえ | POP API 経由で作成されたカスタム言語モデルの ID。 |
class_vocabulary_id | String | いいえ | 分類済みホットワード語彙の ID。 |
vocabulary_id | String | いいえ | 拡張ホットワード語彙の ID。 |
ValidTime オブジェクト
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
begin_time | Int | はい | 時間範囲の開始時刻オフセット。単位:ミリ秒。 |
end_time | Int | はい | 時間範囲の終了時刻オフセット。単位:ミリ秒。 |
channel_id | Int | はい | 時間範囲が適用されるオーディオトラック。値は 0 から始まります。 |
レスポンスパラメーター
HTTP 200 ステータスコードは、リクエストが受け入れられたことを示します。
| パラメーター | 型 | 説明 |
|---|---|---|
TaskId | String | タスク ID。これを使用して認識結果をクエリします。 |
RequestId | String | リクエスト ID。デバッグ用です。 |
StatusCode | Int | ステータスコード。 |
StatusText | String | ステータスメッセージ。 |
レスポンスの例
{
"TaskId": "4b56f0c4b7e611e88f34c33c2a60****",
"RequestId": "E4B183CC-6CFE-411E-A547-D877F7BD****",
"StatusText": "SUCCESS",
"StatusCode": 21050000
}認識結果のクエリ
メソッド:GET
POST オペレーションで返されたタスク ID をリクエストパラメーターとして渡します。100 QPS の制限内に収まるように、適切な間隔でポーリングしてください。
リクエストパラメーター
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
TaskId | String | はい | 送信オペレーションによって返されたタスク ID。 |
レスポンスパラメーター
HTTP 200 ステータスコードは、クエリリクエストが受信されたことを示します。
| パラメーター | 型 | 説明 |
|---|---|---|
TaskId | String | タスク ID。 |
StatusCode | Int | ステータスコード。 |
StatusText | String | ステータスメッセージ。 |
RequestId | String | リクエスト ID。デバッグ用です。 |
Result | Object | 認識結果。StatusText が SUCCESS の場合にのみ存在します。 |
Sentences | List\<SentenceResult\> | 文レベルの認識結果。StatusText が SUCCESS の場合にのみ存在します。 |
Words | List\<WordResult\> | 単語レベルの認識結果。enable_words が true で、version が 4.0 の場合にのみ存在します。 |
BizDuration | Long | 認識された音声の合計持続時間。単位:ミリ秒。 |
SolveTime | Long | 認識タスクが完了したときのタイムスタンプ。単位:ミリ秒。 |
SentenceResult オブジェクト
| パラメーター | 型 | 説明 |
|---|---|---|
ChannelId | Int | 文が属するオーディオトラック。 |
BeginTime | Int | 文の開始時刻オフセット。単位:ミリ秒。 |
EndTime | Int | 文の終了時刻オフセット。単位:ミリ秒。 |
Text | String | 文の認識されたテキスト。 |
EmotionValue | Int | 感情の強度。音量デシベルを 10 で割って計算されます。有効な値:1~10。値が大きいほど感情が強いことを示します。 |
SilenceDuration | Int | この文と前の文の間の無音持続時間。単位:秒。 |
SpeechRate | Int | 文の平均発話速度。単位:1 分あたりの単語数。 |
WordResult オブジェクト
| パラメーター | 型 | 説明 |
|---|---|---|
ChannelId | Int | 単語が属するオーディオトラック。 |
BeginTime | Int | 単語の開始時刻。単位:ミリ秒。 |
EndTime | Int | 単語の終了時刻。単位:ミリ秒。 |
Word | String | 認識された単語。 |
レスポンスの例
タスクが正常に完了 (シングルチャネルファイル nls-sample-16k.wav)
{
"TaskId": "d429dd7dd75711e89305ab6170fe****",
"RequestId": "9240D669-6485-4DCC-896A-F8B31F94****",
"StatusText": "SUCCESS",
"BizDuration": 2956,
"SolveTime": 1540363288472,
"StatusCode": 21050000,
"Result": {
"Sentences": [{
"EndTime": 2365,
"SilenceDuration": 0,
"BeginTime": 340,
"Text": "北京の天気",
"ChannelId": 0,
"SpeechRate": 177,
"EmotionValue": 5.0
}]
}
}コールバック応答 (バージョン 4.0、enable_callback: true)
コールバック応答のフォーマットは、ポーリング応答のフォーマットと一致します。
{
"Result": {
"Sentences": [{
"EndTime": 2365,
"SilenceDuration": 0,
"BeginTime": 340,
"Text": "北京の天気",
"ChannelId": 0,
"SpeechRate": 177,
"EmotionValue": 5.0
}]
},
"TaskId": "36d01b244ad811e9952db7bb7ed2****",
"StatusCode": 21050000,
"StatusText": "SUCCESS",
"RequestTime": 1553062810452,
"SolveTime": 1553062810831,
"BizDuration": 2956
}RequestTimeは、認識リクエストが送信されたときのタイムスタンプ (ミリ秒単位) です。たとえば、値1553062810452は、2019 年 3 月 20 日 14:20:10 (UTC+8) を示します。SolveTimeは、タスクが完了したときのタイムスタンプ (ミリ秒単位) です。
タスクのキューイング
{
"TaskId": "c7274235b7e611e88f34c33c2a60****",
"RequestId": "981AD922-0655-46B0-8C6A-5C836822****",
"StatusText": "QUEUEING",
"StatusCode": 21050002
}タスク実行中
{
"TaskId": "c7274235b7e611e88f34c33c2a60****",
"RequestId": "8E908ED2-867F-457E-82BF-4756194A****",
"StatusText": "RUNNING",
"BizDuration": 0,
"StatusCode": 21050001
}ファイルのダウンロードに失敗しました
{
"TaskId": "4cf25b7eb7e711e88f34c33c2a60****",
"RequestId": "098BF27C-4CBA-45FF-BD11-3F532F26****",
"StatusText": "FILE_DOWNLOAD_FAILED",
"BizDuration": 0,
"SolveTime": 1536906469146,
"StatusCode": 41050002
}単語レベルの結果(enable_words: true、version: 4.0)
単語レベルの結果は、文レベルの結果とともに含まれます。ポーリングおよびコールバック応答では、同じフォーマットが使用されます。
{
"StatusCode": 21050000,
"Result": {
"Sentences": [{
"SilenceDuration": 0,
"EmotionValue": 5.0,
"ChannelId": 0,
"Text": "北京の天気",
"BeginTime": 340,
"EndTime": 2365,
"SpeechRate": 177
}],
"Words": [{
"ChannelId": 0,
"Word": "Weather",
"BeginTime": 640,
"EndTime": 940
}, {
"ChannelId": 0,
"Word": "in",
"BeginTime": 940,
"EndTime": 1120
}, {
"ChannelId": 0,
"Word": "Beijing",
"BeginTime": 1120,
"EndTime": 2020
}]
},
"SolveTime": 1553236968873,
"StatusText": "SUCCESS",
"RequestId": "027B126B-4AC8-4C98-9FEC-A031158F****",
"TaskId": "b505e78c4c6d11e9a213e11db149****",
"BizDuration": 2956
}サービスステータスコード
通常のステータスコード
| ステータスコード | ステータスメッセージ | 説明 | アクション |
|---|---|---|---|
| 21050000 | SUCCESS | タスクは正常に完了しました。 | 不要です。 |
| 21050001 | RUNNING | タスクは実行中です。 | 後でもう一度クエリを実行してください。 |
| 21050002 | QUEUEING | タスクはキューイング中です。 | 後でもう一度クエリを実行してください。 |
| 21050003 | SUCCESS_WITH_NO_VALID_FRAGMENT | タスクは成功しましたが、音声データは検出されませんでした。 | 音声に発話が含まれているか、または発話の持続時間が短すぎないかを確認してください。 |
エラーコード
4 で始まるステータスコードはクライアントエラーです。5 で始まるステータスコードはサーバーエラーです。
| ステータスコード | ステータスメッセージ | 説明 | ソリューション |
|---|---|---|---|
| 41050001 | USER_BIZDURATION_QUOTA_EXCEED | 1 日あたりの音声クォータを超えました。 | クォータの引き上げをリクエストするには、nls_support@service.aliyun.com にメールでご連絡ください。 |
| 41050002 | FILE_DOWNLOAD_FAILED | 音声ファイルのダウンロードに失敗しました。 | URL が正しく、パブリックにアクセス可能であることを確認してください。 |
| 41050003 | FILE_CHECK_FAILED | 音声ファイルのフォーマットが無効です。 | 録音ファイルが WAV または MP3 フォーマットのシングルチャネルまたはデュアルチャネルファイルであるかを確認してください。 |
| 41050004 | FILE_TOO_LARGE | 音声ファイルがサイズ制限を超えています。 | ファイルが 512 MB 以下であることを確認してください。 |
| 41050005 | FILE_NORMALIZE_FAILED | 音声の正規化に失敗しました。 | ファイルが破損しておらず、再生可能であることを確認してください。 |
| 41050006 | FILE_PARSE_FAILED | 音声の解析に失敗しました。 | ファイルが破損しておらず、再生可能であることを確認してください。 |
| 41050007 | MKV_PARSE_FAILED | MKV の解析に失敗しました。 | ファイルが破損しておらず、再生可能であることを確認してください。 |
| 41050008 | UNSUPPORTED_SAMPLE_RATE | 音声サンプリングレートがサポートされていません。 | ファイルのサンプリングレートが、Intelligent Speech Interaction コンソールで appkey にバインドされている自動音声認識 (ASR) モデルと一致していることを確認してください。 |
| 41050009 | UNSUPPORTED_ASR_GROUP | ASR グループがサポートされていません。 | appkey が AccessKey ペアと同じ Alibaba Cloud アカウントに属していることを確認してください。 |
| 41050010 | FILE_TRANS_TASK_EXPIRED | 認識タスクの有効期限が切れています。 | タスク ID が有効で、期限切れでないことを確認してください。 |
| 41050011 | REQUEST_INVALID_FILE_URL_VALUE | file_link パラメーターが無効です。 | file_link のフォーマットを確認してください。 |
| 41050012 | REQUEST_INVALID_CALLBACK_VALUE | callback_url パラメーターが無効です。 | callback_url のフォーマットを確認してください。 |
| 41050013 | REQUEST_PARAMETER_INVALID | リクエストパラメーターが無効です。 | リクエストボディが有効な JSON 文字列であることを確認してください。 |
| 41050014 | REQUEST_EMPTY_APPKEY_VALUE | appkey パラメーターがありません。 | リクエストに appkey パラメーターを追加してください。 |
| 41050015 | REQUEST_APPKEY_UNREGISTERED | appkey パラメーターが無効です。 | appkey が有効で、AccessKey ID と同じ Alibaba Cloud アカウントに属していることを確認してください。 |
| 41050021 | RAM_CHECK_FAILED | RAM ユーザーの認証に失敗しました。 | RAM ユーザーが Intelligent Speech Interaction API を呼び出す権限を持っていることを確認してください。 |
| 41050023 | CONTENT_LENGTH_CHECK_FAILED | Content-Length ヘッダーが無効です。 | HTTP レスポンスヘッダーの Content-Length の値が実際のファイルサイズと一致していることを確認してください。 |
| 41050024 | FILE_404_NOT_FOUND | 指定された URL に音声ファイルが存在しません。 | ファイルが URL に存在することを確認してください。 |
| 41050025 | FILE_403_FORBIDDEN | 音声ファイルへのアクセスが拒否されました。 | ファイルがパブリックにアクセス可能であることを確認してください。 |
| 41050026 | FILE_SERVER_ERROR | ファイルサーバーエラーが発生しました。 | ファイルサーバーが正常に動作していることを確認してください。 |
| 51050000 | INTERNAL_ERROR | 内部エラーが発生しました。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
| 51050001 | VAD_FAILED | 音声アクティビティ検出 (VAD) に失敗しました。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
| 51050002 | RECOGNIZE_FAILED | ASR に失敗しました。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
| 51050003 | RECOGNIZE_INTERRUPT | ASR が中断されました。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
| 51050004 | OFFER_INTERRUPT | タスクをキューに書き込めませんでした。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
| 51050005 | FILE_TRANS_TIMEOUT | タスクがタイムアウトしました。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
| 51050006 | FRAGMENT_FAILED | マルチチャネル音声からモノラルへの変換に失敗しました。 | 断続的な場合は無視してください。エラーが再発する場合は、チケットを起票してください。 |
バージョン情報
録音ファイル認識サービスは、既存の統合ではデフォルトでバージョン 2.0 になります。バージョンを 4.0 に設定せずに録音ファイル認識サービスを有効にした場合、そのバージョンはデフォルトで 2.0 になります。このバージョンを引き続き使用できます。新規ユーザーの場合は、version を 4.0 に設定してください。
主な違い:バージョン 2.0 では、コールバック応答はポーリング応答とは異なるスネークケースの JSON フォーマットを使用します。バージョン 4.0 では、両方とも同じキャメルケースのフォーマットを使用します。
バージョン 2.0 のコールバック応答の例
{
"result": [{
"begin_time": 340,
"channel_id": 0,
"emotion_value": 5.0,
"end_time": 2365,
"silence_duration": 0,
"speech_rate": 177,
"text": "北京の天気"
}],
"task_id": "3f5d4c0c399511e98dc025f34473****",
"status_code": 21050000,
"status_text": "SUCCESS",
"request_time": 1551164878830,
"solve_time": 1551164879230,
"biz_duration": 2956
}