Object Storage 파일 인식
    • PDF

    Object Storage 파일 인식

    • PDF

    기사 요약

    Classic/VPC 환경에서 이용 가능합니다.

    네이버 클라우드 플랫폼의 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
    • 띄어쓰기 여부와 관계 없이 부스팅 처리
      • <예시> "클로바스피치"와 "클로바 스피치" 중 한 개의 키워드만 부스팅 요청
    • 키워드 길이의 제약은 없으나, 부스팅할 대상이 여러 단어들이 조합된 구문일 경우 해당 구문이 아니면 부스팅의 영향을 받기 어려움
      • <예시> "클로바 스피치"라고 키워드를 부스팅하는 경우, "클로바 스피치"가 포함된 모든 문장은 부스팅의 영향을 받음
      • <예시> "클로바 스피치의 미디어 음성인식 기술" 이라는 조합된 긴 길이의 키워드를 부스팅하는 경우, "클로바 스피치"만 들어간 문장은 부스팅의 영향을 받기 어려움
    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-도메인 아이디
    params.userdata._ncp_TaskIdInteger-태스크 아이디
    • 구체적인 인식 태스크 추적 시 사용
    params.userdata._ncp_TraceIdString-트레이스 아이디
    • 로그 추적 시 사용
    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: 초사이어있을 때 그 초자에다가 달다는 당이었어 몰랐어요. 몰랐어. 나는 초당이 초당두부 이런 건 줄 알았어.
    
    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: 아니 지금 두부 단 맛나는 두부가 어디 있어. 지금 이 도는 이해를 못 해. 상도면 초당 지역 아니야?
    
    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: 초사이어있을 때 그 초자에다가 달다는 당이었어 몰랐어요. 몰랐어. 나는 초당이 초당두부 이런 건 줄 알았어.
      <SYNC Start=19025>
        <P>C: 사카린 생각했죠. 조금. 작가님 초당으로 드셨는데.
      <SYNC Start=26317>
        <P>A: 옥수수에요?
      <SYNC Start=28240>
        <P>B: 아니 지금 두부 단 맛나는 두부가 어디 있어. 지금 이 도는 이해를 못 해. 상도면 초당 지역 아니야?
      <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.