음성 텍스트 변환 시작

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 샘플로 건너뛰기

샘플 코드로 바로 건너뛰려면 GitHub의 C# 빠른 시작 샘플을 참조하세요.

사전 요구 사항

이 문서에서는 여러분에게 Azure 계정 및 음성 서비스 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

Speech SDK 설치하기

패키지 이름만 시작하려면 NuGet 콘솔에서 Install-Package Microsoft.CognitiveServices.Speech를 실행합니다.

플랫폼별 설치 지침은 다음 링크를 참조하세요.

음성 구성 만들기

음성 SDK를 사용하여 음성 서비스를 호출하려면 SpeechConfig를 만들어야 합니다. 이 클래스에는 키 및 관련 위치/지역, 엔드포인트, 호스트 또는 권한 부여 토큰과 같은 구독 정보가 포함됩니다. 키와 위치/지역을 사용하여 SpeechConfig를 만듭니다. 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
    }
}

SpeechConfig를 초기화할 수 있는 몇 가지 다른 방법이 있습니다.

  • 엔드포인트 사용: 음성 서비스 엔드포인트를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 호스트 사용: 호스트 주소를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 권한 부여 토큰 사용: 권한 부여 토큰 및 관련 지역/위치를 전달합니다.

참고

음성 인식, 음성 합성, 번역 또는 의도 인식을 수행하고 있는지 여부에 관계없이 항상 구성을 만들게 됩니다.

마이크에서 인식

디바이스 마이크를 사용하여 음성을 인식하려면 FromDefaultMicrophoneInput()을 사용하여 AudioConfig를 만듭니다. 그런 다음, SpeechRecognizer를 초기화하고 audioConfigspeechConfig를 전달합니다.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var result = await recognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
        await FromMic(speechConfig);
    }
}

특정 오디오 입력 장치를 사용 하려면에서 장치 ID를 지정 해야 합니다 . 오디오 입력 디바이스의 디바이스 ID를 가져오는 방법을 알아봅니다.

파일에서 인식

마이크 대신 오디오 파일에서 음성을 인식하려는 경우에도 AudioConfig를 만들어야 합니다. 그러나 AudioConfig를 만들 때 FromDefaultMicrophoneInput()을 호출하는 대신 FromWavFileInput()을 호출하고 파일 경로를 전달합니다.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromFile(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        var result = await recognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
        await FromFile(speechConfig);
    }
}

메모리 내 스트림에서 인식

많은 사용 사례에서 오디오 데이터가 Blob 스토리지에서 제공되거나, 그렇지 않은 경우 이미 메모리 내에 byte[] 또는 이와 비슷한 원시 데이터 구조로 있을 수 있습니다. 다음 예제에서는 기본적으로 추상화된 메모리 스트림인 PushAudioInputStream을 사용하여 음성을 인식합니다. 이 예제 코드에서는 다음을 수행합니다.

  • byte[]를 허용하는 Write() 함수를 사용하여 원시 오디오 데이터(PCM)를 PushAudioInputStream에 씁니다.
  • FileReader를 데모 용도로 사용하여 .wav 파일을 읽지만 이미 오디오 데이터가 byte[]에 있는 경우 콘텐츠를 입력 스트림에 쓰도록 바로 건너뛸 수 있습니다.
  • 기본 형식은 16비트, 16khz 모노 PCM입니다. 형식을 사용자 지정하려면 정적 함수(AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels))를 사용하여 AudioStreamFormat 개체를 CreatePushStream()에 전달할 수 있습니다.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromStream(SpeechConfig speechConfig)
    {
        var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
        using var audioInputStream = AudioInputStream.CreatePushStream();
        using var audioConfig = AudioConfig.FromStreamInput(audioInputStream);
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        byte[] readBytes;
        do
        {
            readBytes = reader.ReadBytes(1024);
            audioInputStream.Write(readBytes, readBytes.Length);
        } while (readBytes.Length > 0);

        var result = await recognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
        await FromStream(speechConfig);
    }
}

푸시 스트림을 입력으로 사용하면 오디오 데이터가 원시 PCM이라고 가정합니다(예: 헤더 건너뛰기). 헤더를 건너뛰지 않는 경우 API는 특정 한 경우에도 계속 작동 하지만, 최상의 결과를 위해가 byte[]byte[]에서 시작 하도록 헤더를 읽을 수 있는 논리를 구현 하는 것이 좋습니다.

오류 처리

이전 예제에서는 단순히 result.text에서 인식된 텍스트를 가져오지만 오류 및 기타 응답을 처리하려면 결과를 처리하는 코드를 작성해야 합니다. 다음 코드에서는 result.Reason 속성을 평가하여 다음을 수행합니다.

  • 인식 결과 ResultReason.RecognizedSpeech를 출력합니다.
  • 일치하는 인식이 없는 경우 사용자에게 ResultReason.NoMatch를 알립니다.
  • 오류가 발생하는 경우 오류 메시지 ResultReason.Canceled를 출력합니다.
switch (result.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(result);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

        if (cancellation.Reason == CancellationReason.Error)
        {
            Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
            Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
            Console.WriteLine($"CANCELED: Did you update the speech key and location/region info?");
        }
        break;
}

연속 인식

이전 예제에서는 단일 발화를 인식하는 시작 시 인식을 사용합니다. 단일 발화의 끝은 끝에서 무음을 수신하거나 최대 15초의 오디오가 처리될 때까지 대기하여 결정됩니다.

이와 대조적으로, 인식을 중지할 때 제어하려는 경우에는 연속 인식이 사용됩니다. Recognizing, RecognizedCanceled 이벤트를 구독하여 인식 결과를 얻어야 합니다. 인식을 중지하려면 StopContinuousRecognitionAsync를 호출해야 합니다. 다음은 오디오 입력 파일에서 연속 인식이 수행되는 방식을 보여주는 예입니다.

먼저 입력을 정의하고 SpeechRecognizer를 초기화합니다.

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

그런 다음, 음성 인식 상태를 관리하는 TaskCompletionSource<int>를 만듭니다.

var stopRecognition = new TaskCompletionSource<int>();

다음으로, SpeechRecognizer에서 보낸 이벤트를 구독합니다.

  • Recognizing: 중간 인식 결과가 포함된 이벤트에 대한 신호입니다.
  • Recognized: 최종 인식 결과가 포함된 이벤트에 대한 신호입니다(성공적인 인식 시도를 나타냄).
  • SessionStopped: 인식 세션(작업)의 끝을 나타내는 이벤트에 대한 신호입니다.
  • Canceled: 취소된 인식 결과가 포함된 이벤트에 대한 신호입니다(직접 취소 요청이나 전송 또는 프로토콜 오류로 인해 취소된 인식 시도를 나타냄).
recognizer.Recognizing += (s, e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

recognizer.Recognized += (s, e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    else if (e.Result.Reason == ResultReason.NoMatch)
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    }
};

recognizer.Canceled += (s, e) =>
{
    Console.WriteLine($"CANCELED: Reason={e.Reason}");

    if (e.Reason == CancellationReason.Error)
    {
        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
        Console.WriteLine($"CANCELED: Did you update the speech key and location/region info?");
    }

    stopRecognition.TrySetResult(0);
};

