IBM Cloud Docs
同期 HTTP インターフェース

同期 HTTP インターフェース

IBM Watson® Speech to Text サービスの同期 HTTP インターフェースでは、サービスによる音声認識を要求するための単一の POST /v1/recognize メソッドが用意されています。 このメソッドは、書き起こし結果を得るための最も簡単な方法です。 このメソッドでは、次の 2 つの方法で音声認識要求を送信できます。

  • 最初の方法では、要求の本体を介して単一のストリームですべての音声を送信します。 操作のパラメーターは、要求ヘッダーおよびクエリー・パラメーターとして指定します。 詳しくは、基本的な HTTP 要求の実行を参照してください。
  • 2 番目の方法では、音声をマルチパート要求として送信します。 この要求のパラメーターは、要求ヘッダー、クエリー・パラメーター、および JSON メタデータの組み合わせとして指定します。 詳しくは、マルチパート HTTP 要求の実行を参照してください。

単一の要求で、100 バイトから 100 MB までの音声データを送信できます。 音声フォーマットについて、および圧縮を使用して要求で送信できる音声の量を最大化する方法については、サポートされる音声フォーマットを参照してください。 HTTP インターフェースのすべてのメソッドに関する情報は 、API & SDKリファレンスを参照してください。

基本的な HTTP 音声認識要求の作成

HTTP の POST /v1/recognize メソッドを使用すると、音声を簡単に書き起こすことができます。 要求の本体を通じてすべての音声を渡して、要求ヘッダーおよびクエリー・パラメーターとしてパラメーターを指定します。

このメソッドは、要求のすべての音声を処理した後にのみ結果を返します。 このメソッドはバッチ処理には適していますが、ライブ音声認識には適していません。 ライブ音声を書き起こす場合は、WebSocket インターフェースを使用してください。

データが複数の音声ファイルからなる場合に推奨される音声の送信方法は、複数の要求 (音声ファイルごとに 1 つの要求) を送信することです。 複数の要求をループで送信して、オプションで並列処理を使用してパフォーマンスを向上させることができます。 マルチパート音声認識を使用して、複数の音声ファイルを単一の要求を通じて渡すこともできます。

基本要求の例

以下の例では、audio-file.flacという名前の単一 FLAC ファイルに対する認識要求を送信します。 この要求では model クエリー・パラメーターを省略して、デフォルト言語モデル en-US_BroadbandModel を使用しています。 詳細は 、「デフォルトモデルの使用 」を参照してください。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/flac" \
--data-binary @{path}audio-file.flac \
"{url}/v1/recognize"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/flac" \
--data-binary @{path}audio-file.flac \
"{url}/v1/recognize"

上記の例では、対象の音声に対して次の書き起こし結果が返されます。

{
  "result_index": 0,
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.96,
          "transcript": "several tornadoes touch down as a line of severe thunderstorms swept through Colorado on Sunday "
        }
      ],
      "final": true
    }
  ]
}

マルチパート HTTP 音声認識要求の作成

非同期 HTTP インターフェース、WebSocket インターフェース、および Watson SDK は、マルチパート音声認識をサポートしません。

POST /v1/recognize メソッドは、音声認識のマルチパート要求もサポートします。 すべての音声データをマルチパート・フォーム・データとして渡します。 一部のパラメーターは要求ヘッダーおよびクエリー・パラメーターとして指定しますが、JSON メタデータをフォーム・データとして渡すことで、書き起こしのほとんどの局面を制御します。

マルチパート音声認識は、次のユース・ケースを想定しています。

  • 複数の音声ファイルを単一の音声認識要求を通じて渡す場合。
  • JavaScript が無効化されているブラウザーを使用する場合。 フォーム・データに基づくマルチパート要求には、JavaScript を使用する必要がありません。
  • 認識要求のパラメーターが、ほとんどの HTTP サーバーおよびプロキシーで上限として設定されている 8 KB を超えている場合。 例えば、非常に多くのキーワードを検出する場合は、要求のサイズがこの上限を超えることがあります。 マルチパート要求は、フォーム・データを使用してこの制約を回避します。

以降のセクションでは、マルチパート要求で使用するパラメーターを説明して、要求の例を紹介します。

