빠른 시작: Android의 Java에서 Bing Speech Recognition API 사용Quickstart: Use the Bing Speech recognition API in Java on Android

Bing Speech Recognition API를 사용하면 클라우드 기반 Bing Speech 서비스를 사용하여 음성 오디오를 텍스트로 변환하는 Android 응용 프로그램을 개발할 수 있습니다.With the Bing Speech Recognition API, you can develop Android applications that use the cloud-based Bing Speech Service to convert spoken audio to text. API는 실시간 스트리밍을 지원하므로 응용 프로그램에서 오디오를 서비스에 보내는 동시에 부분 인식 결과를 동시에 비동기적으로 받을 수 있습니다.The API supports real-time streaming, so your application can simultaneously and asynchronously receive partial recognition results at the same time it's sending audio to the service.

이 문서에서는 샘플 응용 프로그램을 사용하여 Android용 Speech 클라이언트 라이브러리를 통해 Android 장치용 Java에서 음성 - 텍스트 변환 응용 프로그램을 개발하는 방법을 보여 줍니다.This article uses a sample application to demonstrate how to use the Speech client library for Android to develop speech-to-text applications in Java for Android devices.

필수 조건Prerequisites

플랫폼 요구 사항Platform requirements

이 샘플은 Windows용 Android Studio를 통해 Java에서 개발되었습니다.The sample is developed by Android Studio for Windows in Java.

클라이언트 라이브러리 및 샘플 응용 프로그램 가져오기Get the client library and sample application

Android용 Speech 클라이언트 라이브러리 및 샘플은 Android용 Speech 클라이언트 SDK에서 사용할 수 있습니다.The Speech client library and samples for Android are available in the Speech client SDK for Android. 빌드 가능한 샘플은 samples/SpeechRecoExample 디렉터리에서 찾을 수 있습니다.You can find the buildable sample under the samples/SpeechRecoExample directory. 사용자 고유의 앱에서 사용해야 하는 두 개의 라이브러리는 armeabi 및 x86 폴더의 SpeechSDK/libs에서 찾을 수 있습니다.You can find the two libraries you need to use in your own apps in SpeechSDK/libs under the armeabi and the x86 folder. libandroid_platform.so 파일의 크기는 22MB이지만 배포 시 4MB로 줄어듭니다.The size of the libandroid_platform.so file is 22 MB, but it's reduced to 4 MB at deployment time.

Speech API 구독 및 평가판 구독 키 가져오기Subscribe to the Speech API, and get a free trial subscription key

Speech API는 Cognitive Services(이전의 Project Oxford)의 일부입니다.The Speech API is part of Cognitive Services (previously Project Oxford). Cognitive Services 구독 페이지에서 평가판 구독 키를 가져올 수 있습니다.You can get free trial subscription keys from the Cognitive Services subscription page. Speech API를 선택한 후에 API 키 가져오기를 선택하여 키를 가져옵니다.After you select the Speech API, select Get API Key to get the key. 기본 및 보조 키를 반환합니다.It returns a primary and secondary key. 두 키는 모두 동일한 할당량에 연결되므로 두 키 중 하나를 사용할 수 있습니다.Both keys are tied to the same quota, so you can use either key.

의도가 있는 인식을 사용하려면 LUIS(Language Understanding Intelligent Service)에도 등록해야 합니다.If you want to use recognition with intent, you also need to sign up for the Language Understanding Intelligent Service (LUIS).

중요

  • 구독 키를 가져오세요.Get a subscription key. Speech 클라이언트 라이브러리를 사용하려면 먼저 구독 키가 있어야 합니다.Before you can use Speech client libraries, you must have a subscription key.

  • 구독 키를 사용하세요.Use your subscription key. 제공된 Android 샘플 응용 프로그램을 사용하여 samples/SpeechRecoExample/res/values/strings.xml 파일을 구독 키로 업데이트합니다.With the provided Android sample application, update the file samples/SpeechRecoExample/res/values/strings.xml with your subscription keys. 자세한 내용은 샘플 빌드 및 실행을 참조하세요.For more information, see Build and run samples.

Speech 클라이언트 라이브러리 사용Use the Speech client library

응용 프로그램에서 클라이언트 라이브러리를 사용하려면 이 지침을 따르세요.To use the client library in your application, follow the instructions.

Android용 Speech 클라이언트 SDK의 docs 폴더에서 Android용 클라이언트 라이브러리 참조를 찾을 수 있습니다.You can find the client library reference for Android in the docs folder of the Speech client SDK for Android.

샘플 빌드 및 실행Build and run samples

샘플을 빌드하고 실행하는 방법에 대한 내용은 이 추가 정보 페이지를 참조하세요.To learn how to build and run samples, see this README page.

샘플 설명Samples explained

인식 클라이언트 만들기Create recognition clients

다음 샘플 코드에서는 사용자 시나리오에 따라 인식 클라이언트 클래스를 만드는 방법을 보여 줍니다.The code in the following sample shows how to create recognition client classes based on user scenarios:

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;
            }
        }
    }

