Speech-to-Text 요청 구성

이 문서는 Speech-to-Text 사용에 대한 기본사항을 설명하는 가이드입니다. 이 개념 가이드는 Speech-to-Text에 보낼 수 있는 요청 유형, 해당 요청 작성 방법, 응답 처리 방법을 설명합니다. Speech-to-Text의 모든 사용자는 이 API를 사용하기 전에 이 가이드와 관련 가이드 중 하나를 읽는 것이 좋습니다.

직접 사용해 보기

Google Cloud를 처음 사용하는 경우 계정을 만들어 실제 시나리오에서 Speech-to-Text의 성능을 평가합니다. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.

무료로 Speech-to-Text 사용해 보기

음성 요청

Speech-to-Text에는 음성 인식을 수행하는 세 가지 주요 방법이 있습니다. 이들 방법은 다음과 같습니다.

  • 동기 인식(REST, gRPC)은 오디오 데이터를 Speech-to-Text API로 보내고, 해당 데이터를 인식하고, 모든 오디오가 처리된 후 결과를 확인합니다. 동기식 인식 요청 대상은 길이가 1분 이하인 오디오 데이터로 제한됩니다.

  • 비동기 인식(REST 및 gRPC)은 오디오 데이터를 Speech-to-Text API로 보내고, 장기 실행 작업을 시작합니다. 이 작업을 사용하여 주기적으로 인식 결과를 폴링할 수 있습니다. 최대 480분 길이의 오디오 데이터에는 비동기식 요청을 사용하세요.

  • 스트리밍 인식(gRPC만 해당)은 gRPC 양방향 스트림에 제공되는 오디오 데이터를 인식합니다. 스트리밍 요청은 마이크에서 라이브 오디오 캡처 용도와 같은 실시간 인식 용도로 설계되었습니다. 스트리밍 인식은 오디오 캡처 중에 중간 결과를 제공하므로, 사용자가 계속 말하는 중에도 결과를 표시할 수 있습니다.

요청에는 오디오 데이터는 물론 구성 매개변수도 포함됩니다. 다음 섹션은 이러한 유형의 인식 요청, 요청이 생성하는 응답, 해당 응답 처리 방법을 자세하게 설명합니다.

Speech-to-Text API 인식

Speech-to-Text API 동기식 인식 요청은 음성 오디오 데이터 인식을 수행하는 가장 간단한 방법입니다. Speech-to-Text는 동기식 요청으로 전송된 음성 오디오 데이터(최대 1분 길이)를 처리할 수 있습니다. Speech-to-Text는 오디오를 모두 처리하고 인식한 후 응답을 반환합니다.

동기식 요청은 차단 요청이므로 Speech-to-Text가 응답을 반환한 후에야 다음 요청을 처리할 수 있습니다. Speech-to-Text는 일반적으로 실시간보다 빠르게 오디오를 처리하며, 30초 길이의 오디오를 평균 15초 내에 처리합니다. 오디오 품질이 나쁘면 인식 요청을 처리하는 데 시간이 상당히 오래 걸릴 수 있습니다.

Speech-to-Text에는 Speech-to-Text API 동기식 및 비동기식 요청을 호출하는 REST 및 gRPC 메소드 모두가 있습니다. API의 기본 사용법을 보여주고 설명하는 것이 더 간단하므로, 이 문서는 REST API를 보여줍니다. 그러나 REST 또는 gRPC 요청의 기본 구성은 매우 유사합니다. 스트리밍 인식 요청 은 gRPC에서만 지원됩니다.

동기식 음성 인식 요청

동기식 Speech-to-Text API 요청은 음성 인식 구성과 오디오 데이터로 구성됩니다. 샘플 요청은 다음과 같습니다.

{
    "config": {
        "encoding": "LINEAR16",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
    },
    "audio": {
        "uri": "gs://bucket-name/path_to_audio_file"
    }
}