マルチパート要求のパラメーター

いくつかのパラメーターを、フォーム・データ、要求ヘッダー、または照会パラメーターとして指定します。 要求ヘッダーおよび照会パラメーターについて詳しくは、パラメーターの要約を参照してください。

フォーム・データ

マルチパート音声認識要求の以下のパラメーターをフォーム・データとして指定します。

metadata (必須オブジェクト)
要求の書き起こしパラメーター を提供する JSON オブジェクト。 このオブジェクトはフォーム・データの最初のパート でなければなりません。 この情報は、フォーム・データの後続パート内の 音声を説明しています。 マルチパート要求 の JSON メタデータを参照してください。
upload (必須ファイル)
要求のフォーム・データの残り部分 としての 1 つ以上の音声ファイル。 すべての音声ファイルは同じフォーマットである必要があります。 curl コマンドでは、要求のファイルごとに 1 つの 別個の --form オプションを指定してください。

要求ヘッダー

以下のパラメーターを要求ヘッダーとして指定します。

Content-Type (必須ストリング)
multipart/form-data を指定して、このメソッドにデータが どのように渡されるのかを指定します。 JSON の part_content_type パラメーターを使用して、 音声のコンテンツ・タイプを指定します。
Transfer-Encoding (任意指定ストリング)
chunked を指定して、音声データをサービスに ストリーミングします。 すべての音声を単一の要求で送信する場合は、このパラメーターを省略します。

照会パラメーター

以下のパラメーターを照会パラメーターとして指定します。

model (任意指定ストリング)
要求で使用するモデル の ID。 デフォルトは en-US_BroadbandModel です。 詳細は 、「デフォルトモデルの使用 」を参照してください。
language_customization_id (任意指定ストリング)
要求で使用するカスタム 言語モデルの GUID。
acoustic_customization_id (任意指定ストリング)
要求で使用する カスタム音響モデルの GUID。
base_model_version (任意指定ストリング)
要求で使用する指定した 基本モデルのバージョン。

マルチパート要求の JSON メタデータ

マルチパート要求を通じて渡す JSON メタデータには、以下のフィールドを含めることができます。

  • part_content_type (string)
  • data_parts_count (integer)
  • customization_weight (number)
  • inactivity_timeout (integer)
  • keywords (ストリング[])
  • keywords_threshold (number)
  • max_alternatives (integer)
  • word_alternatives_threshold (number)
  • word_confidence (boolean)
  • timestamps (boolean)
  • profanity_filter (boolean)
  • smart_formatting (boolean)
  • speaker_labels (boolean)
  • grammar_name (string)
  • redaction (boolean)
  • end_of_phrase_silence_time (double)
  • split_transcript_at_phrase_end (boolean)
  • speech_detector_sensitivity (number)
  • background_audio_suppression (number)
  • low_latency (boolean)
  • character_insertion_bias (浮動小数点)

マルチパート要求専用のパラメーターは以下の 2 つのみです。

  • part_content_type フィールドは、ほとんどの音声フォーマットではオプション です。 このフィールドが必須となるフォーマットは、audio/alawaudio/basicaudio/l16、および audio/mulaw です。 このフィールドでは、要求の後続パート内の音声のフォーマットを指定します。 すべての音声ファイルは同じフォーマットである必要があります。
  • data_parts_count フィールドは、すべての要求でオプション です。 このフィールドでは、その要求を通じて送信される音声ファイルの数を指定します。 サービスは、ストリーム終了検知を最後の (おそらく唯一の) データ・パートで実施します。 このパラメーターを省略すると、サービスによって要求からパートの数が判別されます。

メタデータの他のすべてのパラメーターはオプションです。 すべての使用可能なパラメーターについて詳しくは、パラメーターの要約を参照してください。

マルチパート要求の例

