문제 해결

Speech-to-Text를 사용할 때 문제가 발생할 경우에 유용한 문제 해결 단계에 대해 알아보세요.

Speech-to-Text에 인증할 수 없음

'애플리케이션 기본 사용자 인증 정보'를 사용할 수 없다는 오류 메시지가 표시되거나 Speech-to-Text를 호출할 때 사용할 API 키를 가져오는 방법이 궁금할 수 있습니다.

Speech-to-Text는 인증에 애플리케이션 기본 사용자 인증 정보 (ADC)를 사용합니다.

ADC의 사용자 인증 정보는 Speech-to-Text API를 호출하는 컨텍스트 내에서 사용할 수 있어야 합니다. 예를 들어 터미널에서 ADC를 설정했는데 IDE의 디버거에서 코드를 실행하면 코드의 실행 컨텍스트가 사용자 인증 정보에 액세스하지 못할 수 있습니다. 이 경우 Speech-to-Text 요청이 실패할 수 있습니다.

ADC에 사용자 인증 정보를 제공하는 방법은 애플리케이션 기본 사용자 인증 정보 설정을 참조하세요.

Speech-to-Text에서 빈 응답을 반환함

Speech-to-Text에서 빈 응답을 반환하는 이유는 여러 가지가 있습니다. 문제의 원인은 RecognitionConfig 또는 오디오 자체일 수 있습니다.

문제 해결 RecognitionConfig

RecognitionConfig 객체(또는 StreamingRecognitionConfig)는 Speech-to-Text 인식 요청의 일부입니다. 스크립트 작성을 올바르게 수행하기 위해 설정해야 하는 두 가지 주요 필드 카테고리가 있습니다.

  • 오디오 구성.
  • 모델 및 언어.

빈 응답(예시: 빈 {} JSON 응답을 받음)의 가장 일반적인 원인 중 하나는 오디오 메타데이터에 대한 잘못된 정보를 제공하는 것입니다. 오디오 구성 필드가 올바르게 설정되지 않으면 스크립트 작성에 실패하고 인식 모델이 빈 결과를 반환합니다.

오디오 구성에는 제공된 오디오의 메타데이터가 포함되어 있습니다. FFMPEG의 일부인 ffprobe 명령어를 사용하여 오디오 파일의 메타데이터를 가져올 수 있습니다.

다음 예시는 ffprobe를 사용하여 https://storage.googleapis.com/cloud-samples-tests/speech/commercial_mono.wav의 메타데이터를 가져오는 방법을 보여줍니다.

$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
  Duration: 00:00:35.75, bitrate: 128 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s

위 명령어를 실행하면 파일에 다음 내용이 표시됩니다.

  • sample_rate_hertz: 8000
  • 채널: 1
  • LINEAR16 인코딩(s16)

이 정보는 RecognitionConfig에서 사용할 수 있습니다.