모든 Speech-to-Text API 동기 인식 요청에는 음성 인식 config 필드(RecognitionConfig 유형)가 포함되어야 합니다. RecognitionConfig에는 다음과 같은 하위 필드가 있습니다.

  • encoding - (필수) 제공된 오디오의 인코딩 체계를 AudioEncoding 유형으로 지정합니다. 코덱을 선택할 수 있는 경우, 최상의 성능을 원한다면 FLAC 또는 LINEAR16과 같은 무손실 인코딩을 선택하는 것이 좋습니다. (자세한 내용은 오디오 인코딩을 참조하세요.) 파일 헤더에 인코딩이 포함된 FLACWAV 파일의 경우 encoding 필드는 필수가 아닌 선택사항입니다.
  • sampleRateHertz - (필수) 제공된 오디오의 샘플링 레이트(Hz)를 지정합니다. (샘플링 레이트에 대한 자세한 내용은 아래의 샘플링 레이트를 참조하세요.) 파일 헤더에 샘플링 레이트가 포함된 FLACWAV 파일의 경우 sampleRateHertz 필드는 필수가 아닌 선택사항입니다.
  • languageCode - (필수) 제공된 오디오의 음성 인식에 사용할 언어와 리전/지역을 포함합니다. 언어 코드는 BCP-47 식별자여야 합니다. 언어 코드는 일반적으로 언어를 나타내는 기본 언어 태그와 보조 리전 하위 태그로 구성됩니다(예: 위의 예에서 'en'은 영어를, 'US'는 미국을 나타냄). (지원되는 언어 목록은 지원되는 언어를 참조하세요.)
  • maxAlternatives - (선택사항, 기본값은 1) 응답에서 제공할 대체 변환 텍스트 수를 나타냅니다. 기본적으로 Speech-to-Text API는 기본 텍스트 변환 한 개를 제공합니다. 다른 대체 변환 텍스트를 평가하려면 maxAlternatives를 더 높은 값으로 설정합니다. 인식자가 대체 변환 텍스트 품질이 적절하다고 판단하면 Speech-to-Text는 대체 변환 텍스트만 반환합니다. 일반적으로 대체 변환 텍스트는 사용자 의견이 필요한 실시간 요청(예: 음성 명령)에 더 적합하므로 스트리밍 인식 요청에 알맞습니다.
  • profanityFilter- (선택사항) 모욕적인 단어 또는 구문 필터링 여부를 나타냅니다. 필터링된 단어는 첫 번째 문자와 별표(나머지 문자)로 표시됩니다(예: f***). 욕설 필터는 단일 단어에 적용되지만 구문 또는 단어 조합으로 된 욕설이나 공격적인 음성을 감지하지 않습니다.
  • speechContext- (선택사항) 이 오디오를 처리하는 데 필요한 추가 문맥 정보를 포함합니다. 컨텍스트에는 다음과 같은 하위 필드가 있습니다.
    • boost - 지정된 단어나 구문을 인식하도록 가중치를 할당하는 값을 포함합니다.
    • phrases - 음성 인식 작업의 힌트를 제공하는 단어와 구문의 목록을 포함합니다. 자세한 내용은 음성 적응의 정보를 참조하세요.

