WebSocket Service

この項では言語識別の WebSocket API について述べます。

📘

当ページでは、2023年6月22日に更新した LID の仕様について説明しています

従来の LID の仕様を確認する場合はこちら(旧ドキュメント)を参照ください。

接続情報

URL: wss://service.mimi.fd.ai

概要

言語識別の WebSocket API では以下のサービスを利用できます。

  • 言語識別と同時に音声認識を行う
  • 言語識別のみを行う

どのサービスをどのように利用するかを、言語識別要求時のパラメータとして HTTP リクエストヘッダとして送ってください。

言語識別にあわせて別のサービスを利用する場合は、各サービスのドキュメントを事前に参照ください。
言語識別サービスをご利用の際に指定できるサービスの種類とその指定ルールについては、サービス対応表 を参照ください。

実行結果は JSON 形式で返されます。JSON 形式の応答の構成は、利用するサービスによって異なります。

詳しくは後述の "API Reference"、"応答例(lid) " および "応答例(lidasr)" を参照ください。

📘

ポイント

言語識別と同時に音声認識を行う場合( mimi が定義するカスタム HTTP ヘッダ x-mimi-processlidasr を指定する場合)音声認識サービスに mimi ASR powered by NICT を使用します。

認証

WebSocket API サービスをご利用の際には実行したいサービスに対応するスコープ( スコープ一覧 )を指定して発行したアクセストークンが必要です。
mimi API Console 画面からの操作で取得するには トークンの取得 を参照ください。
APIの実行で取得するには 認証/認可操作 を参照ください。

クエリ文字列でのリクエスト

ブラウザ上で WebSocket API を利用する場合等、 HTTP ヘッダを使った実行時設定の指定ができない場合は、 HTTP ヘッダの代わりにクエリ文字列を使って実行時設定を指定することができます。
クエリ文字列による HTTP ヘッダの代替 の記述を参照ください。

API Reference

言語識別 API の詳細な情報については、API Reference 言語識別を行う を参照ください。

〜 言語識別とあわせて音声認識を利用する場合 〜
音声認識 API の詳細な情報については、API Reference 音声認識( mimi ASR powered by NICT API )を行う を参照ください。

実行

以下は libmimiio 付属のサンプルプログラム mimiio_file を使用した WebSocket サービスの利用例です。
詳細については mimiio_file の --help オプションを参照ください。

実行例(lidasr)

リクエストヘッダ x-mimi-process(mimiio_file では -x オプション)にて lidasr を指定することで言語識別と音声認識を利用することができます。

下記のタブ切り替えで lidasr(言語指定なし) 、lidasr(言語指定あり)の実行例 および mimiio_file のヘルプ を確認できます。
※ mimi ASR powered by NICT で 応答フォーマットを指定するオプション については mimiio_file は未対応です。

./mimiio_file \
-h service.mimi.fd.ai \
-x lidasr \
-p 443 \
-t 95818632-ad20-431b-b7e7-2d509d8f29d9 \
-i $HOME/dev/libmimiio/examples/audio.raw
./mimiio_file \
-h service.mimi.fd.ai \
-x lidasr \
--lid_options "lang=ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil" \
-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

応答例(lidasr)

入力された音声で発話された言語が何語かを識別し、最も信頼度の高い言語で音声認識を行った上で、言語識別・音声認識双方の結果を返却します。

識別範囲はリクエスト時の x-mimi-lid-options の指定(mimiio_file では --lid_options オプション指定)によって異なります。未指定の場合は、デフォルト 4 言語における言語識別を行い「mimi LID lidasr(言語指定なし)」のようなレスポンスとなります。最大 12 言語の指定が可能であるため、x-mimi-lid-options:lang=ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil と指定した場合は「mimi LID lidasr(言語指定あり)」のように 12 言語における信頼度を返します。応答結果の詳細については "API Reference" を参照してください。

# 応答 JSON の要素
#   "type" : 音声認識の型
#   "session_id" : セッションID
#   "status" : 言語識別/音声認識のステータス
#   "response" : 応答配列
#       "asr" : 音声認識応答配列(認識結果は配列で返されます)
#           "result" : 認識結果のテキスト | 認識結果のテキストの発音| ...(パイプ区切りの情報)
#       "lid" : 言語識別応答配列(識別結果は "score" の高い言語順に配列で返されます)
#           "lang" : 言語コード 
#           "score" : 信頼度


# 言語識別ができたタイミングで途中結果( "status": "recog-in-progress" )を返却
{  
    "type": "lidasr#ja|en|zh|ko",
    "session_id": "93616107-9303-499c-a749-9830af7f9451",
    "status": "recog-in-progress",
    "response": {
        "asr": [],
        "lid": [
            {
                "lang": "ja",
                "score": 0.98821
            },
            {
                "lang": "ko",
                "score": 0.011315
            },
            {
                "lang": "zh",
                "score": 0.000349
            },
            {
                "lang": "en",
                "score": 0.000125
            }
        ]
    }
}