recognizer.SessionStopped += (s, e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

모든 설정이 완료되면 StartContinuousRecognitionAsync를 호출하여 인식을 시작합니다.

await recognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

// make the following call at some point to stop recognition.
// await recognizer.StopContinuousRecognitionAsync();

받아쓰기 모드

연속 인식을 사용하면 해당하는 "받아쓰기 사용" 함수를 사용하여 받아쓰기 처리를 사용하도록 설정할 수 있습니다. 이 모드에서는 음성 구성 인스턴스가 문장 부호와 같은 문장 구조의 단어 설명을 해석합니다. 예를 들어 "도시에 살고 계신가요 물음표"라는 발화는 "도시에 살고 계신가요?"라는 텍스트로 해석됩니다.

받아쓰기 모드를 사용하도록 설정하려면 SpeechConfig에서 EnableDictation 메서드를 사용합니다.

speechConfig.EnableDictation();

소스 언어 변경

음성 인식에 대한 일반적인 작업 중 하나는 입력(또는 소스) 언어를 지정하는 것입니다. 입력 언어를 이탈리아어로 변경하는 방법을 살펴보겠습니다. 코드에서 SpeechConfig를 찾아서 바로 아래에 다음 줄을 추가합니다.

speechConfig.SpeechRecognitionLanguage = "it-IT";

SpeechRecognitionLanguage 속성에는 언어 로캘 형식 문자열이 필요합니다. 지원되는 로캘/언어 목록의 로캘 열에 원하는 값을 입력할 수 있습니다.

인식 정확도 향상

구 목록은 오디오 데이터에서 사람의 이름이나 특정 위치처럼 알려진 문구를 식별하는 데 사용됩니다. 구 목록을 제공함으로써 음성 인식의 정확성을 향상시킬 수 있습니다.

예를 들어, "Move to"라는 명령과 "Ward"라는 대상을 말하면 "Move to Ward" 항목을 추가할 수 있습니다. 구를 추가하면 오디오를 인식할 때 "Move toward" 대신 "Move to Ward"가 인식될 확률이 높아집니다.

단일 단어 또는 전체 구를 구 목록에 추가할 수 있습니다. 인식 중에 구 목록의 항목은 항목이 발화 중간에 나타나더라도 목록의 단어와 구문의 인식률을 높이는 데 사용됩니다.

중요

구문 목록 기능은 en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN의 언어로 제공됩니다.

구 목록 기능에서 사용하는 구를 수백 개 이하로 제한해야 합니다. 현재 지원되지 않는 더 큰 목록이나 언어의 경우 사용자 지정 모델을 학습하는 것이 정확도를 향상시키는 더 나은 선택일 수 있습니다.

구 목록 기능은 사용자 지정 엔드포인트에서 지원되지 않습니다. 사용자 지정 엔드포인트에서 사용하지 마세요. 대신 구를 포함하는 사용자 지정 모델을 학습하세요.

구 목록을 사용하려면 PhraseListGrammar 개체를 만든 다음, AddPhrase를 사용하여 특정 단어와 구를 추가합니다.

PhraseListGrammar를 변경하면 그 다음 인식부터 또는 음성 서비스에 다시 연결한 후에 변경 내용이 적용됩니다.

var phraseList = PhraseListGrammar.FromRecognizer(recognizer);
phraseList.AddPhrase("Supercalifragilisticexpialidocious");

구 목록을 지워야 하는 경우:

phraseList.Clear();

인식 정확도를 높이는 다른 옵션

구 목록은 인식 정확도를 높이는 여러 옵션 중 하나일 뿐입니다. 다음도 가능합니다.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 샘플로 건너뛰기

샘플 코드로 바로 건너뛰려면 GitHub의 C++ 빠른 시작 샘플을 참조하세요.

사전 요구 사항

이 문서에서는 여러분에게 Azure 계정 및 음성 서비스 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

Speech SDK 설치하기

작업을 수행하려면 먼저 음성 SDK를 설치해야 합니다. 사용하는 플랫폼에 따라 다음 중 적절한 지침을 따릅니다.

음성 구성 만들기

음성 SDK를 사용하여 음성 서비스를 호출하려면 SpeechConfig를 만들어야 합니다. 이 클래스에는 키 및 관련 위치/지역, 엔드포인트, 호스트 또는 권한 부여 토큰과 같은 구독 정보가 포함됩니다. 키와 지역을 사용하여 SpeechConfig를 만듭니다. 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요.

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto config = SpeechConfig::FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

SpeechConfig를 초기화할 수 있는 몇 가지 다른 방법이 있습니다.

  • 엔드포인트 사용: 음성 서비스 엔드포인트를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 호스트 사용: 호스트 주소를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 권한 부여 토큰 사용: 권한 부여 토큰 및 연결된 영역을 전달합니다.

참고

음성 인식, 음성 합성, 번역 또는 의도 인식을 수행하고 있는지 여부에 관계없이 항상 구성을 만들게 됩니다.

마이크에서 인식

디바이스 마이크를 사용하여 음성을 인식하려면 FromDefaultMicrophoneInput()을 사용하여 AudioConfig를 만듭니다. 그런 다음, SpeechRecognizer를 초기화하고 audioConfigconfig를 전달합니다.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto recognizer = SpeechRecognizer::FromConfig(config, audioConfig);

cout << "Speak into your microphone." << std::endl;
auto result = recognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

특정 오디오 입력 장치를 사용 하려면에서 장치 ID를 지정 해야 합니다 . 오디오 입력 디바이스의 디바이스 ID를 가져오는 방법을 알아봅니다.

파일에서 인식

마이크를 사용하는 대신 오디오 파일에서 음성을 인식하려는 경우에도 AudioConfig를 만들어야 합니다. 그러나 AudioConfig를 만들 때 FromDefaultMicrophoneInput()을 호출하는 대신 FromWavFileInput()을 호출하고 파일 경로를 전달합니다.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = SpeechRecognizer::FromConfig(config, audioInput);

auto result = recognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

음성 인식

C++용 음성 SDK의 인식기 클래스는 음성 인식에 사용할 수 있는 몇 가지 메서드를 공개합니다.

시작 시 인식

시작 시 인식은 단일 발화를 비동기적으로 인식합니다. 단일 발화의 끝은 끝에서 무음을 수신하거나 최대 15초의 오디오가 처리될 때까지 대기하여 결정됩니다. 다음은 RecognizeOnceAsync를 사용하는 비동기 시작 시 인식의 예입니다.

auto result = recognizer->RecognizeOnceAsync().get();

결과를 처리하는 코드를 작성해야 합니다. 이 샘플은 result->Reason을 평가합니다.

  • 인식 결과 ResultReason::RecognizedSpeech를 출력합니다.
  • 일치하는 인식이 없는 경우 사용자에게 ResultReason::NoMatch를 알립니다.
  • 오류가 발생하는 경우 오류 메시지 ResultReason::Canceled를 출력합니다.
switch (result->Reason)
{
    case ResultReason::RecognizedSpeech:
        cout << "We recognized: " << result->Text << std::endl;
        break;
    case ResultReason::NoMatch:
        cout << "NOMATCH: Speech could not be recognized." << std::endl;
        break;
    case ResultReason::Canceled:
        {
            auto cancellation = CancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error) {
                cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                cout << "CANCELED: Did you update the speech key and location/region info?" << std::endl;
            }
        }
        break;
    default:
        break;
}

연속 인식