오디오는 RecognitionAudio 유형의 audio 매개변수를 통해 Speech-to-Text에 제공됩니다. audio 필드에는 다음 하위 필드 중 하나가 포함됩니다.

  • content는 요청에 삽입된 형태의 평가 대상 오디오입니다. 자세한 내용은 아래의 오디오 콘텐츠 삽입을 참조하세요. 이 필드에서 직접 전달되는 오디오 길이는 1분으로 제한됩니다.
  • uri에는 오디오 콘텐츠를 가리키는 URI가 포함됩니다. gzip 등으로 압축되지 않은 파일이어야 합니다. 현재 이 필드에는 Google Cloud Storage URI(gs://bucket-name/path_to_audio_file 형식)가 포함되어야 합니다. 아래의 URI로 오디오 참조 전달을 참조하세요.

이러한 요청과 응답 매개변수에 대한 자세한 내용은 아래에 있습니다.

샘플링 레이트

요청 구성의 sampleRateHertz 필드에서 오디오의 샘플링 레이트를 지정합니다. 이 샘플링 레이트는 관련된 오디오 콘텐츠 또는 스트림의 샘플링 레이트와 일치해야 합니다. Speech-to-Text에서는 8000Hz와 48000Hz 사이의 샘플링 레이트가 지원됩니다. sampleRateHertz 필드를 사용하는 대신 파일 헤더에 FLAC 또는 WAV 파일의 샘플링 레이트를 지정할 수 있습니다. Speech-to-Text API에 제출하려면 FLAC 파일의 FLAC 헤더에 샘플링 레이트가 포함되어야 합니다.

소스 자료를 인코딩할 때 선택할 수 있다면 16,000Hz 샘플링 레이트를 사용하여 오디오를 캡처하는 것이 좋습니다. 값이 이 값보다 낮으면 음성 인식 정확도가 손상될 수 있습니다. 레벨이 높아도 음성 인식 품질에 큰 영향을 주지 않습니다.

그러나 오디오 데이터가 16,000Hz가 아닌 기존 샘플링 레이트로 이미 녹음된 경우에는 오디오를 16,000Hz로 다시 샘플링하지 마세요. 예를 들어, 대부분의 이전 전화 통신 오디오는 8,000Hz 샘플링 레이트를 사용하므로 결과 정확도가 떨어질 수 있습니다. 이러한 오디오를 사용해야 하는 경우, Speech API에 원래 샘플링 레이트로 오디오를 제공합니다.

언어

Speech-to-Text의 인식 엔진은 다양한 언어와 방언을 지원합니다. 요청 구성의 languageCode 필드에서 BCP-47 식별자를 사용하여 오디오 언어(그리고 국가 또는 지역 방언)를 지정합니다.

언어 지원 페이지에서 각 기능에 지원되는 언어의 전체 목록을 확인할 수 있습니다.

시차(타임스탬프)

Speech-to-Text에는 제공된 오디오에서 인식되는 각 말의 시작 부분과 끝 부분의 시차 값(타임스탬프)이 포함될 수 있습니다. 시차 값은 오디오 시작 부분에서 경과된 시간을 100ms 단위로 나타냅니다.

시차는 특히 긴 오디오 파일을 분석하는 경우, 즉 인식된 텍스트에서 특정 단어를 검색하고 원본 오디오에서 찾아야 하는 경우에 유용합니다. 시차는 recognize, streamingrecognize, longrunningrecognize 등 모든 인식 방법에서 지원됩니다.

인식 응답에 제공된 첫 번째 대체 텍스트 변환의 시차 값만 포함됩니다.

요청 결과에 시차를 포함하려면 요청 구성에서 enableWordTimeOffsets 매개변수를 true로 설정합니다. REST API 또는 클라이언트 라이브러리를 사용하는 예시는 시차(타임스탬프) 사용을 참조하세요. 예를 들어, 다음과 같이 요청 구성에 enableWordTimeOffsets 매개변수를 포함할 수 있습니다.

{
"config": {
  "languageCode": "en-US",
  "enableWordTimeOffsets": true
  },
"audio":{
  "uri":"gs://gcs-test-data/gettysburg.flac"
  }
}

Speech-to-Text API에서 확인한 결과에는 다음과 같이 인식된 각 단어에 대한 시차 값이 포함됩니다.

{
  "name": "6212202767953098955",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2017-07-24T10:21:22.013650Z",
    "lastUpdateTime": "2017-07-24T10:21:45.278630Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "Four score and twenty...(etc)...",
            "confidence": 0.97186122,
            "words": [
              {
                "startTime": "1.300s",
                "endTime": "1.400s",
                "word": "Four"
              },
              {
                "startTime": "1.400s",
                "endTime": "1.600s",
                "word": "score"
              },
              {
                "startTime": "1.600s",
                "endTime": "1.600s",
                "word": "and"
              },
              {
                "startTime": "1.600s",
                "endTime": "1.900s",
                "word": "twenty"
              },
              ...
            ]
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "for score and plenty...(etc)...",
            "confidence": 0.9041967,
          }
        ]
      }
    ]
  }
}

모델 선택

