빠른 시작: iOS의 Objective-C에서 Bing Speech Recognition API 사용Quickstart: Use the Bing Speech Recognition API in Objective-C on iOS

참고

Speech Service 및 SDK는 2019년 10월 15일부터 더 이상 작동하지 않는 Bing Speech를 대체합니다.The new Speech Service and SDK is replacing Bing Speech, which will no longer work starting October 15, 2019. Speech Service로 전환하는 방법에 대한 내용은 Bing Speech에서 Speech Service로 마이그레이션을 참조하세요.For information on switching to the Speech Service, see Migrating from Bing Speech to the Speech Service.

Speech Recognition API를 사용하면 클라우드 기반 Speech Service를 사용하여 음성 오디오를 텍스트로 변환하는 iOS 응용 프로그램을 개발할 수 있습니다.With the Speech Recognition API, you can develop iOS applications that use cloud-based 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.

이 문서에서는 샘플 응용 프로그램을 사용하여 Speech Recognition API를 시작하여 iOS 응용 프로그램을 개발하는 방법의 기본 사항을 보여 줍니다.This article uses a sample application to demonstrate the basics of how to get started with the Speech Recognition API to develop an iOS application. 전체 API 참조는 Speech SDK 클라이언트 라이브러리 참조를 참조하세요.For a complete API reference, see the Speech SDK client library reference.

필수 조건Prerequisites

플랫폼 요구 사항Platform requirements

Mac XCode IDE가 설치되어 있는지 확인합니다.Make sure that the Mac XCode IDE is installed.

클라이언트 라이브러리 및 예제 가져오기Get the client library and examples

iOS용 Speech 클라이언트 라이브러리 및 예제는 iOS용 Speech 클라이언트 SDK에서 사용할 수 있습니다.The Speech client library and examples for iOS are available on the Speech client SDK for iOS.

Speech Recognition API 구독 및 평가판 구독 키 가져오기Subscribe to the Speech Recognition 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. 제공된 iOS 샘플 응용 프로그램을 사용하여 구독 키로 Samples/SpeechRecognitionServerExample/settings.plist 파일을 업데이트해야 합니다.With the provided iOS sample application, you need to update the file Samples/SpeechRecognitionServerExample/settings.plist with your subscription key. 자세한 내용은 샘플 빌드 및 실행을 참조하세요.For more information, see Build and run samples.

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

클라이언트 라이브러리를 XCode 프로젝트에 추가하려면 이 지침을 따르세요.To add the client library into an XCode project, follow these instructions.

iOS용 클라이언트 라이브러리 참조를 찾으려면 이 웹 페이지를 참조하세요.To find the client library reference for iOS, see this webpage.

샘플 빌드 및 실행Build and run samples

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

샘플 설명Samples explained

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

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

{
    NSString* language = @"en-us";

    NSString* path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"];
    NSDictionary* settings = [[NSDictionary alloc] initWithContentsOfFile:path];

    NSString* primaryOrSecondaryKey = [settings objectForKey:(@"primaryKey")];
    NSString* luisAppID = [settings objectForKey:(@"luisAppID")];
    NSString* luisSubscriptionID = [settings objectForKey:(@"luisSubscriptionID")];

    if (isMicrophoneReco) {
        if (!isIntent) {
            micClient = [SpeechRecognitionServiceFactory createMicrophoneClient:(recoMode)
                                                                   withLanguage:(language)
                                                                        withKey:(primaryOrSecondaryKey)
                                                                   withProtocol:(self)];
        }
        else {
            MicrophoneRecognitionClientWithIntent* micIntentClient;
            micIntentClient = [SpeechRecognitionServiceFactory createMicrophoneClientWithIntent:(language)
                                                                                        withKey:(primaryOrSecondaryKey)
                                                                                  withLUISAppID:(luisAppID)
                                                                                 withLUISSecret:(luisSubscriptionID)
                                                                                   withProtocol:(self)];
            micClient = micIntentClient;
        }
    }
    else {
        if (!isIntent) {
            dataClient = [SpeechRecognitionServiceFactory createDataClient:(recoMode)
                                                              withLanguage:(language)
                                                                   withKey:(primaryOrSecondaryKey)
                                                              withProtocol:(self)];
        }
        else {
            DataRecognitionClientWithIntent* dataIntentClient;
            dataIntentClient = [SpeechRecognitionServiceFactory createDataClientWithIntent:(language)
                                                                                   withKey:(primaryOrSecondaryKey)
                                                                             withLUISAppID:(luisAppID)
                                                                            withLUISSecret:(luisSubscriptionID)
                                                                              withProtocol:(self)];
            dataClient = dataIntentClient;
        }
    }
}

클라이언트 라이브러리는 일반적인 음성 인식 시나리오에 맞게 미리 구현된 인식 클라이언트 클래스를 제공합니다.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 users can apply their own silence detection, if desired. 데이터가 WAV 파일에서 제공되면 데이터를 파일에서 서버로 직접 보낼 수 있습니다.If the data is provided from WAV files, you can send data from the file right to the server. 원시 데이터가 있으면(예: 오디오가 Bluetooth를 통해 들어오는 경우), 먼저 서버에 형식 헤더를 보낸 다음, 데이터를 보냅니다.If you have raw data, for example, audio coming over Bluetooth, you first send a format header to the server followed by the data.
  • MicrophoneRecognitionClient: 마이크에서 나오는 음성을 사용하는 음성 인식입니다.MicrophoneRecognitionClient: Speech recognition with audio coming from the microphone. 마이크가 켜져 있고 마이크의 데이터를 음성 인식 서비스로 보내는지 확인합니다.Make sure the microphone is turned on and that 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: In addition to recognition text, these clients return structured information about the intent of the speaker, which your applications can use to drive further actions. "의도"를 사용하려면 먼저 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.

SpeechRecognitionModeSpeechRecognitionMode

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

  • SpeechRecognitionMode_ShortPhrase: 최대 15초가 걸리는 발화입니다.SpeechRecognitionMode_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.
  • SpeechRecognitionMode_LongDictation: 최대 2분이 걸리는 발화입니다.SpeechRecognitionMode_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 server 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 that 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:
    • SpeechRecognitionMode_ShortPhrase 모드에서는 이 이벤트가 호출되고, 말하기를 끝낸 후 N 상위 결과를 반환합니다.In SpeechRecognitionMode_ShortPhrase mode, this event is called and returns n-best results after you finish speaking.
    • SpeechRecognitionMode_LongDictation 모드에서는 서비스에서 문장 일시 중지를 식별하는 위치에 따라 이벤트 처리기가 여러 번 호출됩니다.In SpeechRecognitionMode_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.