빈 응답의 추가 오디오 관련 이유는 오디오 인코딩과 관련이 있을 수 있습니다. 다음과 같은 몇 가지 도구 및 작업을 사용해 볼 수 있습니다.

  1. 파일을 재생하여 출력을 듣습니다. 오디오가 깨끗하고 말을 이해할 수 있나요?

    파일을 재생하려면 SoX(Sound eXchange)play 명령어를 사용하면 됩니다. 서로 다른 오디오 인코딩을 바탕으로 한 몇 가지 예가 아래에 있습니다.

    FLAC 파일에는 샘플링 레이트, 인코딩 유형, 채널 수를 나타내는 헤더가 포함되어 있으며 다음과 같이 FLAC 파일을 재생할 수 있습니다.

    play audio.flac

    LINEAR16 파일에는 헤더가 없습니다. 이 파일을 재생하려면 샘플링 레이트, 인코딩 유형, 채널 수를 지정해야 합니다. LINEAR16 인코딩은 16비트, 부호 있는 정수, little-endian이어야 합니다.

    play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw

    MULAW 파일도 헤더를 포함하지 않으며 낮은 샘플링 레이트를 사용하는 경우가 종종 있습니다.

    play --channels=1 --rate=8000 --encoding=u-law audio.raw
  2. 데이터의 오디오 인코딩이 RecognitionConfig에 전송한 매개변수와 일치하는지 확인합니다. 예를 들어 요청으로 "encoding":"FLAC""sampleRateHertz":16000이 지정된 경우 SoXplay 명령어로 나열되는 오디오 데이터 매개변수는 다음과 같이 해당 매개변수와 일치해야 합니다.

    play audio.flac

    다음과 같아야 합니다.

    Encoding: FLAC
    Channels: 1 @ 16-bit
    Sampleratehertz: 16000Hz
    

    SoX 목록에 16000Hz가 아닌 Sampleratehertz가 표시되면 InitialRecognizeRequest"sampleRateHertz"를 변경하여 일치시킵니다. EncodingFLAC이 아니거나 Channels1 @ 16-bit가 아닌 경우, 이 파일을 직접 사용할 수 없으며 호환 인코딩으로 변환해야 합니다(다음 단계 참조).

  3. 오디오 파일이 FLAC 인코딩이 아닌 경우, SoX를 사용하여 FLAC으로 변환한 후 위의 단계를 반복하여 파일을 재생하고 인코딩, sampleRateHertz, 채널 수를 확인합니다. 다음은 다양한 오디오 파일 형식을 FLAC 인코딩으로 변환하는 몇 가지 예입니다.

    sox audio.wav --channels=1 --bits=16 audio.flac
    sox audio.ogg --channels=1 --bits=16 audio.flac
    sox audio.au --channels=1 --bits=16 audio.flac
    sox audio.aiff --channels=1 --bits=16 audio.flac
    

    원시 파일을 FLAC으로 변환하려면 해당 파일의 오디오 인코딩을 알아야 합니다. 예를 들어 16000Hz의 스테레오 16비트 부호 있는 little-endian을 FLAC으로 변환하려면 다음과 같이 합니다.

    sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw --channels=1 --bits=16 audio.flac
    
  4. 빠른 시작의 예시 또는 샘플 애플리케이션 중 하나를 제공된 샘플 오디오 파일과 함께 실행합니다. 예가 성공적으로 실행되면 샘플 오디오 파일을 원하는 오디오 파일로 바꿉니다.

모델 및 언어 구성

모델 선택은 고품질 스크립트 작성 결과를 얻는 데 매우 중요합니다. Speech-to-Text는 다양한 사용 사례에 맞게 조정된 여러 모델을 제공하며, 오디오와 가장 가깝게 일치하도록 선택해야 합니다. 예를 들어 일부 모델(예: latest_shortcommand_and_search)은 짧은 양식 모델이므로 짧은 오디오와 프롬프트에 더 적합합니다. 이러한 모델은 무음 기간이 감지되는 즉시 결과를 반환할 가능성이 높습니다. 반면 긴 형식 모델(예: latest_short, phone_call, video and default)은 긴 오디오에 더 적합하며 무음을 오디오의 끝으로 민감하게 해석하지 않습니다.

인식이 너무 갑자기 종료되거나 신속하게 반환되지 않으면 다른 모델을 확인하고 실험하여 스크립트 작성 품질을 향상시킬 수 있는지 확인하는 것이 좋습니다. 음성 UI를 사용하여 여러 모델을 실험할 수 있습니다.

음성 인식의 예기치 않은 결과

Speech-to-Text에서 반환된 결과가 기대한 것과 다른 경우 다음 단계를 따르세요.

  • 오류 메시지에 대한 응답을 확인합니다.
  • 할당량 및 한도에 유의합니다.

  • 인식 정확도를 향상시키려면 권장사항의 가이드라인을 따르세요.