Speech-to-Text는 여러 머신러닝 모델 중 하나를 사용하여 오디오 파일의 텍스트를 변환할 수 있습니다. Google은 이러한 음성 인식 모델에 특정 오디오 유형 및 소스를 학습시켰습니다.

Speech-to-Text에 오디오 텍스트 변환 요청을 보내는 경우 원본 오디오 소스를 지정하면 더 향상된 결과를 받을 수 있습니다. 이를 통해 Speech-to-Text API는 특정 소스 유형의 음성 오디오를 인식하도록 학습된 머신러닝 모델을 사용하여 오디오 파일을 처리할 수 있습니다.

음성 인식 모델을 지정하려면 요청의 RecognitionConfig 객체에 model 필드를 포함하여 사용할 모델을 지정합니다.

Speech-to-Text는 오디오 파일을 텍스트로 변환할 때 다음 유형의 머신러닝 모델을 사용할 수 있습니다.

유형 열거형 상수 설명
최근 긴 문자열 latest_long

미디어 또는 자발적 음성과 대화 같은 모든 종류의 긴 콘텐츠에 이 모델을 사용합니다. 특히 동영상 모델을 도착어로 사용할 수 없는 경우 동영상 모델 대신 이 모델을 사용하세요. 기본 모델 대신 이 모델을 사용할 수도 있습니다.

최근 짧은 문자열 latest_short

몇 초 길이의 짧은 발화에 이 모델을 사용합니다. 명령어나 다른 단일 장면 방향 음성 사용 사례를 캡처하려는 경우에 유용합니다. 명령어 및 검색 모델 대신 이 모델을 사용하는 것이 좋습니다.

동영상 video

여러 명의 화자가 있는 동영상 클립 또는 기타 소스(예: 팟캐스트)의 오디오 스크립트를 작성하려면 이 모델을 사용합니다. 이 모델은 고품질 마이크를 사용하여 녹음되거나 배경 소음이 많은 오디오에 가장 적합합니다. 최상의 결과를 얻기 위해 16,000Hz 이상의 샘플링 레이트로 녹음된 오디오를 제공합니다.

참고: 표준 요금보다 비싼 프리미엄 모델입니다.

전화 통화 phone_call

전화 통화 오디오 스크립트를 작성하려면 이 모델을 사용합니다. 일반적으로 전화 오디오는 8,000Hz 샘플링 레이트로 녹음됩니다.

참고: 고급 전화 모델은 표준 요금보다 비싼 프리미엄 모델입니다.

ASR: 명령어 및 검색 command_and_search

짧은 오디오 클립을 텍스트로 변환하려면 이 모델을 사용합니다. 일부 예로 음성 명령이나 음성 검색 등이 있습니다.

ASR: 기본값 default

오디오가 이 표에 설명된 다른 모델에 해당하지 않는 경우에 이 모델을 사용합니다. 예를 들어, 화자가 1명뿐인 긴 형태의 오디오 녹음에 이 유형을 사용할 수 있습니다. 기본 모델은 별도의 모델이 맞춤 설정된 동영상 클립 등 오디오를 포함한 모든 유형의 오디오에 대한 스크립트 작성 결과를 생성합니다. 그러나 기본 모델을 사용하여 동영상 클립 오디오를 인식하면 동영상 모델을 사용하는 경우보다 스크립트 작성 결과 품질이 낮을 수 있습니다. 16,000Hz 이상의 샘플링 레이트로 녹음된 Hi-Fi 오디오가 좋습니다.

의료 음성기록 medical_dictation

의료 전문가가 지정한 메모를 텍스트로 변환하려면 이 모델을 사용합니다.

의료 대화 medical_conversation

이 모델을 사용하여 의료 전문가와 환자 간의 대화를 텍스트로 변환합니다.

삽입된 오디오 콘텐츠

요청의 audio 필드 내에 content 매개변수를 전달하면 삽입된 오디오가 음성 인식 요청에 포함됩니다. gRPC 요청 내에서 콘텐츠로 제공되는 삽입된 오디오의 경우, 해당 오디오는 Proto3 직렬화와 호환되고 바이너리 데이터로 제공되어야 합니다. REST 요청 내에서 콘텐츠로 제공되는 삽입된 오디오의 경우, 해당 오디오는 JSON 직렬화와 호환되고 먼저 Base64로 인코딩되어야 합니다. (자세한 내용은 오디오를 Base64 인코딩을 참조하세요.)