연속 인식은 시작 시 인식보다 약간 더 복잡합니다. Recognizing, RecognizedCanceled 이벤트를 구독하여 인식 결과를 얻어야 합니다. 인식을 중지하려면 StopContinuousRecognitionAsync를 호출해야 합니다. 다음은 오디오 입력 파일에서 연속 인식이 수행되는 방식을 보여주는 예입니다.

먼저 입력을 정의하고 SpeechRecognizer를 초기화하겠습니다.

auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = SpeechRecognizer::FromConfig(config, audioInput);

다음으로, 음성 인식 상태를 관리하는 변수를 만들어 보겠습니다. 시작하기 위해, promise<void>를 선언합니다. 이렇게 하면 인식을 시작할 때 인식이 완료되지 않았다고 안전하게 가정할 수 있습니다.

promise<void> recognitionEnd;

SpeechRecognizer에서 전송된 이벤트를 구독합니다.

  • Recognizing: 중간 인식 결과가 포함된 이벤트에 대한 신호입니다.
  • Recognized: 최종 인식 결과가 포함된 이벤트에 대한 신호입니다(성공적인 인식 시도를 나타냄).
  • SessionStopped: 인식 세션(작업)의 끝을 나타내는 이벤트에 대한 신호입니다.
  • Canceled: 취소된 인식 결과가 포함된 이벤트에 대한 신호입니다(직접 취소 요청이나 전송 또는 프로토콜 오류로 인해 취소된 인식 시도를 나타냄).
recognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
    {
        cout << "Recognizing:" << e.Result->Text << std::endl;
    });

recognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
    {
        if (e.Result->Reason == ResultReason::RecognizedSpeech)
        {
            cout << "RECOGNIZED: Text=" << e.Result->Text 
                 << " (text could not be translated)" << std::endl;
        }
        else if (e.Result->Reason == ResultReason::NoMatch)
        {
            cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
    });

recognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
    {
        cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
        if (e.Reason == CancellationReason::Error)
        {
            cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
                 << "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
                 << "CANCELED: Did you update the speech key and location/region info?" << std::endl;

            recognitionEnd.set_value(); // Notify to stop recognition.
        }
    });

recognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
    {
        cout << "Session stopped.";
        recognitionEnd.set_value(); // Notify to stop recognition.
    });

모든 설정이 끝났으면 StopContinuousRecognitionAsync를 호출할 수 있습니다.

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
recognizer->StartContinuousRecognitionAsync().get();

// Waits for recognition end.
recognitionEnd.get_future().get();

// Stops recognition.
recognizer->StopContinuousRecognitionAsync().get();

받아쓰기 모드

연속 인식을 사용하면 해당하는 "받아쓰기 사용" 함수를 사용하여 받아쓰기 처리를 사용하도록 설정할 수 있습니다. 이 모드에서는 음성 구성 인스턴스가 문장 부호와 같은 문장 구조의 단어 설명을 해석합니다. 예를 들어 "도시에 살고 계신가요 물음표"라는 발화는 "도시에 살고 계신가요?"라는 텍스트로 해석됩니다.

받아쓰기 모드를 사용하도록 설정하려면 SpeechConfig에서 EnableDictation 메서드를 사용합니다.

config->EnableDictation();

소스 언어 변경

음성 인식에 대한 일반적인 작업 중 하나는 입력(또는 소스) 언어를 지정하는 것입니다. 입력 언어를 독일어로 변경하는 방법을 살펴보겠습니다. 코드에서 SpeechConfig를 찾아서 바로 아래에 다음 줄을 추가합니다.

config->SetSpeechRecognitionLanguage("de-DE");

SetSpeechRecognitionLanguage는 문자열을 인수로 사용하는 매개 변수입니다. 지원되는 로캘/언어 목록에 원하는 값을 입력할 수 있습니다.

인식 정확도 향상

구 목록은 오디오 데이터에서 사람의 이름이나 특정 위치처럼 알려진 문구를 식별하는 데 사용됩니다. 구 목록을 제공함으로써 음성 인식의 정확성을 향상시킬 수 있습니다.

예를 들어, "Move to"라는 명령과 "Ward"라는 대상을 말하면 "Move to Ward" 항목을 추가할 수 있습니다. 구를 추가하면 오디오를 인식할 때 "Move toward" 대신 "Move to Ward"가 인식될 확률이 높아집니다.

단일 단어 또는 전체 구를 구 목록에 추가할 수 있습니다. 인식 중에 구 목록의 항목은 항목이 발화 중간에 나타나더라도 목록의 단어와 구문의 인식률을 높이는 데 사용됩니다.

중요

구문 목록 기능은 en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN의 언어로 제공됩니다.

구 목록 기능에서 사용하는 구를 수백 개 이하로 제한해야 합니다. 현재 지원되지 않는 더 큰 목록이나 언어의 경우 사용자 지정 모델을 학습하는 것이 정확도를 향상시키는 더 나은 선택일 수 있습니다.

구 목록 기능은 사용자 지정 엔드포인트에서 지원되지 않습니다. 사용자 지정 엔드포인트에서 사용하지 마세요. 대신 구를 포함하는 사용자 지정 모델을 학습하세요.

구 목록을 사용하려면 PhraseListGrammar 개체를 만든 다음, AddPhrase를 사용하여 특정 단어와 구를 추가합니다.

PhraseListGrammar를 변경하면 그 다음 인식부터 또는 음성 서비스에 다시 연결한 후에 변경 내용이 적용됩니다.

auto phraseListGrammar = PhraseListGrammar::FromRecognizer(recognizer);
phraseListGrammar->AddPhrase("Supercalifragilisticexpialidocious");

구 목록을 지워야 하는 경우:

phraseListGrammar->Clear();

인식 정확도를 높이는 다른 옵션

구 목록은 인식 정확도를 높이는 여러 옵션 중 하나일 뿐입니다. 다음도 가능합니다.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 샘플로 건너뛰기

샘플 코드로 바로 건너뛰려면 GitHub의 Go 빠른 시작 샘플을 참조하세요.

사전 요구 사항

이 문서에서는 여러분에게 Azure 계정 및 음성 서비스 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

Speech SDK 설치하기

작업을 수행하려면 먼저 Go용 Speech SDK를 설치해야 합니다.

마이크에서 음성을 텍스트로 변환

다음 코드 샘플을 사용하여 기본 디바이스 마이크에서 음성 인식을 실행할 수 있습니다. subscriptionregion 변수를 음성 키와 위치/지역으로 바꿉니다. 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요. 스크립트를 실행하면 기본 마이크 및 출력 텍스트에서 인식 세션이 시작됩니다.

package main

import (
	"bufio"
	"fmt"
	"os"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func sessionStartedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Started (ID=", event.SessionID, ")")
}

func sessionStoppedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}

func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognizing:", event.Result.Text)
}

func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognized:", event.Result.Text)
}

func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
	defer event.Close()
	fmt.Println("Received a cancellation: ", event.ErrorDetails)
}

func main() {
    subscription :=  "<paste-your-speech-key-here>"
    region := "<paste-your-speech-location/region-here>"

	audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(sessionStartedHandler)
	speechRecognizer.SessionStopped(sessionStoppedHandler)
	speechRecognizer.Recognizing(recognizingHandler)
	speechRecognizer.Recognized(recognizedHandler)
	speechRecognizer.Canceled(cancelledHandler)
	speechRecognizer.StartContinuousRecognitionAsync()
	defer speechRecognizer.StopContinuousRecognitionAsync()
	bufio.NewReader(os.Stdin).ReadBytes('\n')
}