以下の例は、POST /v1/recognize メソッドを使用してマルチパート認識要求を渡す方法を示しています。 この要求によって、2 つの音声ファイル audio-file1.flac および audio-file2.flac を渡します。 metadata パラメーターでは、この要求のほとんどのパラメーターを指定し、upload パラメーターでは音声ファイルを指定します。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: multipart/form-data" \
--form metadata="{\"part_content_type\":\"application/octet-stream\", \
  \"data_parts_count\":2, \
  \"timestamps\":true, \
  \"word_alternatives_threshold\":0.9, \
  \"keywords\":[\"colorado\",\"tornado\",\"tornadoes\"], \
  \"keywords_threshold\":0.5}" \
--form upload="@{path}audio-file1.flac" \
--form upload="@{path}audio-file2.flac" \
"{url}/v1/recognize"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: multipart/form-data" \
--form metadata="{\"part_content_type\":\"application/octet-stream\", \
  \"data_parts_count\":2, \
  \"timestamps\":true, \
  \"word_alternatives_threshold\":0.9, \
  \"keywords\":[\"colorado\",\"tornado\",\"tornadoes\"], \
  \"keywords_threshold\":0.5}" \
--form upload="@{path}audio-file1.flac" \
--form upload="@{path}audio-file2.flac" \
"{url}/v1/recognize"

上記の例では、指定された音声ファイルに対して次の書き起こし結果が返されます。 これら 2 つのファイルが送信された順序で、これらのファイルの結果が返されます (この例の出力では、2 つ目のファイルの結果を省略表記しています)。

{
  "result_index": 0,
  "results": [
    {
      "word_alternatives": [
        {
          "start_time": 0.03,
          "alternatives": [
            {
              "confidence": 0.96,
              "word": "the"
            }
          ],
          "end_time": 0.09
        },
        {
          "start_time": 0.09,
          "alternatives": [
            {
              "confidence": 0.96,
              "word": "latest"
            }
          ],
          "end_time": 0.62
        },
        {
          "start_time": 0.62,
          "alternatives": [
            {
              "confidence": 0.96,
              "word": "weather"
            }
          ],
          "end_time": 0.87
        },
        {
          "start_time": 0.87,
          "alternatives": [
            {
              "confidence": 0.96,
              "word": "report"
            }
          ],
          "end_time": 1.5
        }
      ],
      "keywords_result": {},
      "alternatives": [
        {
          "timestamps": [
            [
              "the",
              0.03,
              0.09
            ],
            [
              "latest",
              0.09,
              0.62
            ],
            [
              "weather",
              0.62,
              0.87
            ],
            [
              "report",
              0.87,
              1.5
            ]
          ],
          "confidence": 0.99,
          "transcript": "the latest weather report "
        }
      ],
      "final": true
    },
    {
      "word_alternatives": [
        {
          "start_time": 0.15,
          "alternatives": [
            {
              "confidence": 1.0,
              "word": "a"
            }
          ],
          "end_time": 0.3
        },
        {
          "start_time": 0.3,
          "alternatives": [
            {
              "confidence": 1.0,
              "word": "line"
            }
          ],
          "end_time": 0.64
        },
        . . .
        {
          "start_time": 4.58,
          "alternatives": [
            {
              "confidence": 0.98,
              "word": "Colorado"
            }
          ],
          "end_time": 5.16
        },
        {
          "start_time": 5.16,
          "alternatives": [
            {
              "confidence": 0.98,
              "word": "on"
            }
          ],
          "end_time": 5.32
        },
        {
          "start_time": 5.32,
          "alternatives": [
            {
              "confidence": 0.98,
              "word": "Sunday"
            }
          ],
          "end_time": 6.04
        }
      ],
      "keywords_result": {
        "tornadoes": [
          {
            "normalized_text": "tornadoes",
            "start_time": 3.03,
            "confidence": 0.98,
            "end_time": 3.84
          }
        ],
        "colorado": [
          {
            "normalized_text": "Colorado",
            "start_time": 4.58,
            "confidence": 0.98,
            "end_time": 5.16
          }
        ]
      },
      "alternatives": [
        {
          "timestamps": [
            [
              "a",
              0.15,
              0.3
            ],
            [
              "line",
              0.3,
              0.64
            ],
            . . .
            [
              "Colorado",
              4.58,
              5.16
            ],
            [
              "on",
              5.16,
              5.32
            ],
            [
              "Sunday",
              5.32,
              6.04
            ]
          ],
          "confidence": 0.99,
          "transcript": "a line of severe thunderstorms with several
possible tornadoes is approaching Colorado on Sunday "
        }
      ],
      "final": true
    }
  ]
}