Google Cloud 클라이언트 라이브러리를 사용하여 요청을 작성하는 경우, 일반적으로 이 바이너리(또는 base-64로 인코딩된) 데이터를 content 필드에 직접 작성합니다.

URI 참조로 오디오 전달

보다 일반적으로는 음성 요청의 audio 필드에 Google Cloud Storage에 있는 다음 형식의 오디오 파일(base64가 아닌 바이너리 형식)을 가리키는 uri 매개변수를 전달합니다.

gs://bucket-name/path_to_audio_file

예를 들어, 음성 요청의 다음 부분은 빠른 시작에서 사용되는 샘플 오디오 파일을 참조합니다.

...
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
    }
...

다음 중 하나와 같이 Google Cloud Storage 파일을 읽을 수 있는 적절한 액세스 권한이 있어야 합니다.

  • 공개적으로 읽기 가능(예: Google 샘플 오디오 파일)
  • 서비스 계정 승인을 사용하는 경우 서비스 계정에서 읽기 가능
  • 사용자 계정 승인에 3-legged OAuth를 사용하는 경우 사용자 계정에서 읽기 가능

Google Cloud Storage의 액세스 관리에 대한 자세한 내용은 Google Cloud Storage 문서의 액세스 제어 목록 생성 및 관리를 참조하세요.

Speech-to-Text API 응답

앞에서 설명한 것처럼 동기식 Speech-to-Text API 응답은 제공된 오디오 길이에 비례하여 결과를 확인하는 데 다소의 시간을 소모할 수 있습니다. 처리가 완료되면 API는 다음과 같이 응답을 반환합니다.

{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.98267895,
          "transcript": "how old is the Brooklyn Bridge"
        }
      ]
    }
  ]
}

다음은 필드에 대한 설명입니다.

  • results에는 결과(SpeechRecognitionResult 형식) 목록이 포함됩니다. 여기서 각 결과는 특정 오디오 세그먼트에 해당되고, 오디오 세그먼트는 구두점으로 구분됩니다. 각 결과는 다음 필드 중 하나 이상으로 구성됩니다.
    • alternatives에는 SpeechRecognitionAlternatives 형식의 변환 텍스트 목록이 포함됩니다. 대체 변환 텍스트가 두 개 이상 나타날지 여부는 maxAlternatives1보다 큰 값으로 설정하여 대체 변환 텍스트를 두 개 이상 요청했는지 여부와 Speech-to-Text가 충분히 높은 품질의 대체 변환 텍스트를 생성했는지 여부에 따라 달라집니다. 각 대체 변환 텍스트는 다음 필드로 구성됩니다.
      • transcript에는 변환 텍스트가 포함됩니다. 아래의 변환 텍스트 처리를 참조하세요.
      • confidence에는 특정 변환 텍스트에 대한 Speech-to-Text의 신뢰도를 나타내는 값(0~1)이 포함됩니다. 아래의 신뢰값 해석을 참조하세요.

제공된 오디오에서 음성을 인식할 수 없는 경우, 반환된 results 목록에 항목이 없습니다. 음성을 인식하지 못하는 이유는 일반적으로 오디오 품질이 매우 나쁘거나 언어 코드, 인코딩 또는 샘플링 레이트 값이 제공된 오디오와 일치하지 않기 때문입니다.

다음 섹션은 이 응답의 구성요소를 설명합니다.

Speech-to-Text API의 각 동기 응답은 인식된 모든 오디오가 포함된 단일 결과가 아닌 여러 결과 목록을 반환합니다. 인식된 오디오 목록(transcript 요소 내)은 연속 순서로 나타납니다.

대체 값 선택