다음 명령을 실행하여 GitHub에서 호스팅되는 구성 요소에 연결되는 go.mod 파일을 만듭니다.

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

이제 코드를 빌드하고 실행합니다.

go build
go run quickstart

SpeechConfigSpeechRecognizer 클래스에 대한 자세한 내용은 참조 문서를 확인하세요.

오디오 파일에서 음성을 텍스트로 변환

오디오 파일에서 음성 인식을 실행하려면 다음 샘플을 사용합니다. subscriptionregion 변수를 음성 키와 위치/지역으로 바꿉니다. 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요. 또한 변수 file을 .wav 파일의 경로로 바꿉니다. 스크립트를 실행하면 파일에서 음성이 인식되고 텍스트 결과가 출력됩니다.

package main

import (
	"fmt"
	"time"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func main() {
    subscription :=  "<paste-your-speech-key-here>"
    region := "<paste-your-speech-location/region-here>"
    file := "path/to/file.wav"

	audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Started (ID=", event.SessionID, ")")
	})
	speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Stopped (ID=", event.SessionID, ")")
	})

	task := speechRecognizer.RecognizeOnceAsync()
	var outcome speech.SpeechRecognitionOutcome
	select {
	case outcome = <-task:
	case <-time.After(5 * time.Second):
		fmt.Println("Timed out")
		return
	}
	defer outcome.Close()
	if outcome.Error != nil {
		fmt.Println("Got an error: ", outcome.Error)
	}
	fmt.Println("Got a recognition!")
	fmt.Println(outcome.Result.Text)
}

다음 명령을 실행하여 GitHub에서 호스팅되는 구성 요소에 연결되는 go.mod 파일을 만듭니다.

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

이제 코드를 빌드하고 실행합니다.

go build
go run quickstart

SpeechConfigSpeechRecognizer 클래스에 대한 자세한 내용은 참조 문서를 확인하세요.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 샘플로 건너뛰기

샘플 코드로 바로 건너뛰려면 GitHub의 Java 빠른 시작 샘플을 참조하세요.

사전 요구 사항

이 문서에서는 여러분에게 Azure 계정 및 음성 서비스 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

Speech SDK 설치하기

작업을 수행하려면 먼저 음성 SDK를 설치해야 합니다. 사용하는 플랫폼에 따라 다음 중 적절한 지침을 따릅니다.

음성 구성 만들기

음성 SDK를 사용하여 음성 서비스를 호출하려면 SpeechConfig를 만들어야 합니다. 이 클래스에는 키 및 관련 위치/지역, 엔드포인트, 호스트 또는 권한 부여 토큰과 같은 구독 정보가 포함됩니다. 키와 위치/지역을 사용하여 SpeechConfig를 만듭니다. 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
    }
}

SpeechConfig를 초기화할 수 있는 몇 가지 다른 방법이 있습니다.

  • 엔드포인트 사용: 음성 서비스 엔드포인트를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 호스트 사용: 호스트 주소를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 권한 부여 토큰 사용: 권한 부여 토큰 및 연결된 영역을 전달합니다.

참고

음성 인식, 음성 합성, 번역 또는 의도 인식을 수행하고 있는지 여부에 관계없이 항상 구성을 만들게 됩니다.

마이크에서 인식

디바이스 마이크를 사용하여 음성을 인식하려면 fromDefaultMicrophoneInput()을 사용하여 AudioConfig를 만듭니다. 그런 다음, SpeechRecognizer를 초기화하고 audioConfigconfig를 전달합니다.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromMic(speechConfig);
    }

    public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
        SpeechRecognizer recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        System.out.println("Speak into your microphone.");
        Future<SpeechRecognitionResult> task = recognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

특정 오디오 입력 장치를 사용 하려면에서 장치 ID를 지정 해야 합니다 . 오디오 입력 디바이스의 디바이스 ID를 가져오는 방법을 알아봅니다.

파일에서 인식

마이크를 사용하는 대신 오디오 파일에서 음성을 인식하려는 경우에도 AudioConfig를 만들어야 합니다. 그러나 AudioConfig을 만들 때 fromDefaultMicrophoneInput()을 호출하는 대신 fromWavFileInput()을 호출하고 파일 경로를 전달합니다.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromFile(speechConfig);
    }

    public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
        SpeechRecognizer recognizer = new SpeechRecognizer(speechConfig, audioConfig);
        
        Future<SpeechRecognitionResult> task = recognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

오류 처리

이전 예제에서는 단순히 result.getText()를 사용하여 인식된 텍스트를 가져오지만, 오류 및 기타 응답을 처리하려면 결과를 처리하는 코드를 작성해야 합니다. 다음 예에서는 및를 계산 합니다 result.getReason() .

  • 인식 결과 ResultReason.RecognizedSpeech를 출력합니다.
  • 일치하는 인식이 없는 경우 사용자에게 ResultReason.NoMatch를 알립니다.
  • 오류가 발생하는 경우 오류 메시지 ResultReason.Canceled를 출력합니다.
switch (result.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + result.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(result);
            System.out.println("CANCELED: Reason=" + cancellation.getReason());

            if (cancellation.getReason() == CancellationReason.Error) {
                System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                System.out.println("CANCELED: Did you update the subscription info?");
            }
        }
        break;
}

연속 인식

이전 예제에서는 단일 발화를 인식하는 시작 시 인식을 사용합니다. 단일 발화의 끝은 끝에서 무음을 수신하거나 최대 15초의 오디오가 처리될 때까지 대기하여 결정됩니다.

이와 대조적으로, 인식을 중지할 때 제어하려는 경우에는 연속 인식이 사용됩니다. recognizing, recognizedcanceled 이벤트를 구독하여 인식 결과를 얻어야 합니다. 인식을 중지하려면 stopContinuousRecognitionAsync를 호출해야 합니다. 다음은 오디오 입력 파일에서 연속 인식이 수행되는 방식을 보여주는 예입니다.

먼저 입력을 정의하고 SpeechRecognizer를 초기화하겠습니다.

AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer recognizer = new SpeechRecognizer(config, audioConfig);

다음으로, 음성 인식 상태를 관리하는 변수를 만들어 보겠습니다. 시작하기 위해, 클래스 범위에서 Semaphore를 선언합니다.

private static Semaphore stopTranslationWithFileSemaphore;

SpeechRecognizer에서 전송된 이벤트를 구독합니다.

  • recognizing: 중간 인식 결과가 포함된 이벤트에 대한 신호입니다.
  • recognized: 최종 인식 결과가 포함된 이벤트에 대한 신호입니다(성공적인 인식 시도를 나타냄).
  • sessionStopped: 인식 세션(작업)의 끝을 나타내는 이벤트에 대한 신호입니다.
  • canceled: 취소된 인식 결과가 포함된 이벤트에 대한 신호입니다(직접 취소 요청이나 전송 또는 프로토콜 오류로 인해 취소된 인식 시도를 나타냄).
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);

recognizer.recognizing.addEventListener((s, e) -> {
    System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});

recognizer.recognized.addEventListener((s, e) -> {
    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
        System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
    }
    else if (e.getResult().getReason() == ResultReason.NoMatch) {
        System.out.println("NOMATCH: Speech could not be recognized.");
    }
});