# 言語識別応答の信頼度 "score" が最も高かった言語での音声認識結果を併せて最終結果( "status": "recog-finished") 返却
{
    "type": "lidasr#ja|en|zh|ko",
    "session_id": "93616107-9303-499c-a749-9830af7f9451",
    "status": "recog-finished",
    "response": {
        "asr": [
            {
                "result": "とりあえず|トリアエズ|とりあえず|副詞-助詞類接続||||"
            },
            {
                "result": "腹ごしらえ|ハラゴシラエ|腹ごしらえ|名詞-一般||||"
            },
            {
                "result": "|||SENT-START-END||||"
            },
            {
                "result": "|||UTT-END||||"
            }
        ],
        "lid": [
            {
                "lang": "ja",
                "score": 0.98821
            },
            {
                "lang": "ko",
                "score": 0.011315
            },
            {
                "lang": "zh",
                "score": 0.000349
            },
            {
                "lang": "en",
                "score": 0.000125
            }
        ]
    }
}
# 応答 JSON の要素
#   "type" : 音声認識の型
#   "session_id" : セッションID
#   "status" : 言語識別/音声認識のステータス
#   "response" : 応答配列
#       "asr" : 音声認識応答配列(認識結果は配列で返されます)
#           "result" : 認識結果のテキスト | 認識結果のテキストの発音| ...(パイプ区切りの情報)
#       "lid" : 言語識別応答配列(識別結果は "score" の高い言語順に配列で返されます)
#           "lang" : 言語コード 
#           "score" : 信頼度


# 言語識別ができたタイミングで途中結果( "status": "recog-in-progress" )を返却
{
    "type": "lidasr#ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil",
    "session_id": "93616107-9303-499c-a749-9830af7f9451",
    "status": "recog-in-progress",
    "response": {
        "asr": [],
        "lid": [
            {
                "lang": "ja",
                "score": 0.943168
            },  
            {  
                "lang": "ko",
                "score": 0.029825
            },  
            {  
                "lang": "en",
                "score": 0.013436
            },  
            {  
                "lang": "vi",
                "score": 0.00356
            },  
            {  
                "lang": "es",
                "score": 0.00345
            },  
            {  
                "lang": "zh",
                "score": 0.002738
            },  
            {  
                "lang": "id",
                "score": 0.001584
            },  
            {  
                "lang": "my",
                "score": 0.001268
            },  
            {  
                "lang": "fr",
                "score": 0.000646
            },  
            {  
                "lang": "pt-BR",
                "score": 0.000154
            },  
            {  
                "lang": "th",
                "score": 0.00015
            },  
            {  
                "lang": "fil",
                "score": 2.1e-05
            }
        ]
    }
}

# 言語識別応答の信頼度 "score" が最も高かった言語での音声認識結果を併せて最終結果( "status": "recog-finished") 返却
{
    "type": "lidasr#ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil",
    "session_id": "93616107-9303-499c-a749-9830af7f9451",
    "status": "recog-finished",
    "response": {
        "asr": [
            {
                "result": "とりあえず|トリアエズ|とりあえず|副詞-助詞類接続||||"
            },
            {
                "result": "腹ごしらえ|ハラゴシラエ|腹ごしらえ|名詞-一般||||"
            },
            {
                "result": "|||SENT-START-END||||"
            },
            {
                "result": "|||UTT-END||||"
            }
        ],
        "lid": [
            {
                "lang": "ja",
                "score": 0.943168
            },  
            {  
                "lang": "ko",
                "score": 0.029825
            },  
            {  
                "lang": "en",
                "score": 0.013436
            },  
            {  
                "lang": "vi",
                "score": 0.00356
            },  
            {  
                "lang": "es",
                "score": 0.00345
            },  
            {  
                "lang": "zh",
                "score": 0.002738
            },  
            {  
                "lang": "id",
                "score": 0.001584
            },  
            {  
                "lang": "my",
                "score": 0.001268
            },  
            {  
                "lang": "fr",
                "score": 0.000646
            },  
            {  
                "lang": "pt-BR",
                "score": 0.000154
            },  
            {  
                "lang": "th",
                "score": 0.00015
            },  
            {  
                "lang": "fil",
                "score": 2.1e-05
            }
        ]
    }
}

実行例(lid)

下記のタブ切り替えで lid(言語指定なし) 、lid(言語指定あり)の実行例 および mimiio_file のヘルプ を確認できます。

リクエストヘッダ x-mimi-process にて lid を指定(mimiio_file では -x オプション指定)することで言語識別のみを実行します。 lidasr とは異なり、音声認識を実行しません。 入力された音声で発話されている言語が何語かを識別し、その結果だけを返します。

./mimiio_file \
-h service.mimi.fd.ai \
-x lid \
-p 443 \
-t 95818632-ad20-431b-b7e7-2d509d8f29d9 \
-i $HOME/dev/libmimiio/examples/audio.raw
./mimiio_file \
-h service.mimi.fd.ai \
-x lid \
--lid_options "lang=ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil" \
-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