성공적인 동기 인식 응답 내의 각 결과에는 alternatives가 하나 이상 포함될 수 있습니다(요청의 maxAlternatives 값이 1보다 큰 경우). Speech-to-Text가 대체 변환 텍스트의 신뢰값이 충분하다고 판단하면 응답에 이 대체 변환 텍스트가 포함됩니다. 응답의 첫 번째 대체 변환 텍스트는 항상 최고의(가능성이 가장 높은) 대체 변환 텍스트입니다.

maxAlternatives1보다 큰 값으로 설정하더라도 대체 텍스트 변환이 여러 개 반환된다고 암시하거나 보장하지 않습니다. 일반적으로 스트리밍 인식 요청을 통해 결과를 가져오는 사용자에게 실시간 옵션을 제공하기 위해서는 한 개 이상의 대체 텍스트 변환이 더 적합합니다.

텍스트 변환 처리

응답 내에서 제공되는 각 대체 텍스트 변환에는 인식된 텍스트를 포함하는 transcript가 포함됩니다. 대체 텍스트 변환이 순차적으로 제공되면 이러한 텍스트 변환을 함께 연결해야 합니다.

다음 Python 코드는 결과 목록에서 반복되고 텍스트 변환을 함께 연결합니다. 어떠한 경우에도 첫 번째 대체 텍스트 변환(0번째)을 취합니다.

response = service_request.execute()
recognized_text = 'Transcribed Text: \n'
for i in range(len(response['results'])):
    recognized_text += response['results'][i]['alternatives'][0]['transcript']

신뢰값

confidence 값은 0.0과 1.0 사이의 추정치이며, 오디오의 각 단어에 할당된 '가능성' 값을 집계하여 계산됩니다. 숫자가 클수록 각 단어가 정확하게 인식되었을 가능성이 높아집니다. 이 필드는 일반적으로 최상위 가설에만 제공되며 is_final=true인 결과에 대해서만 제공됩니다. 예를 들어, confidence 값을 사용하여 대체 결과를 사용자에게 표시할지 아니면 사용자에게 확인을 요청할지를 결정할 수 있습니다.

그러나 이 모델은 confidence 점수뿐만 아니라 문장 컨텍스트와 같은 다른 여러 가지 신호를 기반으로 하여 '최상의' 결과를 결정합니다. 이러한 이유로 최상위 결과의 신뢰도 점수가 최고점이 아닌 경우가 있을 수 있습니다. 대체 결과를 여러 개 요청하지 않은 경우 반환된 하나의 '최상의' 결과는 예상보다 낮은 신뢰값을 가질 수 있는데, 예를 들어 많이 쓰이지 않는 단어가 사용되었을 때 이러한 경우가 발생할 수 있습니다. 희귀어는 올바르게 인식되더라도 낮은 '가능성' 값을 가질 수 있습니다. 컨텍스트에 따라 희귀어가 가장 적합한 옵션으로 결정되면 대체 옵션보다 confidence 값이 낮더라도 최상위에 결과가 표시됩니다.

비동기식 요청 및 응답

LongRunningRecognize 메서드에 대한 비동기식 Speech-to-Text API 요청은 동기식 Speech-to-Text API 요청과 형식이 동일합니다. 하지만 비동기식 요청은 응답을 반환하는 대신 장기 실행 작업(작업 유형)을 시작하고 이 작업을 수신자에게 즉시 반환합니다. 길이가 최대 480분인 오디오에 비동기식 음성 인식을 사용할 수 있습니다.

일반적인 작업 응답은 다음과 같습니다.

{
  "name": "operation_name",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata"
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

아직 결과가 나타나지 않습니다. Speech-to-Text는 오디오를 계속 처리하고 이 작업을 사용하여 결과를 저장합니다. LongRunningRecognize 요청이 완료될 때 반환되는 작업response 필드에 결과가 표시됩니다.

요청 완료 후 전체 응답은 다음과 같습니다.

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongrunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "confidence": 0.98267895,
        "transcript": "how old is the Brooklyn Bridge"
      }]}]
  },
  "done": True,
}

doneTrue로 설정되었고 작업의 responseSpeechRecognitionResult 유형의 결과 집합이 포함됩니다. 이 결과 유형은 동기식 Speech-to-Text API 인식 요청에서 반환되는 유형과 동일합니다.