클라이언트 라이브러리는 일반적인 음성 인식 시나리오에 맞게 미리 구현된 인식 클라이언트 클래스를 제공합니다.The client library provides pre-implemented recognition client classes for typical scenarios in speech recognition:

  • DataRecognitionClient: PCM 데이터(예: 파일 또는 오디오 소스에 있음)를 사용하는 음성 인식입니다.DataRecognitionClient: Speech recognition with PCM data (for example, from a file or audio source). 데이터는 버퍼로 분할되고, 각 버퍼는 Speech Service로 보내집니다.The data is broken up into buffers, and each buffer is sent to Speech Service. 버퍼는 수정되지 않으므로 원하는 경우 사용자가 자신의 묵음 감지를 적용할 수 있습니다.No modification is done to the buffers, so the user can apply their own silence detection if desired. 데이터가 WAV 파일에서 제공되면 데이터를 파일에서 Speech Service로 직접 보낼 수 있습니다.If the data is provided from WAV files, you can send data from the file right to Speech Service. 원시 데이터가 있으면(예: 오디오가 Bluetooth를 통해 들어오는 경우), 먼저 Speech Service에 형식 헤더를 보낸 다음, 데이터를 보냅니다.If you have raw data, for example, audio coming over Bluetooth, you first send a format header to Speech Service followed by the data.
  • MicrophoneRecognitionClient: 마이크에서 나오는 음성을 사용하는 음성 인식입니다.MicrophoneRecognitionClient: Speech recognition with audio coming from the microphone. 마이크가 켜져 있고 마이크의 데이터를 음성 인식 서비스로 보내는지 확인합니다.Make sure the microphone is turned on and the data from the microphone is sent to the speech recognition service. 기본 제공 "묵음 감지기"가 먼저 마이크 데이터에 적용된 후에 인식 서비스로 보내집니다.A built-in "Silence Detector" is applied to the microphone data before it's sent to the recognition service.
  • DataRecognitionClientWithIntentMicrophoneRecognitionClientWithIntent: 이러한 클라이언트는 인식 텍스트 외에도 화자의 의도에 대해 구조화된 정보를 반환합니다. 이 정보는 응용 프로그램에서 추가 작업을 구동하는 데 사용할 수 있습니다.DataRecognitionClientWithIntent and MicrophoneRecognitionClientWithIntent: These clients return, in addition to recognition text, structured information about the intent of the speaker, which can be used to drive further actions by your applications. "의도"를 사용하려면 먼저 LUIS를 사용하여 모델이 학습되어야 합니다.To use "Intent," you need to first train a model by using LUIS.

인식 언어Recognition language

SpeechRecognitionServiceFactory를 사용하여 클라이언트를 만들 때 언어를 선택해야 합니다.When you use SpeechRecognitionServiceFactory to create the client, you must select a language. Speech Service에서 지원되는 언어의 전체 목록은 지원되는 언어를 참조하세요.For the complete list of languages supported by Speech Service, see Supported languages.

SpeechRecognitionMode

SpeechRecognitionServiceFactory를 사용하여 클라이언트를 만들 때 SpeechRecognitionMode도 지정해야 합니다.You also need to specify SpeechRecognitionMode when you create the client with SpeechRecognitionServiceFactory:

  • ShortPhrase: 최대 15초가 걸리는 발화입니다.ShortPhrase: An utterance up to 15 seconds long. 데이터가 서비스로 보내지면 클라이언트에서 여러 개의 부분 결과 및 여러 개의 N 상위 선택 항목이 있는 하나의 최종 결과를 받습니다.As data is sent to the service, the client receives multiple partial results and one final result with multiple n-best choices.
  • LongDictation: 최대 2분이 걸리는 발화입니다.LongDictation: An utterance up to two minutes long. 데이터가 서비스로 보내지면 서비스에서 문장 일시 중지를 식별하는 위치에 따라 클라이언트에서 여러 개의 부분 결과 및 여러 개의 최종 결과를 받습니다.As data is sent to the service, the client receives multiple partial results and multiple final results, based on where the service identifies sentence pauses.

이벤트 처리기 연결Attach event handlers

사용자가 만든 클라이언트에 다양한 이벤트 처리기를 연결할 수 있습니다.You can attach various event handlers to the client you created:

  • 부분 결과 이벤트: 이 이벤트는 말하기를 끝내거나(MicrophoneRecognitionClient를 사용하는 경우) 데이터 보내기를 끝내기(DataRecognitionClient를 사용하는 경우) 전에도 Speech Service에서 사용자가 말할 수 있는 내용을 예측할 때마다 호출됩니다.Partial Results events: This event gets called every time Speech Service predicts what you might be saying, even before you finish speaking (if you use MicrophoneRecognitionClient) or finish sending data (if you use DataRecognitionClient).
  • 오류 이벤트: 서비스에서 오류를 감지하면 호출됩니다.Error events: Called when the service detects an error.
  • 의도 이벤트: 최종 인식 결과가 구조화된 JSON 의도로 구문 분석된 후 "WithIntent" 클라이언트(ShortPhrase 모드의 경우만)에서 호출됩니다.Intent events: Called on "WithIntent" clients (only in ShortPhrase mode) after the final recognition result is parsed into a structured JSON intent.
  • 결과 이벤트:Result events:
    • ShortPhrase 모드에서는 이 이벤트가 호출되고, 말하기를 끝낸 후 N 상위 결과를 반환합니다.In ShortPhrase mode, this event is called and returns n-best results after you finish speaking.
    • LongDictation 모드에서는 서비스에서 문장 일시 중지를 식별하는 위치에 따라 이벤트 처리기가 여러 번 호출됩니다.In LongDictation mode, the event handler is called multiple times, based on where the service identifies sentence pauses.
    • N 상위 선택 항목 각각에 대해 신뢰도 값 및 인식된 텍스트의 몇 가지 다른 형식이 반환됩니다.For each of the n-best choices, a confidence value and a few different forms of the recognized text are returned. 자세한 내용은 출력 형식을 참조하세요.For more information, see Output format.