recognizer.canceled.addEventListener((s, e) -> {
    System.out.println("CANCELED: Reason=" + e.getReason());

    if (e.getReason() == CancellationReason.Error) {
        System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
        System.out.println("CANCELED: Did you update the subscription info?");
    }

    stopTranslationWithFileSemaphore.release();
});

recognizer.sessionStopped.addEventListener((s, e) -> {
    System.out.println("\n    Session stopped event.");
    stopTranslationWithFileSemaphore.release();
});

모든 설정이 끝났으면 startContinuousRecognitionAsync를 호출할 수 있습니다.

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
recognizer.startContinuousRecognitionAsync().get();

// Waits for completion.
stopTranslationWithFileSemaphore.acquire();

// Stops recognition.
recognizer.stopContinuousRecognitionAsync().get();

받아쓰기 모드

연속 인식을 사용하면 해당하는 "받아쓰기 사용" 함수를 사용하여 받아쓰기 처리를 사용하도록 설정할 수 있습니다. 이 모드에서는 음성 구성 인스턴스가 문장 부호와 같은 문장 구조의 단어 설명을 해석합니다. 예를 들어 "도시에 살고 계신가요 물음표"라는 발화는 "도시에 살고 계신가요?"라는 텍스트로 해석됩니다.

받아쓰기 모드를 사용하도록 설정하려면 SpeechConfig에서 enableDictation 메서드를 사용합니다.

config.enableDictation();

소스 언어 변경

음성 인식에 대한 일반적인 작업 중 하나는 입력(또는 소스) 언어를 지정하는 것입니다. 입력 언어를 프랑스어로 변경하는 방법을 살펴보겠습니다. 코드에서 SpeechConfig를 찾아서 바로 아래에 다음 줄을 추가합니다.

config.setSpeechRecognitionLanguage("fr-FR");

setSpeechRecognitionLanguage는 문자열을 인수로 사용하는 매개 변수입니다. 지원되는 로캘/언어 목록에 원하는 값을 입력할 수 있습니다.

인식 정확도 향상

구 목록은 오디오 데이터에서 사람의 이름이나 특정 위치처럼 알려진 문구를 식별하는 데 사용됩니다. 구 목록을 제공함으로써 음성 인식의 정확성을 향상시킬 수 있습니다.

예를 들어, "Move to"라는 명령과 "Ward"라는 대상을 말하면 "Move to Ward" 항목을 추가할 수 있습니다. 구를 추가하면 오디오를 인식할 때 "Move toward" 대신 "Move to Ward"가 인식될 확률이 높아집니다.

단일 단어 또는 전체 구를 구 목록에 추가할 수 있습니다. 인식 중에 구 목록의 항목은 항목이 발화 중간에 나타나더라도 목록의 단어와 구문의 인식률을 높이는 데 사용됩니다.

중요

구문 목록 기능은 en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN의 언어로 제공됩니다.

구 목록 기능에서 사용하는 구를 수백 개 이하로 제한해야 합니다. 현재 지원되지 않는 더 큰 목록이나 언어의 경우 사용자 지정 모델을 학습하는 것이 정확도를 향상시키는 더 나은 선택일 수 있습니다.

구 목록 기능은 사용자 지정 엔드포인트에서 지원되지 않습니다. 사용자 지정 엔드포인트에서 사용하지 마세요. 대신 구를 포함하는 사용자 지정 모델을 학습하세요.

구 목록을 사용하려면 PhraseListGrammar 개체를 만든 다음, AddPhrase를 사용하여 특정 단어와 구를 추가합니다.

PhraseListGrammar를 변경하면 그 다음 인식부터 또는 음성 서비스에 다시 연결한 후에 변경 내용이 적용됩니다.

PhraseListGrammar phraseList = PhraseListGrammar.fromRecognizer(recognizer);
phraseList.addPhrase("Supercalifragilisticexpialidocious");

구 목록을 지워야 하는 경우:

phraseList.clear();

인식 정확도를 높이는 다른 옵션

구 목록은 인식 정확도를 높이는 여러 옵션 중 하나일 뿐입니다. 다음도 가능합니다.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 샘플로 건너뛰기

샘플 코드로 바로 건너뛰려면 GitHub의 JavaScript 빠른 시작 샘플을 참조하세요.

또는 브라우저 기반 환경에서 Speech SDK를 사용하는 방법을 알아보려면 React 샘플을 참조하세요.

사전 요구 사항

이 문서에서는 여러분에게 Azure 계정 및 음성 서비스 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

Speech SDK 설치하기

작업을 수행하려면 먼저 Node.js용 Speech SDK를 설치해야 합니다. 설치할 패키지 이름만 알고 싶으면 npm install microsoft-cognitiveservices-speech-sdk를 실행합니다. 단계별 설치 지침은 시작 문서를 참조하세요.

다음 require 문을 사용하여 SDK를 가져옵니다.

const sdk = require("microsoft-cognitiveservices-speech-sdk");

에 대한 자세한 내용은 requirerequire

음성 구성 만들기

음성 SDK를 사용하여 음성 서비스를 호출하려면 SpeechConfig를 만들어야 합니다. 이 클래스에는 키 및 관련 위치/지역, 엔드포인트, 호스트 또는 권한 부여 토큰과 같은 구독 정보가 포함됩니다. 키와 위치/지역을 사용하여 SpeechConfig를 만듭니다. 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요.

const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

SpeechConfig를 초기화할 수 있는 몇 가지 다른 방법이 있습니다.

  • 엔드포인트 사용: 음성 서비스 엔드포인트를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 호스트 사용: 호스트 주소를 전달합니다. 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 권한 부여 토큰 사용: 권한 부여 토큰 및 관련 위치/지역을 전달합니다.

참고

음성 인식, 음성 합성, 번역 또는 의도 인식을 수행하고 있는지 여부에 관계없이 항상 구성을 만들게 됩니다.

마이크에서 인식(브라우저만 해당)

마이크의 음성 인식은 Node.js에서 지원되지 않으며, 브라우저 기반 JavaScript 환경에서만 지원됩니다. 마이크 구현에서 음성 텍스트 변환을 보려면 GitHub의 React 샘플을 참조하세요.

참고

특정 오디오 입력 디바이스를 사용하려면 에서 디바이스 ID를 지정해야 합니다. 오디오 입력 디바이스의 디바이스 ID를 가져오는 방법을 알아봅니다.

파일에서 인식

오디오 파일에서 음성을 인식하려면 Buffer 개체를 수락하는 fromWavFileInput()을 사용하여 AudioConfig를 만듭니다. 그런 다음, SpeechRecognizer를 초기화하고 audioConfigspeechConfig를 전달합니다.

const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

function fromFile() {
    let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
    let recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

    recognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        recognizer.close();
    });
}
fromFile();

메모리 내 스트림에서 인식

많은 사용 사례에서 오디오 데이터가 Blob 스토리지에서 제공되거나, 그렇지 않은 경우 이미 메모리 내에 ArrayBuffer 또는 이와 비슷한 원시 데이터 구조로 있을 수 있습니다. 코드는 다음과 같습니다.

  • createPushStream()을 사용하여 푸시 스트림을 만듭니다.
  • fs.createReadStream을 데모 용도로 사용하여 .wav 파일을 읽지만 이미 오디오 데이터가 ArrayBuffer에 있는 경우 콘텐츠를 입력 스트림에 쓰도록 바로 건너뛸 수 있습니다.
  • 푸시 스트림을 사용하여 오디오 구성을 만듭니다.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    recognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        recognizer.close();
    });
}
fromStream();