기본적으로 비동기 REST 응답은 done을 기본값인 False로 설정합니다. 하지만 JSON은 필드 내에 기본값이 존재하도록 요구하지 않으므로, 작업 완료 여부 테스트 시 done 필드가 존재하고 True로 설정되어 있는지 모두 테스트해야 합니다.

스트리밍 Speech-to-Text API 인식 요청

스트리밍 Speech-to-Text API 인식 호출은 양방향 스트림 내에서 오디오의 실시간 캡처 및 인식을 위해 설계되었습니다. 애플리케이션은 요청 스트림에서 오디오를 보내고 응답 스트림에서 중간 및 최종 인식 결과를 실시간으로 받을 수 있습니다. 중간 결과는 특정 오디오 섹션의 현재 인식 결과를 나타내며, 최종 인식 결과는 해당 오디오 섹션의 가장 높은 최종 추측을 나타냅니다.

스트리밍 요청

단일 요청 내에서 구성 및 오디오 모두 보내는 동기 및 비동기 호출과 달리 스트리밍 Speech API를 호출하려면 요청을 여러 개 전송해야 합니다. 첫 번째 StreamingRecognizeRequest에는 오디오 없이 StreamingRecognitionConfig 유형의 구성이 포함되어야 합니다. 그런 다음 동일한 스트림을 통해 전송되는 후속 StreamingRecognizeRequest는 원시 오디오 바이트의 연속 프레임으로 구성됩니다.

StreamingRecognitionConfig는 다음 필드로 구성됩니다.

  • config - (필수) RecognitionConfig 유형의 오디오 구성 정보를 포함하며 동기식 및 비동기식 요청에 표시되는 것과 동일합니다.
  • single_utterance - (선택사항, 기본값은 false) 음성이 더 이상 감지되지 않으면 이 요청을 자동으로 종료할지 여부를 나타냅니다. 이 필드가 설정되면 Speech-to-Text가 일시중지, 무음 또는 비음성 오디오를 감지하여 인식을 종료할 시기를 결정합니다. 설정되지 않으면 스트림이 직접 닫히거나 스트림 제한 길이가 초과될 때까지 스트림이 오디오를 계속 리슨하고 처리합니다. single_utterancetrue로 설정하면 음성 명령 처리에 유용합니다.
  • interim_results - (선택사항, 기본값은 false) 이 스트림 요청이 나중에 추가 오디오 처리 후 세분화할 수 있는 임시 결과를 반환해야 함을 나타냅니다. is_finalfalse로 설정하면 중간 결과가 응답 내에 기록됩니다.

스트리밍 응답

스트리밍 음성 인식 결과는 StreamingRecognitionResponse 형식의 일련의 응답 내에서 반환됩니다. 이러한 응답은 다음 필드로 구성됩니다.

  • speechEventTypeSpeechEventType 유형의 이벤트를 포함합니다. 이러한 이벤트 값은 단일 발화가 완료된 것으로 판단되는 시점을 나타냅니다. 음성 이벤트는 스트림 응답 내에서 마커로 작동합니다.
  • results에는 StreamingRecognitionResult 형식의 중간 또는 최종 결과인 결과 목록이 포함됩니다. results 목록에는 다음과 같은 하위 필드가 있습니다.
    • alternatives에는 대체 변환 텍스트 목록이 포함됩니다.
    • isFinal은 이 목록 항목에서 얻은 결과가 중간 또는 최종 결과인지 나타냅니다. Google은 단일 시스템 전체에서 여러 isFinal=true 결과를 반환할 수 있지만 쓰기 시스템이 닫힌(절반 닫힘) 후에만 isFinal=true 결과가 보장됩니다.
    • stability는 지금까지 얻은 결과의 변동성을 나타냅니다. 0.0은 완전한 불안정성을 나타내고 1.0은 완전한 안전성을 나타냅니다. 변환 텍스트의 정확도를 평가하는 신뢰도와 달리 stability는 주어진 부분 결과의 변경 여부를 추정합니다. isFinaltrue로 설정되면, stability는 설정되지 않습니다.