Classic/VPC 환경에서 이용 가능합니다.
네이버 클라우드 플랫폼의 Object Storage에 업로드한 오디오/비디오 파일의 고유 URL을 호출하여 인식하고 텍스트로 변환합니다.
요청
요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.
| 메서드 | URI |
|---|---|
| POST | /recognizer/object-storage |
요청 헤더
CLOVA Speech API에서 공통으로 사용하는 헤더에 대한 정보는 CLOVA Speech 공통 헤더를 참조해 주십시오.
요청 바디
요청 바디에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
datakey |
String | Required | 오디오/비디오 파일이 저장된 Object Storage 경로
|
language |
String | Required | 텍스트 인식 언어
|
completion |
String | Optional | 인식 요청 후 응답 방식
|
callback |
String | Conditional | Callback URL
|
userdata |
Object | Optional | 사용자 데이터 세부 정보 |
wordAlignment |
Boolean | Optional | 인식 결과의 음성과 텍스트 정렬 출력 여부
|
fullText |
Boolean | Optional | 전체 인식 결과 텍스트 출력 여부
|
resultToObs |
Boolean | Conditional | Object Storage 내 결과 저장 여부
|
noiseFiltering |
Boolean | Optional | 노이즈 필터링 여부
|
boostings |
Array | Optional | 키워드 부스팅 세부 정보
|
useDomainBoostings |
Boolean | Optional | 도메인 부스팅 사용 여부
|
forbiddens |
String | Optional | 민감 키워드
|
diarization |
Object | Optional | 화자 인식 세부 설정 |
diarization.enable |
Boolean | Optional | 화자 인식 여부
|
sed |
Object | Optional | 이벤트 탐지 결과 세부 정보 |
sed.enable |
Boolean | Optional | 이벤트 탐지 여부
|
format |
String | Optional | 응답 결과 반환 형식
|
boostings
boostings에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
words |
String | Optional | 키워드 부스팅할 단어 목록 |
completion(요청 후 응답 방식)을 async로 요청 시, 입력한 Callback URL 주소 유무 또는 resultToObs(ObjectStorage) 여부에 따라 인식 결과를 다음과 같이 반환합니다.
| Callback URL | resultToObs(ObjectStorage) | 결과 |
|---|---|---|
| URL 주소 있음 | True | Callback URL과 Object Storage 모두 결과 반환 |
| URL 주소 있음 | False | Callback URL에만 결과 반환 |
| URL 주소 없음 | True | Object 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"
"weight": 1
}
],
"forbiddens": "comma separated words"
}'
응답
응답 형식을 설명합니다.
응답 바디
응답 바디에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
result |
String | - | 응답 코드 |
message |
String | - | 응답 메시지 |
token |
String | - | 결과 토큰 |
version |
String | - | 엔진 버전 |
params |
Object | - | 파라미터 세부 정보 |
params.service |
String | - | 서비스 코드 |
params.domain |
String | - | 도메인 유형
|
params.lang |
String | - | 인식 언어
|
params.completion |
String | - | 요청 방식
|
params.callback |
String | - | Callback URL |
params.diarization |
Object | - | 화자 인식 세부 정보 |
params.diarization.enable |
Boolean | - | 화자 인식 여부
|
params.diarization.speakerCountMin |
Integer | - | 최소 화자 수 |
params.diarization.speakerCountMax |
Integer | - | 최대 화자 수 |
params.sed |
Object | - | 이벤트 탐지 결과 |
params.sed.enable |
Boolean | - | 이벤트 탐지 여부
|
params.boostings |
Array | - | 키워드 부스팅 세부 정보
|
params.forbiddens |
String | - | 민감 키워드
|
params.wordAlignment |
Boolean | Optional | 인식 결과의 음성과 텍스트 정렬 출력 여부
|
params.fullText |
Boolean | - | 전체 인식 결과 텍스트 출력 여부
|
params.noiseFiltering |
Boolean | - | 노이즈 필터링 여부
|
params.resultToObs |
Boolean | - | Object Storage 내 결과 저장 여부
|
params.priority |
Integer | - | 우선 순위
|
params.userdata |
Object | - | 사용자 데이터 세부 정보 |
params.userdata._ncp_DomainCode |
String | - | 도메인 코드
|
params.userdata._ncp_DomainId |
Integer | - | 도메인 아이디 |
params.userdata._ncp_TaskId |
Integer | - | 태스크 아이디
|
params.userdata._ncp_TraceId |
String | - | 트레이스 아이디
|
progress |
Integer | - | 인식 진행률 |
segments |
Array | - | segments 세부 정보 |
text |
String | - | 전체 텍스트 |
confidence |
Double | - | 전체 정확도 |
speakers |
Array | - | 전체 화자 세부 정보 |
events |
Array | - | 이벤트 세부 정보 |
eventTypes |
Array | - | 인식된 모든 이벤트 세부 정보 |
params.boostings
params.boostings에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
words |
String | - | 키워드 부스팅 단어 목록 |
segments
segments에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
start |
Long | - | 분석 시작 시각(ms) |
end |
Long | - | 분석 종료 시각(ms) |
text |
String | - | 분석 텍스트 |
confidence |
Double | - | 분석 정확도
|
diarization |
Object | - | 인식된 화자 세부 정보 |
diarization.label |
String | - | 인식된 화자의 번호 |
speaker |
Object | - | 변경된 화자 세부 정보 |
speaker.label |
String | - | 변경된 화자의 번호 |
speaker.name |
String | - | 변경된 화자의 이름 |
speaker.edited |
Boolean | - | 화자 변경 여부
|
words |
Array<Long, Long, String> | - | 인식된 단어 목록 |
words.[0] |
Long | - | 세그먼트 시작 시각(ms) |
words.[1] |
Long | - | 세그먼트 종료 시각(ms) |
words.[2] |
String | - | 세그먼트 텍스트 |
textEdited |
String | - | 수정된 내용 |
speakers
speakers에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
label |
String | - | 전체 화자 번호 |
name |
String | - | 전체 화자의 이름 |
edited |
Boolean | - | 화자 변경 여부
|
events
events에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
type |
String | - | 이벤트 타입 |
label |
String | - | 이벤트 이름 |
labelEdited |
String | - | 이벤트 변경 이름 |
start |
Long | - | 이벤트 시작 시각 |
end |
Long | - | 이벤트 종료 시각 |
eventTypes
eventTypes에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
label |
String | - | 인식된 이벤트 |
응답 상태 코드
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": "안녕하세요, 테스트"
"weight": 1
}
],
"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>