WebSocket Service
この項では音声認識の WebSocket API について述べます。
接続情報
URL: wss://service.mimi.fd.ai |
概要
音声認識 の WebSocket API では、以下のサービスが利用できます。
- mimi ASR: 日本語音声認識
- mimi ASR powered by NICT: 多言語音声認識 ( NICT )
- Google™ Cloud Speech-to-Text: 多言語音声認識( Google API 連携 ※ 別途契約が必要)
リクエストのパラメータは HTTP リクエストヘッダとして送ってください。
音声認識は、入力音声に対して認識した結果(=応答)を JSON 形式で受け取ることができます。
その JSON 形式の応答の構成と応答取得回数は、利用するサービスによって異なります。
詳しくは後述の "API Reference" および "応答例" を参照ください。
認証
WebSocket APIサービスをご利用の際には実行したいサービスに対応するスコープ( スコープ一覧 )を指定して発行したアクセストークンが必要です。
mimi API Console 画面からの操作で取得するには トークンの取得 を参照ください。
APIの実行で取得するには 認証/認可操作 を参照ください。
クエリ文字列でのリクエスト
ブラウザ上で WebSocket API を利用する場合等、 HTTP ヘッダを使った実行時設定の指定ができない場合は、 HTTP ヘッダの代わりにクエリ文字列を使って実行時設定を指定することができます。
クエリ文字列による HTTP ヘッダの代替 の記述を参照ください。
API Reference
音声認識 API の詳細な情報については、API Reference を参照ください。
- 音声認識( mimi ASR API )を行う
- 音声認識( mimi ASR powered by NICT API )を行う
- 音声認識( Google™ Cloud Speech-to-Text API )を行う
実行
以下は libmimiio 付属のサンプルプログラム mimiio_file を使用した WebSocket サービスの利用例です。
実行例
下記のタブ切り替えで mimi ASR 、mimi ASR powered by NICT (v1) の実行例 および mimiio_file のヘルプ を確認できます。
※ mimi ASR powered by NICT で 応答フォーマットを指定するオプション については mimiio_file
は未対応です。
./mimiio_file \
-h service.mimi.fd.ai \
-x asr \
-p 443 \
-t 95818632-ad20-431b-b7e7-2d509d8f29d9 \
-i $HOME/dev/libmimiio/examples/audio.raw
./mimiio_file \
-h service.mimi.fd.ai \
-x nict-asr \
-p 443 \
-t 95818632-ad20-431b-b7e7-2d509d8f29d9 \
-i $HOME/dev/libmimiio/examples/audio.raw
need option: --host
need option: --input
need option: --port
usage: mimiio_file --host=string --port=int --input=string [options] ...
options:
-h, --host Host name (string)
-p, --port Port (int)
-i, --input Input file s(string)
-t, --token Access token (string [=])
--rate Sampling rate (int [=16000])
--channel Number of channels (int [=1])
--format Audio format (string [=MIMIIO_RAW_PCM])
-l, --input_language input language (string [=ja])
-x, --process x-mimi-process (string [=asr])
--lid_options language identifier options (string [=lang=ja|en|zh|ko])
--verbose Verbose mode
--help Show help
Acceptable audio formats:
MIMIIO_RAW_PCM
MIMIIO_FLAC_0
MIMIIO_FLAC_1
MIMIIO_FLAC_2
MIMIIO_FLAC_3
MIMIIO_FLAC_4
MIMIIO_FLAC_5
MIMIIO_FLAC_6
MIMIIO_FLAC_7
MIMIIO_FLAC_8
MIMIIO_FLAC_PASS_THROUGH
応答例
以下は、mimi ASRと mimi ASR powered by NICT それぞれの応答例とその構成内容についての簡易な説明です。実行例に記載の無い、mimi ASR powered by NICT で応答フォーマットを指定した場合の応答例も挙げています。応答結果の詳細については "API Reference" を参照してください。
# 応答 JSON の要素
# "response" : 応答配列(認識結果は配列で返されます),
# "pronunciation" : 認識結果のテキストの発音
# "result" : 認識結果のテキスト
# "time" : 開始時刻と終了時刻(音声データの始点を起点とした時刻(ミリ秒))
# "session_id" : セッションID
# "status" : 音声認識のステータス
# "type" : 音声認識の型
#
{ "response" : [
{
"pronunciation" : "チョット",
"result" : "ちょっと",
"time" : [ 1350, 1800 ]
}, {
"pronunciation" : "オソイ",
"result" : "遅い",
"time" : [ 1800, 2160 ]
} ],
"session_id" : "f7f10c90-e661-11e9-8f10-42010a9200a5",
"status" : "recog-in-progress",
"type" : "asr#mimilvcsr"
}
:
// (中略) : 認識処理途中で複数回応答が返ってくる
:
{
"response" : [
{
"pronunciation" : "チョット",
"result" : "ちょっと",
"time" : [ 1350, 1800 ]
}, {
"pronunciation" : "オソイ",
"result" : "遅い",
"time" : [ 1800, 2170 ]
}, {
"pronunciation" : "チューショク",
"result" : "昼食",
"time" : [ 2170, 2730 ]
}, {
"pronunciation" : "ヲ",
"result" : "を",
"time" : [ 2730, 2850 ]
}, {
"pronunciation" : "トル",
"result" : "とる",
"time" : [ 2850, 3090 ]
}, {
"pronunciation" : "タメ",
"result" : "ため",
"time" : [ 3090, 3370 ]
}, {
"pronunciation" : "ニ",
"result" : "に",
"time" : [ 3370, 3480 ]
}, {
"pronunciation" : "ファミリー",
"result" : "ファミリー",
"time" : [ 3480, 4000 ]
}, {
"pronunciation" : "レストラン",
"result" : "レストラン",
"time" : [ 4000, 4530 ]
}, {
"pronunciation" : "ニ",
"result" : "に",
"time" : [ 4530, 4620 ]
}, {
"pronunciation" : "ハイッ",
"result" : "入っ",
"time" : [ 4620, 4960 ]
}, {
"pronunciation" : "タ",
"result" : "た",
"time" : [ 4960, 5060 ]
}, {
"pronunciation" : "ノ",
"result" : "の",
"time" : [ 5060, 5180 ]
}, {
"pronunciation" : "デス",
"result" : "です",
"time" : [ 5180, 5630 ]
}
],
"session_id" : "f7f10c90-e661-11e9-8f10-42010a9200a5",
"status" : "recog-finished",
"type" : "asr#mimilvcsr"
}
# 以下の一連のJSONは、カスタムヘッダにて以下を指定した場合のサンプルです。
# x-mimi-nict-asr-options: response_format=v2;progressive=false;temporary=true;temporary_interval=1500
#
# mimi ASR同様、最終結果前の一時結果が返却され、最後のみ確定した結果(最終結果)が返却されます。
#
# 応答 JSON の要素
# "response" : 応答配列(認識結果は配列で返されます),
# "result" : 認識結果のテキスト
# "determined" : 確定した結果かどうか
# "time" : 該当応答の発話中における開始時刻刻(ミリ秒)
# "session_id" : セッションID
# "status" : 音声認識のステータス
# "type" : 音声認識の型
{
"type": "asr#nictlvcsr2",
"session_id": "978966fc-286d-4779-a2f5-d460ab8914e5",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと",
"words": [
"ちょっと"
],
"determined": false,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "978966fc-286d-4779-a2f5-d460ab8914e5",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと遅い昼食をとる",
"words": [
"ちょっと",
"遅い",
"昼食",
"を",
"とる"
],
"determined": false,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "978966fc-286d-4779-a2f5-d460ab8914e5",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと遅い昼食をとるためファミリーレストランに",
"words": [
"ちょっと",
"遅い",
"昼食",
"を",
"とる",
"ため",
"ファミリーレストラン",
"に"
],
"determined": false,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "978966fc-286d-4779-a2f5-d460ab8914e5",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと遅い昼食をとるためファミリーレストランに入ったの",
"words": [
"ちょっと",
"遅い",
"昼食",
"を",
"とる",
"ため",
"ファミリーレストラン",
"に",
"入っ",
"た",
"の"
],
"determined": false,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "978966fc-286d-4779-a2f5-d460ab8914e5",
"status": "recog-finished",
"response": [
{
"result": "ちょっと遅い昼食をとるためファミリーレストランに入ったのです。",
"words": [
"ちょっと",
"遅い",
"昼食",
"を",
"とる",
"ため",
"ファミリーレストラン",
"に",
"入っ",
"た",
"の",
"です"
],
"determined": true,
"time": 0
}
]
}
# 以下の一連のJSONは、カスタムヘッダにて以下を指定した場合のサンプルです。
# x-mimi-nict-asr-options: response_format=v2;progressive=true;temporary=true;temporary_interval=1500
#
# progressive=trueの指定をすると、最終結果より前に "確定した部分結果" が返却されます。
# "確定した部分結果" とは "determined": true となる応答を指します。
#
# 応答 JSON の要素
# "response" : 応答配列(認識結果は配列で返されます),
# "result" : 認識結果のテキスト
# "determined" : 確定した結果かどうか
# "time" : 該当応答の発話中における開始時刻刻(ミリ秒)
# "session_id" : セッションID
# "status" : 音声認識のステータス
# "type" : 音声認識の型
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと",
"words": [
"ちょっと"
],
"determined": false,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと遅い昼食をとる",
"words": [
"ちょっと",
"遅い",
"昼食",
"を",
"とる"
],
"determined": false,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-in-progress",
"response": [
{
"result": "ちょっと遅い",
"words": [
"ちょっと",
"遅い"
],
"determined": true,
"time": 0
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-in-progress",
"response": [
{
"result": "昼食をとるためファミリーレストランに",
"words": [
"昼食",
"を",
"とる",
"ため",
"ファミリーレストラン",
"に"
],
"determined": false,
"time": 1380
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-in-progress",
"response": [
{
"result": "昼食をとるためファミリーレストランに入ったの",
"words": [
"昼食",
"を",
"とる",
"ため",
"ファミリーレストラン",
"に",
"入っ",
"た",
"の"
],
"determined": false,
"time": 1380
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-in-progress",
"response": [
{
"result": "昼食をとるためファミリーレストランに",
"words": [
"昼食",
"を",
"とる",
"ため",
"ファミリーレストラン",
"に"
],
"determined": true,
"time": 1380
}
]
}
{
"type": "asr#nictlvcsr2",
"session_id": "a36cf472-9afc-4b29-8353-04303604364e",
"status": "recog-finished",
"response": [
{
"result": "入ったのです。",
"words": [
"入っ",
"た",
"の",
"です"
],
"determined": true,
"time": 4140
}
]
}
# 応答 JSON の要素
# "type" : 音声認識の型
# "session_id" : セッションID
# "status" : 音声認識のステータス
# "response" : 応答配列(認識結果は配列で返されます)
# "result" : 認識結果のテキスト | 認識結果のテキストの発音| ...(パイプ区切りの情報)
#
{
"type": "asr#nictlvcsr",
"session_id": "058720ce-e65d-11e9-ae3b-42010a92008f",
"status": "recog-finished",
"response": [
{
"result": "ちょっと|チョット|ちょっと|副詞-助詞類接続||||"
},
{
"result": "遅い|オソイ|遅い|形容詞-自立|形容詞・アウオ段|基本形||"
},
{
"result": "昼食|チュウショク|昼食|名詞-一般||||"
},
{
"result": "を|ヲ|を|助詞-格助詞-一般||||"
},
{
"result": "とる|トル|とる|動詞-自立|五段・ラ行|基本形||"
},
{
"result": "ため|タメ|ため|名詞-非自立-副詞可能||||"
},
{
"result": "ファミリーレストラン|ファミリーレストラン|ファミリーレストラン|名詞-一般||||"
},
{
"result": "に|ニ|に|助詞-格助詞-一般||||"
},
{
"result": "入っ|ハイッ|入る|動詞-自立|五段・ラ行|連用タ接続||"
},
{
"result": "た|タ|た|助動詞|特殊・タ|基本形||"
},
{
"result": "の|ノ|の|名詞-非自立-一般||||"
},
{
"result": "です|デス|です|助動詞|特殊・デス|基本形||"
},
{
"result": "|||SENT-START-END||||"
},
{
"result": "|||UTT-END||||"
}
]
}
サードパーティの WebSocket ライブラリを使う場合の注意
現時点では、 mimi サーバーは RFC6455 の 5.4 項の Fragmentation に対応しておりません。クライアントは fragmented frames を送信しないでください。
HTTP リクエストヘッダにアクセストークンの値を設定してアクセスすることで、実行時に特定のサービスだけを実行させることができます。 実行時に受け付けるサービスについての値設定に関する詳細情報は項目パラメータを参照ください。
ASR の種類によって応答の形式やタイミングが異なります。WebSocket で mimi ASR を指定して音声認識を行う場合、指定の音声データの認識処理の途中経過のテキストをリアルタイムで取得することができます。WebSocket で mimi ASR powered by NICT を指定して音声認識を行う場合、認識処理が完了した後でテキストを取得することができます。
Updated over 2 years ago