Wake-up 기능을 위한 KVS 개발 시나리오
사용자는 음성 명령을 시작하기 전에 Wake-up Word(호출 명령어)를 말하거나 마이크 버튼을 눌러 사용자 발화를 시작할 수 있습니다. 이 가이드에서는 사용자가 Wake-up Word를 통해 음성 발화를 시작했을 경우, 고객사가 클라이언트(스피커, 모바일 앱 등)에 Wake-up 기능을 구현하는데 필요한 상세 Wake-up 시나리오를 설명합니다.
그림Wake-up Word 처리 프로세스
본격적으로 Wake-up 기능 구현을 시작하기 전에, Wake-up Word의 처리 프로세스를 이해하는 것이 필요합니다.
사용자가 “헤이 카카오”라는 Wake-up Word(호출 명령어)를 호출하면, 클라이언트(스피커, 모바일 앱 등)는 자체 내장된 Wake-up Library에서 측정한 Wake-up Word의 발화 인식 결과를 Service Agent로 전송합니다. Service Agent는 이때 해당 Wake-up Word가 발화 인식 기준에 충족되었는지 판단합니다(시나리오 1). 이때 Service Agent에서 Wake-up Word의 발화 인식 기준이 미달이라고 판단한 경우에는 KVS에서도 발화 인식을 판단하게 됩니다(시나리오 2
). 이렇게 Service Agent 또는 KVS에서 Wake-up Word의 발화 인식 기준을 충족한 경우 Wake-up은 성공으로 처리됩니다.
만약 Service Agent와 KVS에서 모두 발화 인식 기준이 미달된 경우, Wake-up은 실패로 처리됩니다(시나리오 3).
구분 | 구성 | 설명 |
---|---|---|
Wake-up Library | 사용자가 발화하는 Wake-up Word 데이터를 보유하고 인식률을 측정 - 클라이언트에 내장되어 있음 - 다양한 기능을 제공하나, 본 가이드에서는 발화 인식 측정 기능만 설명 |
|
Service Agent | 사용자와 인터랙션을 위한 Agent - 본 가이드를 참고하여 고객사가 개발 필요 |
|
- | 클라이언트에게 음성 AI 서비스를 제공하는 서버 - KVS: Kakao i Virtual agent Service |
Service Agent 개발 시나리오
Wake-up 기능에 대한 Service Agent 개발 시나리오는 크게 세 개로 구분되며, 고객사는 세 개의 시나리오를 모두 구현해야 합니다.
표개발 필요 시나리오구분 | 구현 여부 | 구현 필요 시나리오 |
---|---|---|
1. Wake-up Library에서 발화 인식 기준이 충족되어 성공한 경우 | ||
2.1 Wake-up Library에서 발화 인식 기준에는 미달되었지만, 2.2 KVS에서 발화 인식 기준을 충족하여 성공한 경우 |
||
3.1 Wake-up Library에서 발화 인식 기준이 미달되었고, 3.2 KVS에서도 발화 인식 기준에서도 미달되어 실패한 경우 |
Android OS 참고 사항
Android OS의 클라이언트에서는 Wake-up Library에서 onDetected() 발생 이전 2초 정도의 음성 데이터를 버퍼(Buffer)에 저장해두었다가 전송하고 있습니다. 이와 관련된 BACK_BUFFER_CAPACITY 설정은 다음 예시를 참고하시기 바랍니다.
코드예제BACK_BUFFER_CAPACITY 설정
const val BUFFER_LENGTH_IN_ONE_SECOND: Int =
SAMPLE_RATE_IN_HZ *
16 / 8 /* ENCODING_PCM_16BIT */ *
1 /* CHANNEL_IN_MONO */ *
1 /* duration */
const val BACK_BUFFER_CAPACITY: Int = BUFFER_LENGTH_IN_ONE_SECOND * 2
안내
음성 발화와 관련된 자세한 인터페이스 설명은 Recognizer 문서를 참고하시기 바랍니다.
1) Service Agent에서 발화 인식 기준 충족
다음은 Service Agent에서 발화 인식 기준이 충족되어 발화 인식이 성공한 시나리오입니다.
그림Service Agent 발화 인식 성공 시나리오
-
사용자가 Wake-up Word(호출 명령어)인 “헤이 카카오”를 발화합니다.
-
Service Agent는 Wake-up Library에서 호출한 onDetected() 콜백 함수를 통해 reliability(인식 신뢰도) 값을 전달받습니다.
-
reliability 값이 신뢰 여부 문턱값(reliable Threshold)과 같거나 크면, Wake-up 효과음과 함께 음성 발화 인식을 시작합니다.
reliability ≧ reliableThreshold
-
Recognizer.Speech Event로 열린 Stream으로 Wake-up Word와 음성 데이터를 KVS에 전송합니다.
-
KVS는 발화가 인식되었음을 알려주는 Recognizer.InformRecognized Instruction을 Service Agent에 전송합니다.
- KVS에서 Recognizer.InformRecognized instruction(
type = “WAKEUP”
)이 전달되어도 무시하셔도 됩니다.
- KVS에서 Recognizer.InformRecognized instruction(
주의
Wake-up Word로 음성 인식을 시작할 경우, Wake-up Library에서 사용된 Wake-up Word 음성 데이터를 먼저 KVS 서버로 전송한 후에 Recognizer.Speech Event를 KVS 서버로 추가 전송해야 합니다. 그렇지 않으면 KVS 서버로부터 Wake-up Word 결과를 전달받을 수 없습니다.
2) KVS에서 발화 인식 기준 충족
다음은 Service Agent에서 발화 인식 기준이 미달되었지만 KVS에서 인식 기준을 충족하여 발화 인식이 성공한 시나리오입니다.
그림KVS 발화 인식 성공 시나리오
-
사용자가 Wake-up Word(호출 명령어)인 “헤이 카카오”를 발화합니다.
-
Service Agent는 Wake-up Library에서 호출한 onDetected() 콜백 함수를 통해 reliability(인식 신뢰도) 값을 전달받습니다.
-
reliability 값이 신뢰 여부 문턱값(reliable Threshold) 값보다 작으면 Recognizer.Speech Event와 Wake-up Word 음성 데이터를 KVS로 전송합니다.
reliability < reliableThreshold
-
KVS는 발화가 인식되었음을 알려주는 Recognizer.InformRecognized Instruction(
type = “WAKEUP”
)을 Service Agent에 전송하며, Wake-up은 성공 상태가 됩니다. -
Wake-up 효과음과 함께, Recognizer.Speech Event로 열린 Stream으로 음성 데이터를 전달하고 음성 인식을 시작합니다.
주의
Wake-up Word로 음성 인식을 시작할 경우, Wake-up Library에서 사용된 Wake-up Word 음성 데이터를 먼저 KVS 서버로 전송한 후에 Recognizer.Speech Event를 KVS 서버로 추가 전송해야 합니다. 그렇지 않으면 KVS 서버로부터 Wake-up Word 결과를 전달받을 수 없습니다.
3) KVS에서 발화 인식 기준 미달
다음은 Service Agent와 KVS에서 모두 발화 인식 기준이 미달되어 음성 발화 인식을 종료한 시나리오입니다.
그림KVS 발화 인식 기준 미달 시나리오
-
사용자가 Wake-up Word(호출 명령어)인 “헤이 카카오”를 발화합니다.
-
Service Agent는 Wake-up Library에서 호출한 onDetected() 콜백 함수를 통해 reliability(인식 신뢰도) 값을 전달받습니다.
-
reliability 값이 신뢰 여부의 문턱값(reliable Threshold) 보다 작으면 Recognizer.Speech Event와 Wake-up Word 음성 데이터를 KVS로 전송합니다.
reliability < reliableThreshold
-
KVS는 발화가 인식되었음을 알려주는 Recognizer.InformRecognized Instruction(
type = “ERROR”, text =“16”
)을 Service Agent에 전송하며, Wake-up은 실패 상태가 됩니다. -
KVS 서버에서 Recognizer.StopCapture Instruction을 전달하고, 음성 인식을 종료합니다.