푸시 스트림을 입력으로 사용하면 오디오 데이터가 원시 PCM이라고 가정합니다(예: 헤더 건너뛰기). 헤더를 건너뛰지 않은 경우에도 API가 계속 작동하지만 최상의 결과를 위해 가 오디오 데이터의 시작 부분에 시작되도록 헤더를 읽는 논리를 구현하는 것이 fs 좋습니다. fs

오류 처리

이전 예제에서는 단순히 result.text에서 인식된 텍스트를 가져오지만 오류 및 기타 응답을 처리하려면 결과를 처리하는 코드를 작성해야 합니다. 다음 코드에서는 result.reason 속성을 평가하여 다음을 수행합니다.

  • 인식 결과 ResultReason.RecognizedSpeech를 출력합니다.
  • 일치하는 인식이 없는 경우 사용자에게 ResultReason.NoMatch를 알립니다.
  • 오류가 발생하는 경우 오류 메시지 ResultReason.Canceled를 출력합니다.
switch (result.reason) {
    case sdk.ResultReason.RecognizedSpeech:
        console.log(`RECOGNIZED: Text=${result.text}`);
        break;
    case sdk.ResultReason.NoMatch:
        console.log("NOMATCH: Speech could not be recognized.");
        break;
    case sdk.ResultReason.Canceled:
        const cancellation = CancellationDetails.fromResult(result);
        console.log(`CANCELED: Reason=${cancellation.reason}`);

        if (cancellation.reason == sdk.CancellationReason.Error) {
            console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
            console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
            console.log("CANCELED: Did you update the key and location/region info?");
        }
        break;
    }

연속 인식

이전 예제에서는 단일 발화를 인식하는 시작 시 인식을 사용합니다. 단일 발화의 끝은 끝에서 무음을 수신하거나 최대 15초의 오디오가 처리될 때까지 대기하여 결정됩니다.

이와 대조적으로, 인식을 중지할 때 제어하려는 경우에는 연속 인식이 사용됩니다. Recognizing, RecognizedCanceled 이벤트를 구독하여 인식 결과를 얻어야 합니다. 인식을 중지하려면 stopContinuousRecognitionAsync를 호출해야 합니다. 다음은 오디오 입력 파일에서 연속 인식이 수행되는 방식을 보여주는 예입니다.

먼저 입력을 정의하고 SpeechRecognizer를 초기화합니다.

const recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

다음으로, SpeechRecognizer에서 보낸 이벤트를 구독합니다.

  • recognizing: 중간 인식 결과가 포함된 이벤트에 대한 신호입니다.
  • recognized: 최종 인식 결과가 포함된 이벤트에 대한 신호입니다(성공적인 인식 시도를 나타냄).
  • sessionStopped: 인식 세션(작업)의 끝을 나타내는 이벤트에 대한 신호입니다.
  • canceled: 취소된 인식 결과가 포함된 이벤트에 대한 신호입니다(직접 취소 요청이나 전송 또는 프로토콜 오류로 인해 취소된 인식 시도를 나타냄).
recognizer.recognizing = (s, e) => {
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

recognizer.recognized = (s, e) => {
    if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == sdk.ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

recognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == sdk.CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you update the key and location/region info?");
    }

    recognizer.stopContinuousRecognitionAsync();
};

recognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    recognizer.stopContinuousRecognitionAsync();
};

모든 설정이 완료되면 startContinuousRecognitionAsync를 호출하여 인식을 시작합니다.

recognizer.startContinuousRecognitionAsync();

// make the following call at some point to stop recognition.
// recognizer.stopContinuousRecognitionAsync();

받아쓰기 모드

연속 인식을 사용하면 해당하는 "받아쓰기 사용" 함수를 사용하여 받아쓰기 처리를 사용하도록 설정할 수 있습니다. 이 모드에서는 음성 구성 인스턴스가 문장 부호와 같은 문장 구조의 단어 설명을 해석합니다. 예를 들어 "도시에 살고 계신가요 물음표"라는 발화는 "도시에 살고 계신가요?"라는 텍스트로 해석됩니다.

받아쓰기 모드를 사용하도록 설정하려면 SpeechConfig에서 enableDictation 메서드를 사용합니다.

speechConfig.enableDictation();

소스 언어 변경

음성 인식에 대한 일반적인 작업 중 하나는 입력(또는 소스) 언어를 지정하는 것입니다. 입력 언어를 이탈리아어로 변경하는 방법을 살펴보겠습니다. 코드에서 SpeechConfig를 찾아서 바로 아래에 다음 줄을 추가합니다.

speechConfig.speechRecognitionLanguage = "it-IT";

speechRecognitionLanguage 속성에는 언어 로캘 형식 문자열이 필요합니다. 지원되는 로캘/언어 목록의 로캘 열에 원하는 값을 입력할 수 있습니다.

인식 정확도 향상

구 목록은 오디오 데이터에서 사람의 이름이나 특정 위치처럼 알려진 문구를 식별하는 데 사용됩니다. 구 목록을 제공함으로써 음성 인식의 정확성을 향상시킬 수 있습니다.

예를 들어, "Move to"라는 명령과 "Ward"라는 대상을 말하면 "Move to Ward" 항목을 추가할 수 있습니다. 구를 추가하면 오디오를 인식할 때 "Move toward" 대신 "Move to Ward"가 인식될 확률이 높아집니다.

단일 단어 또는 전체 구를 구 목록에 추가할 수 있습니다. 인식 중에 구 목록의 항목은 항목이 발화 중간에 나타나더라도 목록의 단어와 구문의 인식률을 높이는 데 사용됩니다.

중요

구문 목록 기능은 en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN의 언어로 제공됩니다.

구 목록 기능에서 사용하는 구를 수백 개 이하로 제한해야 합니다. 현재 지원되지 않는 더 큰 목록이나 언어의 경우 사용자 지정 모델을 학습하는 것이 정확도를 향상시키는 더 나은 선택일 수 있습니다.

구 목록 기능은 사용자 지정 엔드포인트에서 지원되지 않습니다. 사용자 지정 엔드포인트에서 사용하지 마세요. 대신 구를 포함하는 사용자 지정 모델을 학습하세요.

구 목록을 사용하려면 PhraseListGrammar 개체를 만든 다음, addPhrase를 사용하여 특정 단어와 구를 추가합니다.

PhraseListGrammar를 변경하면 그 다음 인식부터 또는 음성 서비스에 다시 연결한 후에 변경 내용이 적용됩니다.

const phraseList = sdk.PhraseListGrammar.fromRecognizer(recognizer);
phraseList.addPhrase("Supercalifragilisticexpialidocious");

구 목록을 지워야 하는 경우:

phraseList.clear();

인식 정확도를 높이는 다른 옵션

구 목록은 인식 정확도를 높이는 여러 옵션 중 하나일 뿐입니다. 다음도 가능합니다.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 샘플에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 React 샘플

GitHub의 React 샘플로 이동하여 브라우저 기반 JavaScript 환경에서 Speech SDK를 사용하는 방법을 알아보세요. 이 샘플은 인증 토큰 교환 및 관리에 대한 디자인 패턴 예제를 보여주고, 음성 텍스트 변환을 위해 마이크 또는 파일에서 오디오를 캡처합니다.

Node.js 빠른 시작에 사용되는 디자인 패턴을 브라우저 환경에서 사용할 수도 있습니다.

