Object Storageファイルの認識
    • PDF

    Object Storageファイルの認識

    • PDF

    記事の要約

    Classic/VPC環境で利用できます。

    NAVERクラウドプラットフォームの Object Storageにアップロードしたオーディオ/ビデオファイルの固有の URLを呼び出して認識し、テキストに変換します。

    リクエスト

    リクエスト形式を説明します。リクエスト形式は次の通りです。

    メソッドURI
    POST/recognizer/object-storage

    リクエストヘッダ

    CLOVA Speech APIで共通して使用されるヘッダの詳細は、CLOVA Speechの共通ヘッダをご参照ください。

    リクエストボディ

    リクエストボディの説明は次の通りです。

    フィールドタイプ必須の有無説明
    datakeyStringRequiredオーディオ/ビデオファイルの保存先の Object Storageパス
    • Domain作成時に「認識対象の保存パス」の下位項目から入力
      • <例> Object Storageのパスが「/data/sample.wav」で、Domain作成時に指定された認識対象の保存パスが「/data」の場合: "dataKey": "/sample.wav"
    languageStringRequiredテキスト認識言語
    • ko-KR(デフォルト) | en-US | enko | ja | zh-cn | zh-tw
      • ko-kR: 韓国語
      • en-US: 英語
      • enko: 韓国語/英語を同時認識
      • ja: 日本語
      • zh-cn: 中国語(簡体字)
      • zh-tw: 中国語(繁体字)
    completionStringOptional認識リクエスト後のレスポンス方法
    • sync | async(デフォルト)
      • sync(同期): 結果を JSON形式で返す
      • async(非同期): Callback URLまたはresultToObs (ObjectStorage)形式で返す
    callbackStringConditionalCallback URL
    • completionasyncの場合、callbackまたはresultToObsのうちどちらかは必ず入力
    userdataObjectOptionalユーザーデータの詳細情報
    wordAlignmentBooleanOptional認識結果の音声とテキストをソートして出力するかどうか
    • true(デフォルト) | false
      • true: 出力
      • false: 出力しない
    fullTextBooleanOptional認識結果の全テキストを出力するかどうか
    • true(デフォルト) | false
      • true: 出力
      • false: 出力しない
    resultToObsBooleanConditionalObject Storageに結果を保存するかどうか
    • true | false(デフォルト)
      • true: 結果を保存
      • false: 結果を保存しない
    • completionasyncの場合、callbackまたはresultToObsのうちどちらかは必ず入力
    noiseFilteringBooleanOptionalノイズフィルタリングの有無
    • true(デフォルト) | false
      • true: フィルタリングは動作
      • false: フィルタリングは動作しない
    boostingsArrayOptionalキーワードブーストの詳細情報
    • 音声認識率を上げるキーワードリスト
    • useDomainBoostingsと同時使用はできない
    • 最大1,000個まで入力可能
    • ハングル、英語のみサポート
      • 英語: 基本的に小文字に変換、大文字キーワードブーストのリクエスト時は大文字に置換
    • 1音節の単語は誤認識のリスクがあるため、ブーストをサポートしない
      • <例> はい, うん, no
    • スペースの有無に関係なくブースト処理
      • <例> 「クローバースピーチ」と「クローバー スピーチ」のうちどちらか1つのキーワードのみブーストをリクエスト
    • キーワードの長さの制限はないが、ブーストする対象が複数の単語が組み合わされた語句である場合、その語句でなければブーストの影響を受けにくい
      • <例> 「クローバースピーチ」というキーワードをブーストする場合、「クローバースピーチ」を含むすべての文はブーストの影響を受ける
      • <例> 「クローバースピーチのメディア音声認識技術」という組み合わせの長いキーワードをブーストする場合、「クローバースピーチ」だけ含む文はブーストの影響を受けにくい
    useDomainBoostingsBooleanOptionalドメインブーストの使用有無
    • true | false(デフォルト)
      • true: ブーストを使用
      • false: ブーストを使用しない
    • boostingsと同時使用はできない
    forbiddensStringOptional要注意キーワード
    • 音声認識率を下げるキーワードリスト(認識結果に表示したくない場合)
    • キーワード数と長さの制限なし
    • スペース、英字の大文字・小文字のいずれも完全一致が必要
    diarizationObjectOptional話者認識の詳細設定
    diarization.enableBooleanOptional話者認識するかどうか
    • true(デフォルト) | false
      • true: 話者を認識
      • false: 話者を認識しない
    sedObjectOptionalイベント検知結果の詳細情報
    sed.enableBooleanOptionalイベント検知するかどうか
    • true | false(デフォルト)
      • true: イベントを検知
      • false: イベントを検知しない
    formatStringOptionalレスポンス結果を返す形式
    • JSON(デフォルト) | SRT | SMI

    boostings

    boostingsの説明は次の通りです。

    フィールドタイプ必須の有無説明
    wordsStringOptionalキーワードブースト対象の単語リスト
    参考

    completion(リクエスト後のレスポンス方式)をasyncにしてリクエストすると、入力した Callback URLアドレスの有無や resultToObs(ObjectStorage)の有無に応じて認識結果を次のように返します。

    Callback URLresultToObs(ObjectStorage)結果
    URLアドレスありTrueCallback URLと Object Storageの両方に結果を返す
    URLアドレスありFalseCallback URLにのみ結果を返す
    URLアドレスなしTrueObject Storageにのみ結果を返す
    URLアドレスなしFalseエラーを返す

    リクエスト例

    リクエストのサンプルコードは次の通りです。

    curl --location --request POST 'https://clovaspeech-gw.ncloud.com/external/v1/88**/5f7e1b4c866f1c60594****************/recognizer/object-storage' \
    --header 'Content-Type: application/json' \
    --header 'X-CLOVASPEECH-API-KEY: {アプリの登録時に発行された Secret Key}' \
    --data '{
        "dataKey": "{file}.mp3",
        "language": "ko-KR",
        "completion":"sync",
        "callback": "",
        "fullText": true,
        "boostings": [
            {
                "words": "comma separated words"
            }
        ],
        "forbiddens": "comma separated words"
    }'
    

    レスポンス

    レスポンス形式を説明します。

    レスポンスボディ

    レスポンスボディの説明は次の通りです。

    フィールドタイプ必須の有無説明
    resultString-レスポンスコード
    messageString-レスポンスメッセージ
    tokenString-結果トークン
    versionString-エンジンバージョン
    paramsObject-パラメータの詳細情報
    params.serviceString-サービスコード
    params.domainString-ドメインのタイプ
    • エンジンの呼び出し時に使用
    • general
    params.langString-認識言語
    • ko | en | enko | ja | zh-cn | zh-tw
      • ko: 韓国語
      • en: 英語
      • enko: 韓国語/英語を同時に翻訳
      • ja: 日本語
      • zh-cn: 中国語(簡体字)
      • zh-tw: 中国語(繁体字)
    params.completionString-レスポンス方法
    • sync(同期): 結果を JSON形式で返す
    • async(非同期): Callback URLまたはresultToObs (ObjectStorage)形式で返す
    params.callbackString-Callback URL
    params.diarizationObject-話者認識の詳細情報
    params.diarization.enableBoolean-話者認識するかどうか
    • true | false
      • true: 話者を認識
      • false: 話者を認識しない
    params.diarization.speakerCountMinInteger-最小話者数
    params.diarization.speakerCountMaxInteger-最大話者数
    params.sedObject-イベント検知結果
    params.sed.enableBoolean-イベント検知するかどうか
    • true | false(デフォルト)
      • true: イベントを検知
      • false: イベントを検知しない
    params.boostingsArray-キーワードブーストの詳細情報
    params.forbiddensString-要注意キーワード
    params.wordAlignmentBooleanOptional認識結果の音声とテキストをソートして出力するかどうか
    • true(デフォルト) | false
      • true: 出力
      • false: 出力しない
    params.fullTextBoolean-認識結果の全テキストを出力するかどうか
    • true(デフォルト) | false
      • true: 出力
      • false: 出力しない
    params.noiseFilteringBoolean-ノイズフィルタリングの有無
    • true(デフォルト) | false
      • true: フィルタリングは動作
      • false: フィルタリングは動作しない
    params.resultToObsBoolean-Object Storageに結果を保存するかどうか
    • completionasyncの場合にのみ動作
    • true | false(デフォルト)
      • true: 結果を保存
      • false: 結果を保存しない
    params.priorityInteger-優先順位
    • 0~4
    • 低いほど優先順位が高い
    params.userdataObject-ユーザーデータの詳細情報
    params.userdata._ncp_DomainCodeString-ドメインコード
    • long-speech | short-speech
      • long-speech: 長文認識
      • short-speech: 短文認識
    params.userdata._ncp_DomainIdInteger-ドメイン ID
    params.userdata._ncp_TaskIdInteger-タスク ID
    • 具体的な認識タスクのトレース時に使用
    params.userdata._ncp_TraceIdString-トレース ID
    • ログのトレース時に使用
    progressInteger-認識進捗率
    segmentsArray-segmentsの詳細情報
    textString-全テキスト
    confidenceDouble-全体の精度
    speakersArray-全話者の詳細情報
    eventsArray-イベントの詳細情報
    eventTypesArray-認識された全イベントの詳細情報

    params.boostings

    params.boostingsの説明は次の通りです。

    フィールドタイプ必須の有無説明
    wordsString-キーワードブースト対象の単語リスト

    segments

    segmentsの説明は次の通りです。

    フィールドタイプ必須の有無説明
    startLong-分析開始時刻(ms)
    endLong-分析終了時刻(ms)
    textString-分析テキスト
    confidenceDouble-分析の精度
    • 0.0~1.0
    diarizationObject-認識された話者の詳細情報
    diarization.labelString-認識された話者の番号
    speakerObject-変更後の話者の詳細情報
    speaker.labelString-変更後の話者の番号
    speaker.nameString-変更後の話者の名前
    speaker.editedBoolean-話者は変更されたかどうか
    • true | false(デフォルト)
      • true: 話者を変更
      • false: 同じ話者
    wordsArray<Long, Long, String>-認識された単語リスト
    words.[0]Long-セグメント開始時刻(ms)
    words.[1]Long-セグメント終了時刻(ms)
    words.[2]String-セグメントテキスト
    textEditedString-変更後の内容

    speakers

    speakersの説明は次の通りです。

    フィールドタイプ必須の有無説明
    labelString-すべての話者の番号
    nameString-すべての話者の名前
    editedBoolean-話者は変更されたかどうか
    • true | false(デフォルト)
      • true: 話者を変更
      • false: 同じ話者

    events

    eventsの説明は次の通りです。

    フィールドタイプ必須の有無説明
    typeString-イベントタイプ
    labelString-イベント名
    labelEditedString-変更後のイベント名
    startLong-イベントの開始時刻
    endLong-イベントの終了時刻

    eventTypes

    eventTypesの説明は次の通りです。

    フィールドタイプ必須の有無説明
    labelString-認識されたイベント

    レスポンスステータスコード

    CLOVA Speech APIで共通して使用されるレスポンスステータスコードの詳細は、CLOVA Speechの共通レスポンスステータスコードをご参照ください。

    レスポンス例

    レスポンスのサンプルコードは次の通りです。

    asyncでリクエストして jsonで返す

    asyncでリクエストして json形式で返すレスポンスのサンプルコードは次の通りです。

    {
        "token": "{token}",
        "result": "SUCCEEDED",
        "message": "Succeeded"
    }
    

    syncでリクエストして jsonで返す

    syncでリクエストして json形式で返すレスポンスのサンプルコードは次の通りです。

    {
        "result": "COMPLETED",
        "message": "Succeeded",
        "token": "{token}",
        "version": "ncp_v2_v2.3.0-aa6cd8d-20231205_231211-3cf30bfc_v0.0.0_",
        "params": {
            "service": "ncp",
            "domain": "general",
            "lang": "enko",
            "completion": "sync",
            "callback": "",
            "diarization": {
                "enable": true,
                "speakerCountMin": -1,
                "speakerCountMax": -1
            },
            "sed": {
                "enable": true
            },
            "boostings": [
                {
                    "words": "こんにちは。テスト"
                }
            ],
            "forbiddens": "",
            "wordAlignment": true,
            "fullText": true,
            "noiseFiltering": true,
            "resultToObs": false,
            "priority": 0,
            "userdata": {
                "_ncp_DomainCode": "NEST",
                "_ncp_DomainId": 1,
                "_ncp_TaskId": **442,
                "_ncp_TraceId": "*****ce98ec342d8a8c8fe9191cec343",
                "id": 1
            }
        },
        "progress": 100,
        "keywords": {},
        "segments": [
            {
                "start": 5870,
                "end": 8160,
                "text": "ソウルのプールです。",
                "confidence": 0.9626975,
                "diarization": {
                    "label": "2"
                },
                "speaker": {
                    "label": "2",
                    "name": "B",
                    "edited": false
                },
                "words": [
                    [
                        5871,
                        6730,
                        "ソウル"
                    ],
                    [
                        6860,
                        7530,
                        "プールです。"
                    ]
                ],
                "textEdited": "ソウルのプールです。"
            },
            {
                "start": 8160,
                "end": 12950,
                "text": "入場料はいくらですか? 5千ウォンです。ありがとうございます。",
                "confidence": 0.8835926,
                "diarization": {
                    "label": "1"
                },
                "speaker": {
                    "label": "1",
                    "name": "A",
                    "edited": false
                },
                "words": [
                    [
                        8161,
                        9220,
                        "入場料は"
                    ],
                    [
                        9390,
                        10020,
                        "いくらですか?"
                    ],
                    [
                        10410,
                        10640,
                        "5千"
                    ],
                    [
                        10710,
                        11140,
                        "ウォンです。"
                    ],
                    [
                        11910,
                        12500,
                        "ありがとうございます。"
                    ]
                ],
                "textEdited": "入場料はいくらですか? 5千ウォンです。ありがとうございます。"
            }
        ],
        "text": "ソウルのプールです。入場料はいくらですか? 5千ウォンです。ありがとうございます。",
        "confidence": 0.9071357,
        "speakers": [
            {
                "label": "1",
                "name": "A",
                "edited": false
            },
            {
                "label": "2",
                "name": "B",
                "edited": false
            }
        ],
        "events": [
            {
                "type": "music",
                "label": "music",
                "labelEdited": "music",
                "start": 1400,
                "end": 5000
            }
        ],
        "eventTypes": [
            "music"
        ]
    }
    

    syncでリクエストして srtで返す

    syncでリクエストして srt形式で返すレスポンスのサンプルコードは次の通りです。

    1
    00:00:00,000 --> 00:00:01,425
    A: 私、この前
    
    2
    00:00:02,533 --> 00:00:11,550
    A: トウモロコシを食べたんですよ。すごく甘くて美味しかった。てか、私はそれが町の名前だと思ってたんですよ。
    
    3
    00:00:11,550 --> 00:00:19,025
    A: Chosaierのチョ(超)に、甘いのダン(糖)だったとはね。知らなかった。私、チョダンってチョダン豆腐みたいなものだと思ってた。
    
    4
    00:00:19,025 --> 00:00:26,317
    C: サッカリンのことを思い出したけど。ふいとね。作家さんはチョダンを召し上がりましたね。
    
    5
    00:00:26,317 --> 00:00:28,240
    A: トウモロコシにですか?
    
    6
    00:00:28,240 --> 00:00:35,318
    B: ちょっと、甘い味のする豆腐がどこにあるっていうの? この Doは理解できないな。サンドってチョダン地域じゃないの?
    
    7
    00:00:35,318 --> 00:00:42,800
    A: いやいや。チョダントウモロコシってスーパースウィートって意味だった。めっちゃ甘いって意味だったとは誰も知らなかったよ。全然。
    

    syncでリクエストして smiで返す

    syncでリクエストして smi形式で返すレスポンスのサンプルコードは次の通りです。

    <SAMI>
    <Body>
      <SYNC Start=0>
        <P>A: 私、この前
      <SYNC Start=2533>
        <P>A: トウモロコシを食べたんですよ。すごく甘くて美味しかった。てか、私はそれが町の名前だと思ってたんですよ。
      <SYNC Start=11550>
        <P>A: Chosaierのチョ(超)に、甘いのダン(糖)だったとはね。知らなかった。私、チョダンってチョダン豆腐みたいなものだと思ってた。
      <SYNC Start=19025>
        <P>C: サッカリンのことを思い出したけど。ふいとね。作家さんはチョダンを召し上がりましたね。
      <SYNC Start=26317>
        <P>A: トウモロコシにですか?
      <SYNC Start=28240>
        <P>B: ちょっと、甘い味のする豆腐がどこにあるっていうの? この Doは理解できないな。サンドってチョダン地域じゃないの?
      <SYNC Start=35318>
        <P>A: いやいや。チョダントウモロコシってスーパースウィートって意味だった。めっちゃ甘いって意味だったとは誰も知らなかったよ。全然。
    </Body>
    </SAMI>
    

    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.