Android에서 Java로 음성 인식 시작하기
- 본 번역문서의 원문은 Get started with speech recognition in Java on Android docs.microsoft.com 입니다.
Speech Recognition API를 사용하면 클라우드 기반의 Speech Service를 이용해서 음성 오디오를 텍스트로 변환하는 Android 응용 프로그램을 개발할 수 있습니다. API가 실시간 스트리밍을 지원하기 때문에, 응용 프로그램에서 오디오를 서비스에 전송함과 동시에 비동기적으로 부분적 인식 결과를 수신할 수 있습니다.
본문에서는 예제 응용 프로그램을 통해서 Android 기기를 위한 Speech-to-Text 응용 프로그램을 Android 용 Speech 클라이언트 라이브러리를 활용하여 Java로 개발하는 방법을 살펴봅니다.
요구 사항
플랫폼 요구 사항
본문의 예제는 Windows 용 Android Studio에서 Java로 개발되었습니다.
클라이언트 라이브러리 및 예제 응용 프로그램 가져오기
Speech 클라이언트 라이브러리와 Android 예제는 Speech client SDK for Android 저장소에서 다운로드 받을 수 있습니다. 빌드 가능한 예제는 samples/SpeechRecoExample 디렉터리에 위치해 있습니다. SpeechSDK/libs 하위의 armeabi 및 x86 디렉터리에는 여러분의 응용 프로그램에서 사용할 수 있는 두 가지 라이브러리가 위치해 있습니다. libandroid_platform.so 파일의 크기는 22 MB지만 배포 시에는 4MB로 줄어듭니다.
Speech Recognition API 구독 및 무료 평가판 구독 키 발급받기
Speech API는 Microsoft Cognitive Services의 (구 프로젝트 Oxford) 일부분입니다. 무료 평가판 구독 키는 Cognitive Services 체험하기 페이지에서 발급받을 수 있습니다. 음성 탭에서 Bing Speech API를 선택한 다음, API 키 가져오기(Get API Key) 버튼을 클릭합니다. 그러면 기본 키와 보조 키가 발급됩니다. 두 키 모두 동일한 할당량에 연결되어 있으므로 두 키 중 아무 키나 사용해도 무방합니다.
만약 인텐트를 이용한 인식 기능을 사용하고자 한다면, 먼저 LUIS(Language Understanding Intelligent Service)를 등록해야 합니다.
중요
-
구독 키 발급받기. Speech 클라이언트 라이브러리를 사용하려면 반드시 구독 키가 필요합니다.
-
구독 키 사용하기. 제공되는 Android 예제 응용 프로그램에서 samples/SpeechRecoExample/res/values/strings.xml 파일의 내용을 여러분이 발급 받은 구독 키로 변경합니다. 보다 자세한 정보는 예제 빌드 및 실행하기 절을 참고하시기 바랍니다.
Speech 클라이언트 라이브러리 사용하기
응용 프로그램에서 클라이언트 라이브러리를 사용하려면, 지시를 따르십시오.
Android 용 클라이언트 라이브러리의 참조는 Speech client SDK for Android 저장소의 docs 폴더에서 살펴볼 수 있습니다.
예제 빌드 및 실행하기
예제를 빌드하고 실행하는 방법은 README 페이지를 참고하시기 바랍니다.
예제 살펴보기
인식 클라이언트 생성하기
다음 예제 코드는 사용자의 시나리오에 따라 적절한 인식 클라이언트 클래스를 생성하는 방법을 보여줍니다:
void initializeRecoClient()
{
String language = "en-us";
String subscriptionKey = this.getString(R.string.subscription_key);
String luisAppID = this.getString(R.string.luisAppID);
String luisSubscriptionID = this.getString(R.string.luisSubscriptionID);
if (m_isMicrophoneReco && null == m_micClient) {
if (!m_isIntent) {
m_micClient = SpeechRecognitionServiceFactory.createMicrophoneClient(this,
m_recoMode,
language,
this,
subscriptionKey);
}
else {
MicrophoneRecognitionClientWithIntent intentMicClient;
intentMicClient = SpeechRecognitionServiceFactory.createMicrophoneClientWithIntent(this,
language,
this,
subscriptionKey,
luisAppID,
luisSubscriptionID);
m_micClient = intentMicClient;
}
}
else if (!m_isMicrophoneReco && null == m_dataClient) {
if (!m_isIntent) {
m_dataClient = SpeechRecognitionServiceFactory.createDataClient(this,
m_recoMode,
language,
this,
subscriptionKey);
}
else {
DataRecognitionClientWithIntent intentDataClient;
intentDataClient = SpeechRecognitionServiceFactory.createDataClientWithIntent(this,
language,
this,
subscriptionKey,
luisAppID,
luisSubscriptionID);
m_dataClient = intentDataClient;
}
}
}
클라이언트 라이브러리는 일반적인 음성 인식 시나리오들에 대한 미리 구현된 인식 클라이언트 클래스들을 제공해줍니다:
-
DataRecognitionClient
: PCM 데이터를 이용한 음성 인식 (예, 파일 또는 오디오 원본). 데이터가 버퍼로 분할되어 각각의 버퍼가 Speech Service로 전송됩니다. 버퍼를 수정하지 않기 때문에, 필요한 경우 사용자가 직접 묵음 탐지를 적용할 수 있습니다. WAV 파일의 데이터를 제공할 경우, 파일로부터 Speech Service로 데이터를 직접 전송할 수 있습니다. RAW 데이터, 예를 들어 블루투스를 통해서 오디오가 전달되는 등의 경우, 먼저 형식 헤더부터 Speech Service에 전송한 다음 데이터를 전송합니다. -
MicrophoneRecognitionClient
: 마이크로부터 전달된 오디오에 대한 음성 인식. 마이크가 켜져 있고 마이크로부터 전달된 데이터가 음성 인식 서비스로 전송되는지 확인하시기 바랍니다. 마이크의 데이터가 인식 서비스에 전송되기 전에 내장된 "묵음 감지기(Silence Detector)"가 적용됩니다. -
DataRecognitionClientWithIntent
및MicrophoneRecognitionClientWithIntent
: 이 클라이언트들은 인식된 텍스트 뿐만 아니라, 응용 프로그램에서 추가 작업을 수행하는데 활용할 수 있는, 화자의 의도에 대한 구조화된 정보를 함께 반환합니다. "인텐트(Intent)"를 사용하려면 먼저 LUIS를 이용하여 모델을 훈련시켜야합니다.
인식 언어
SpeechRecognitionServiceFactory
를 이용해서 클라이언트를 생성할 때, 언어를 반드시 지정해야 합니다.
Speech Service가 지원하는 모든 언어의 목록은 Supported Languages에서 확인하실 수 있습니다.
SpeechRecognitionMode
그리고 SpeechRecognitionServiceFactory
를 이용해서 클라이언트를 생성할 때, SpeechRecognitionMode
도 지정해야 합니다:
-
ShortPhrase
: 최대 15 초까지 말하거나 데이터를 전달할 수 있습니다. 데이터가 서버로 전송되면, 클라이언트는 여러 번의 부분 결과와 n-BEST 선택 항목 형태의 단일 최종 결과를 반환받습니다. -
LongDictation
: 최대 2 분까지 말하거나 데이터를 전달할 수 있습니다. 데이터가 서버로 전송되면, 클라이언트는 서버가 감지한 문장의 일시 중지 위치에 따라 여러 번의 부분 결과와 여러 번의 최종 결과를 반환받습니다.
이벤트 핸들러 연결하기
직접 작성한 클라이언트에 다양한 이벤트 처리기를 연결할 수 있습니다:
-
Partial Results 이벤트: 말하기를 멈추거나 (
MicrophoneRecognitionClient
를 사용할 경우) 데이터 전송을 마치지 않았어도 (DataRecognitionClient
를 사용할 경우), 여러분이 말하는 내용을 Speech Service가 예측할 때마다 매번 호출됩니다. -
Error 이벤트: 서비스가 오류를 감지하면 호출됩니다.
-
Intent 이벤트: 최종 인식 결과가 구조화된 JSON 인텐트로 파싱된 후, "WithIntent" 클라이언트에서 (
ShortPhrase
모드에서만) 호출됩니다. -
Result 이벤트:
-
ShortPhrase
모드의 경우, 말하기를 멈추면 호출되어 n-BEST 결과를 반환합니다. -
LongDictation
모드의 경우, 서비스가 문장의 일시 중단을 식별한 위치에 따라 여러 번 호출됩니다. -
각각의 n-BEST 선택 항목마다, 신뢰값과 몇 가지 다른 형태의 인식된 텍스트가 반환됩니다. 더 자세한 내용은 Output format을 참고하시기 바랍니다.
-
관련 자료
- Microsoft Speech API 개요 2018-01-30 08:00
- REST API를 이용한 음성 인식 시작하기 (PowerShell, cUrl, C#) 2018-02-01 08:00
- Windows에서 .NET C#으로 Speech Recognition API 시작하기 2018-02-06 08:00
- Windows에서 .NET C#으로 음성 인식 서비스 라이브러리 시작하기 2018-02-08 08:00
- JavaScript로 Speech Recognition API 시작하기 2018-02-13 08:00
- Android에서 Java로 음성 인식 시작하기 2018-02-15 08:00