Swift 및 Objective-C용 Speech SDK를 사용하여 음성을 텍스트로 변환할 수 있습니다.

사전 요구 사항

다음 샘플에서는 여러분에게 Azure 계정 및 Speech Service 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

Speech SDK 설치 및 샘플

Cognitive Services Speech SDK에는 iOS 및 Mac용 Swift 및 Objective-C에서 작성된 샘플이 포함되어 있습니다. 각 샘플에 대한 설치 지침을 보려면 링크를 클릭합니다.

또한 온라인 Objective-C 참조에 대한 Speech SDK를 제공합니다.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech SDK를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

GitHub의 샘플로 건너뛰기

샘플 코드로 바로 건너뛰려면 GitHub의 Python 빠른 시작 샘플을 참조하세요.

사전 요구 사항

이 문서에서는 다음과 같이 가정합니다.

Speech SDK 설치하기

Python Speech SDK는 PyPI(Python 패키지 인덱스) 모듈로 사용할 수 있습니다. 자세한 내용은 azure-cognitiveservices-speech를 참조하세요. Python Speech SDK는 Windows, Linux 및 macOS와 호환됩니다.

Python Speech SDK를 설치하기 전에 시스템 요구 사항 및 필수 구성요소를 충족해야 합니다.

Speech SDK를 설치하려면 터미널에서 이 명령을 실행합니다.

pip install azure-cognitiveservices-speech

macOS를 사용 중인데 설치 문제가 발생하는 경우 다음 명령을 먼저 실행해야 할 수도 있습니다.

python3 -m pip install --upgrade pip

이제 Speech SDK를 Python 프로젝트로 가져올 수 있습니다.

import azure.cognitiveservices.speech as speechsdk

음성 구성 만들기

음성 SDK를 사용하여 음성 서비스를 호출하려면 SpeechConfig를 만들어야 합니다. 이 클래스에는 음성 키 및 관련 위치/지역, 엔드포인트, 호스트 또는 권한 부여 토큰과 같은 구독에 대한 정보가 포함됩니다. 음성 SpeechConfig 키와 위치/지역을 사용하여 를 만듭니다. 음성 키-위치/지역 쌍을 찾으려면 키 및 위치/지역 찾기 페이지를 참조하세요.

speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")

SpeechConfig를 초기화할 수 있는 몇 가지 다른 방법이 있습니다.

  • 엔드포인트 사용: 음성 서비스 엔드포인트를 전달합니다. 음성 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 호스트 사용: 호스트 주소를 전달합니다. 음성 키 또는 권한 부여 토큰은 선택 사항입니다.
  • 권한 부여 토큰 사용: 권한 부여 토큰 및 연결된 영역을 전달합니다.

참고

음성 인식, 음성 합성, 번역 또는 의도 인식을 수행하고 있는지 여부에 관계없이 항상 구성을 만들게 됩니다.

마이크에서 인식

디바이스 마이크를 사용하여 음성을 인식하려면 AudioConfig를 전달하지 않고 SpeechRecognizer를 만들고 speech_config를 전달하면 됩니다.

import azure.cognitiveservices.speech as speechsdk

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
    
    print("Speak into your microphone.")
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_mic()

특정 오디오 입력 디바이스를 사용하려면 에서 디바이스 ID를 지정하고 SpeechRecognizer 생성자의 매개변수에 전달해야 audio_config 합니다. 오디오 입력 디바이스의 디바이스 ID를 가져오는 방법을 알아봅니다.

파일에서 인식

마이크 대신 오디오 파일에서 음성을 인식하려면 AudioConfig을 만들고 filename 매개 변수를 사용합니다.

import azure.cognitiveservices.speech as speechsdk

def from_file():
    speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
    audio_input = speechsdk.AudioConfig(filename="your_file_name.wav")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_input)
    
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_file()

오류 처리

이전 예제에서는 단순히 result.text에서 인식된 텍스트를 가져오지만 오류 및 기타 응답을 처리하려면 결과를 처리하는 코드를 작성해야 합니다. 다음 코드에서는 result.reason 속성을 평가하여 다음을 수행합니다.

  • 인식 결과 speechsdk.ResultReason.RecognizedSpeech를 출력합니다.
  • 일치하는 인식이 없는 경우 사용자에게 speechsdk.ResultReason.NoMatch를 알립니다.
  • 오류가 발생하는 경우 오류 메시지 speechsdk.ResultReason.Canceled를 출력합니다.
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))

연속 인식

이전 예제에서는 단일 발화를 인식하는 시작 시 인식을 사용합니다. 단일 발화의 끝은 끝에서 무음을 수신하거나 최대 15초의 오디오가 처리될 때까지 대기하여 결정됩니다.

이와 대조적으로, 인식을 중지할 때 제어하려는 경우에는 연속 인식이 사용됩니다. 에 연결하여 EventSignal 인식 결과를 얻고 인식을 중지하려면 stop_continuous_recognition() 또는 EventSignal 를 호출해야 합니다. 다음은 오디오 입력 파일에서 연속 인식이 수행되는 방식을 보여주는 예입니다.

먼저 입력을 정의하고 SpeechRecognizer를 초기화하겠습니다.

audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

다음으로, 음성 인식 상태를 관리하는 변수를 만들어 보겠습니다. 시작하기 위해, 이 변수를 False로 설정합니다. 이렇게 하면 인식을 시작할 때 인식이 완료되지 않았다고 안전하게 가정할 수 있습니다.

done = False

이제 evt가 수신되면 연속 인식을 중지하는 콜백을 만들어 보겠습니다. 몇 가지 주의할 사항이 있습니다.

  • evt가 수신되면 evt 메시지가 출력됩니다.
  • evt 수신되면 evt 호출되어 인식을 중지합니다.
  • 인식 상태가 True로 변경됩니다.
def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    nonlocal done
    done = True

다음 코드 샘플은 SpeechRecognizer에서 보낸 이벤트에 콜백을 연결하는 방법을 보여줍니다.

  • recognizing: 중간 인식 결과가 포함된 이벤트에 대한 신호입니다.
  • recognized: 최종 인식 결과가 포함된 이벤트에 대한 신호입니다(성공적인 인식 시도를 나타냄).
  • session_started: 인식 세션(작업)의 시작을 나타내는 이벤트에 대한 신호입니다.
  • session_stopped: 인식 세션(작업)의 끝을 나타내는 이벤트에 대한 신호입니다.
  • canceled: 취소된 인식 결과가 포함된 이벤트에 대한 신호입니다(직접 취소 요청이나 전송 또는 프로토콜 오류로 인해 취소된 인식 시도를 나타냄).
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))

speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

모든 설정이 끝났으면 start_continuous_recognition()를 호출할 수 있습니다.

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

받아쓰기 모드

연속 인식을 사용하면 해당하는 "받아쓰기 사용" 함수를 사용하여 받아쓰기 처리를 사용하도록 설정할 수 있습니다. 이 모드에서는 음성 구성 인스턴스가 문장 부호와 같은 문장 구조의 단어 설명을 해석합니다. 예를 들어 "도시에 살고 계신가요 물음표"라는 발화는 "도시에 살고 계신가요?"라는 텍스트로 해석됩니다.

받아쓰기 모드를 사용하도록 설정하려면 SpeechConfig에서 enable_dictation() 메서드를 사용합니다.