応答例(lid)

リクエストヘッダ x-mimi-lid-options の指定を元に、入力された音声で発話された言語が何語かを識別し、各言語の信頼度を返します。

識別範囲はリクエスト時の x-mimi-lid-options(mimiio_file では --lid_options オプション)の指定によって異なります。未指定の場合は、デフォルト 4 言語における言語識別を行い「mimi LID lidasr(言語指定なし)」のようなレスポンスとなります。最大 12 言語の指定が可能であるため、x-mimi-lid-options:lang=ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil と指定した場合は「mimi LID lidasr(言語指定あり)」のように 12 言語における信頼度を返します。応答結果の詳細については "API Reference" を参照してください。

# 応答 JSON の要素
#   "type" : 音声認識の型
#   "session_id" : セッションID
#   "status" : 言語識別/音声認識のステータス
#   "response" : 言語識別応答配列(識別結果は "score" の高い言語順に配列で返されます)
#        "lang" : 言語コード 
#        "score" : 信頼度

# 言語識別ができたタイミングで途中結果( "status": "recog-in-progress" )を返却
{
    "type": "lid#ja|en|zh|ko",
    "session_id": "1e2f5b7b-ea2c-4ff1-9ae9-023a53d0fb52",
    "status": "recog-in-progress",
    "response": [
        {
            "lang": "ja",
            "score": 0.98821
        },
        {
            "lang": "ko",
            "score": 0.011315
        },
        {
            "lang": "zh",
            "score": 0.000349
        },
        {
            "lang": "en",
            "score": 0.000125
        }
    ]
}

# 言語識別完了のタイミングで最終結果( "status": "recog-finished" )を返却
# ("response" : 言語識別応答配列 は先行して返却した途中結果と同様の結果を返します)
{
    "type": "lid#ja|en|zh|ko",
    "session_id": "1e2f5b7b-ea2c-4ff1-9ae9-023a53d0fb52",
    "status": "recog-finished",
    "response": [
        {
            "lang": "ja",
            "score": 0.98821
        },
        {
            "lang": "ko",
            "score": 0.011315
        },
        {
            "lang": "zh",
            "score": 0.000349
        },
        {
            "lang": "en",
            "score": 0.000125
        }
    ]
}
# 応答 JSON の要素
#   "type" : 音声認識の型
#   "session_id" : セッションID
#   "status" : 言語識別/音声認識のステータス
#   "response" : 言語識別応答配列(識別結果は "score" の高い言語順に配列で返されます)
#        "lang" : 言語コード 
#        "score" : 信頼度

# 言語識別ができたタイミングで途中結果( "status": "recog-in-progress" )を返却
{
    "type": "lid#ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil",
    "session_id": "1e2f5b7b-ea2c-4ff1-9ae9-023a53d0fb52",
    "status": "recog-in-progress",
    "response": [
        {
            "lang": "ja",
            "score": 0.943168
        },
        {
            "lang": "ko",
            "score": 0.029825
        },
        {
            "lang": "en",
            "score": 0.013436
        },
        {
            "lang": "vi",
            "score": 0.00356
        },
        {
            "lang": "es",
            "score": 0.00345
        },
        {
            "lang": "zh",
            "score": 0.002738
        },
        {
            "lang": "id",
            "score": 0.001584
        },
        {
            "lang": "my",
            "score": 0.001268
        },
        {
            "lang": "fr",
            "score": 0.000646
        },
        {
            "lang": "pt-BR",
            "score": 0.000154
        },
        {
            "lang": "th",
            "score": 0.00015
        },
        {
            "lang": "fil",
            "score": 2.1e-05
        }
    ]
}

# 言語識別完了のタイミングで最終結果( "status": "recog-finished" )を返却
# ("response" : 言語識別応答配列 は先行して返却した途中結果 と同様の結果を返します)
{
    "type": "lid#ja|en|zh|ko|vi|th|id|my|es|fr|pt-BR|fil",
    "session_id": "1e2f5b7b-ea2c-4ff1-9ae9-023a53d0fb52",
    "status": "recog-finished",
    "response": [
        {
            "lang": "ja",
            "score": 0.943168
        },
        {
            "lang": "ko",
            "score": 0.029825
        },
        {
            "lang": "en",
            "score": 0.013436
        },
        {
            "lang": "vi",
            "score": 0.00356
        },
        {
            "lang": "es",
            "score": 0.00345
        },
        {
            "lang": "zh",
            "score": 0.002738
        },
        {
            "lang": "id",
            "score": 0.001584
        },
        {
            "lang": "my",
            "score": 0.001268
        },
        {
            "lang": "fr",
            "score": 0.000646
        },
        {
            "lang": "pt-BR",
            "score": 0.000154
        },
        {
            "lang": "th",
            "score": 0.00015
        },
        {
            "lang": "fil",
            "score": 2.1e-05
        }
    ]
}