SpeechConfig.enable_dictation()

소스 언어 변경

음성 인식에 대한 일반적인 작업 중 하나는 입력(또는 소스) 언어를 지정하는 것입니다. 입력 언어를 독일어로 변경하는 방법을 살펴보겠습니다. 코드에서 SpeechConfig를 찾아서 바로 아래에 다음 줄을 추가합니다.

speech_config.speech_recognition_language="de-DE"

speech_recognition_language는 문자열을 인수로 사용하는 매개 변수입니다. 지원되는 로캘/언어 목록에 원하는 값을 입력할 수 있습니다.

인식 정확도 향상

구 목록은 오디오 데이터에서 사람의 이름이나 특정 위치처럼 알려진 문구를 식별하는 데 사용됩니다. 구 목록을 제공함으로써 음성 인식의 정확성을 향상시킬 수 있습니다.

예를 들어, "Move to"라는 명령과 "Ward"라는 대상을 말하면 "Move to Ward" 항목을 추가할 수 있습니다. 구를 추가하면 오디오를 인식할 때 "Move toward" 대신 "Move to Ward"가 인식될 확률이 높아집니다.

단일 단어 또는 전체 구를 구 목록에 추가할 수 있습니다. 인식 중에 구 목록의 항목은 항목이 발화 중간에 나타나더라도 목록의 단어와 구문의 인식률을 높이는 데 사용됩니다.

중요

구문 목록 기능은 en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN의 언어로 제공됩니다.

구 목록 기능에서 사용하는 구를 수백 개 이하로 제한해야 합니다. 현재 지원되지 않는 더 큰 목록이나 언어의 경우 사용자 지정 모델을 학습하는 것이 정확도를 향상시키는 더 나은 선택일 수 있습니다.

구 목록 기능은 사용자 지정 엔드포인트에서 지원되지 않습니다. 사용자 지정 엔드포인트에서 사용하지 마세요. 대신 구를 포함하는 사용자 지정 모델을 학습하세요.

구 목록을 사용하려면 PhraseListGrammar 개체를 만든 다음, addPhrase를 사용하여 특정 단어와 구를 추가합니다.

PhraseListGrammar를 변경하면 그 다음 인식부터 또는 음성 서비스에 다시 연결한 후에 변경 내용이 적용됩니다.

phrase_list_grammar = speechsdk.PhraseListGrammar.from_recognizer(reco)
phrase_list_grammar.addPhrase("Supercalifragilisticexpialidocious")

구 목록을 지워야 하는 경우:

phrase_list_grammar.clear()

인식 정확도를 높이는 다른 옵션

구 목록은 인식 정확도를 높이는 여러 옵션 중 하나일 뿐입니다. 다음도 가능합니다.

이 빠른 시작에서는 Speech Service 및 cURL을 사용하여 음성을 텍스트로 변환하는 방법을 알아봅니다.

음성 텍스트 변환 개념에 대한 간략한 설명은 개요 문서를 참조하세요.

필수 구성 요소

이 문서에서는 여러분에게 Azure 계정 및 음성 서비스 구독이 있다고 가정합니다. 계정 및 구독이 없는 경우 음성 서비스 평가판을 사용해 보세요.

음성을 텍스트로 변환

명령 프롬프트에서 다음 명령을 실행합니다. 명령에 다음 값을 삽입해야 합니다.

  • Speech Service 구독 키입니다.
  • Speech Service 지역입니다.
  • 입력 오디오 파일 경로입니다. 텍스트 음성 변환을 사용하여 오디오 파일을 생성할 수 있습니다.
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'

다음과 같은 응답을 받게 됩니다.

{
    "RecognitionStatus": "Success",
    "DisplayText": "My voice is my passport, verify me.",
    "Offset": 6600000,
    "Duration": 32100000
}

자세한 내용은 음성 텍스트 변환 REST API 참조를 참조하세요.

Speech Service의 핵심 기능 중 하나는 사람의 음성을 인식하여 글로 바꾸는 기능입니다(종종 음성 텍스트 변환이라고도 함). 이 빠른 시작에서는 앱 및 제품에서 Speech CLI를 사용하여 고품질 음성을 텍스트로 변환하는 방법을 알아봅니다.

다운로드 및 설치

Windows에 Speech CLI를 설치하려면 다음 단계를 수행합니다.

  1. Windows의 경우 플랫폼에 맞는 Visual Studio 2019용 Microsoft Visual C++ 재배포 가능 패키지가 필요합니다. 처음 설치하려면 다시 시작해야 할 수 있습니다.

  2. .NET Core 3.1 SDK를 설치합니다.

  3. 다음 명령을 입력하여 NuGet을 통해 음성 CLI를 설치합니다.

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    

spx를 입력하여 Speech CLI에 대한 도움말을 표시합니다.

참고

NuGet 대신 Windows용 Speech CLI를 zip 파일로 다운로드하여 추출할 수 있습니다.

글꼴 제한 사항

Windows에서 Speech CLI는 로컬 컴퓨터에서 명령 프롬프트에 사용할 수 있는 글꼴만 표시할 수 있습니다. Windows 터미널은 Speech CLI에서 대화형으로 생성된 모든 글꼴을 지원합니다.

파일로 출력하면 메모장과 같은 텍스트 편집기나 Microsoft Edge와 같은 웹 브라우저도 모든 글꼴을 표시할 수 있습니다.

마이크에서 음성을 텍스트로 변환

PC 마이크를 연결하여 켜고 마이크를 사용할 수도 있는 앱을 해제합니다. 일부 컴퓨터에는 기본 제공 마이크가 있지만 다른 컴퓨터에는 Bluetooth 디바이스를 구성해야 합니다.

이제 음성 CLI를 실행하여 마이크의 음성을 인식할 준비가 되었습니다. 명령줄에서 Speech CLI 이진 파일이 포함된 디렉터리로 변경하고 다음 명령을 실행합니다.

spx recognize --microphone

참고

Speech CLI의 기본값은 영어입니다. 음성 텍스트 변환 테이블에서 다른 언어를 선택할 수 있습니다. 예를 들어 독일어 음성을 인식하도록 --source de-DE를 추가합니다.

마이크에 대고 말하면 실시간으로 단어를 텍스트로 전사하는 것을 볼 수 있습니다. 음성 CLI는 일정 시간 음소거 후 또는 ctrl-C를 누를 때 중지됩니다.

오디오 파일에서 음성을 텍스트로 변환

Speech CLI는 다양한 파일 형식과 자연어로 음성을 인식할 수 있습니다. 이 예제에서는 영어 음성이 포함된 WAV 파일(16kHz 또는 8kHz, 16비트 및 모노 PCM)을 사용할 수 있습니다. 또는 빠른 샘플을 원하는 경우 whatstheweatherlike.wav 파일을 다운로드하여 Speech CLI 이진 파일과 동일한 디렉터리에 복사합니다.

이제 다음 명령을 실행하여 오디오 파일에서 찾은 음성을 인식하도록 Speech CLI를 실행할 준비가 되었습니다.

spx recognize --file whatstheweatherlike.wav

참고

Speech CLI의 기본값은 영어입니다. 음성 텍스트 변환 테이블에서 다른 언어를 선택할 수 있습니다. 예를 들어 독일어 음성을 인식하도록 --source de-DE를 추가합니다.

Speech CLI는 화면에 음성의 텍스트 전사를 표시합니다.

다음 단계