짧은 오디오 파일을 텍스트로 변환

이 페이지는 동기 음성 인식을 사용하여 짧은 오디오 파일을 텍스트로 변환하는 방법을 설명합니다.

동기 음성 인식은 짧은 오디오(60초 미만)에서 인식된 텍스트를 반환합니다. 60초보다 긴 오디오의 음성 인식 요청을 처리하려면 비동기 음성 인식을 사용합니다.

로컬 파일의 오디오 콘텐츠를 Speech-to-Text로 직접 보내거나 Speech-to-Text가 Google Cloud Storage 버킷에 저장된 오디오 콘텐츠를 처리할 수 있습니다. 동기 음성 인식 요청의 한도는 할당량 및 한도 페이지를 참조하세요.

로컬 파일에서 동기 음성 인식 수행

다음은 로컬 오디오 파일에서 동기 음성 인식을 수행하는 예입니다.

REST 및 명령줄

자세한 내용은 speech:recognize API 엔드포인트를 참조하세요. 요청 본문 구성에 대한 자세한 내용은 RecognitionConfig 참조 문서를 확인하세요.

요청 본문에서 제공된 오디오 콘텐츠는 base64로 인코딩되어야 합니다. 오디오를 base64로 인코딩하는 방법에 대한 자세한 내용은 오디오 콘텐츠를 Base64 로 인코딩을 참조하세요. content 필드에 대한 자세한 내용은 RecognitionAudio를 참조하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • LANGUAGE_CODE: 오디오 클립에서 사용된 언어의 BCP-47 코드입니다.
  • ENCODING: 텍스트로 변환할 오디오의 인코딩입니다.
  • SAMPLE_RATE_HERTZ: 텍스트로 변환할 오디오의 샘플링 레이트(Hz)입니다.
  • ENABLE_TIME_WORD_OFFSETS: 단어 시작 및 종료 시간 오프셋(타임스탬프)을 반환하려면 이 필드를 사용 설정합니다.
  • INPUT_AUDIO: 텍스트로 변환할 오디오 데이터의 base64 인코딩 문자열입니다.

HTTP 메서드 및 URL:

POST https://speech.googleapis.com/v1/speech:recognize

JSON 요청 본문:

{
  "config":{
      "languageCode":"LANGUAGE_CODE",
      "encoding":ENCODING
      "sampleRateHertz":SAMPLE_RATE_HERTZ
      "enableTimeWordOffsets":ENABLE_TIME_WORD_OFFSETS
  },
  "audio":{
    "content":"INPUT_AUDIO"
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

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

gcloud

자세한 내용은 recognize 명령어를 참조하세요.

로컬 파일에서 음성 인식을 수행하려면 Google Cloud CLI를 사용하여 음성 인식을 수행할 파일의 로컬 파일 경로를 전달합니다.

gcloud ml speech recognize PATH-TO-LOCAL-FILE --language-code='en-US'

요청이 성공하면 서버는 JSON 형식의 응답을 반환합니다.

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

Go


func recognize(w io.Writer, file string) error {
	ctx := context.Background()

	client, err := speech.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	data, err := ioutil.ReadFile(file)
	if err != nil {
		return err
	}

	// Send the contents of the audio file with the encoding and
	// and sample rate information to be transcripted.
	resp, err := client.Recognize(ctx, &speechpb.RecognizeRequest{
		Config: &speechpb.RecognitionConfig{
			Encoding:        speechpb.RecognitionConfig_LINEAR16,
			SampleRateHertz: 16000,
			LanguageCode:    "en-US",
		},
		Audio: &speechpb.RecognitionAudio{
			AudioSource: &speechpb.RecognitionAudio_Content{Content: data},
		},
	})

	// Print the results.
	for _, result := range resp.Results {
		for _, alt := range result.Alternatives {
			fmt.Fprintf(w, "\"%v\" (confidence=%3f)\n", alt.Transcript, alt.Confidence)
		}
	}
	return nil
}

Node.js

// Imports the Google Cloud client library
const fs = require('fs');
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const filename = 'Local path to audio file, e.g. /path/to/audio.raw';
// const encoding = 'Encoding of the audio file, e.g. LINEAR16';
// const sampleRateHertz = 16000;
// const languageCode = 'BCP-47 language code, e.g. en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};
const audio = {
  content: fs.readFileSync(filename).toString('base64'),
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log('Transcription: ', transcription);

Python

def transcribe_file(speech_file):
    """Transcribe the given audio file."""
    from google.cloud import speech
    import io

    client = speech.SpeechClient()

    with io.open(speech_file, "rb") as audio_file:
        content = audio_file.read()

    audio = speech.RecognitionAudio(content=content)
    config = speech.RecognitionConfig(
        encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=16000,
        language_code="en-US",
    )

    response = client.recognize(config=config, audio=audio)

    # Each result is for a consecutive portion of the audio. Iterate through
    # them to get the transcripts for the entire audio file.
    for result in response.results:
        # The first alternative is the most likely one for this portion.
        print(u"Transcript: {}".format(result.alternatives[0].transcript))

추가 언어

C#: 클라이언트 라이브러리 페이지의 C# 설정 안내를 따른 다음 .NET용 Speech-to-Text 참조 문서를 참조하세요.

PHP: 클라이언트 라이브러리 페이지의 PHP 설정 안내를 따른 다음 PHP용 Speech-to-Text 참조 문서를 참조하세요.

Ruby: 클라이언트 라이브러리 페이지의 Ruby 설정 안내를 따른 다음 Ruby용 Speech-to-Text 참조 문서를 참조하세요.

원격 파일에서 동기 음성 인식 수행

요청 본문의 오디오 파일 콘텐츠를 보낼 필요없이 간편하게 Speech-to-Text API를 사용하여 Google Cloud Storage에 있는 오디오 파일에서 직접 동기 음성 인식을 수행할 수 있습니다.

다음은 Cloud Storage에 있는 파일에서 동기 음성 인식을 수행하는 예입니다.

REST 및 명령줄

자세한 내용은 speech:recognize API 엔드포인트를 참조하세요. 요청 본문 구성에 대한 자세한 내용은 RecognitionConfig 참조 문서를 확인하세요.

요청 본문에서 제공된 오디오 콘텐츠는 base64로 인코딩되어야 합니다. 오디오를 base64로 인코딩하는 방법에 대한 자세한 내용은 오디오 콘텐츠를 Base64 로 인코딩을 참조하세요. content 필드에 대한 자세한 내용은 RecognitionAudio를 참조하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • LANGUAGE_CODE: 오디오 클립에서 사용된 언어의 BCP-47 코드입니다.
  • ENCODING: 텍스트로 변환할 오디오의 인코딩입니다.
  • SAMPLE_RATE_HERTZ: 텍스트로 변환할 오디오의 샘플링 레이트(Hz)입니다.
  • ENABLE_TIME_WORD_OFFSETS: 단어 시작 및 종료 시간 오프셋(타임스탬프)을 반환하려면 이 필드를 사용 설정합니다.
  • STORAGE_BUCKET: Cloud Storage 버킷입니다.
  • INPUT_AUDIO: 텍스트로 변환할 오디오 데이터 파일입니다.

HTTP 메서드 및 URL:

POST https://speech.googleapis.com/v1/speech:recognize

JSON 요청 본문:

{
  "config":{
      "languageCode":"LANGUAGE_CODE",
      "encoding":ENCODING
      "sampleRateHertz":SAMPLE_RATE_HERTZ
      "enableTimeWordOffsets":ENABLE_TIME_WORD_OFFSETS
  },
  "audio":{
    "uri":"gs://STORAGE_BUCKET/INPUT_AUDIO"
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

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

gcloud

자세한 내용은 recognize 명령어를 참조하세요.

로컬 파일에서 음성 인식을 수행하려면 Google Cloud CLI를 사용하여 음성 인식을 수행할 파일의 로컬 파일 경로를 전달합니다.

gcloud ml speech recognize 'gs://cloud-samples-tests/speech/brooklyn.flac' \
--language-code='en-US'

요청이 성공하면 서버는 JSON 형식의 응답을 반환합니다.

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

Go


func recognizeGCS(w io.Writer, gcsURI string) error {
	ctx := context.Background()

	client, err := speech.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	// Send the request with the URI (gs://...)
	// and sample rate information to be transcripted.
	resp, err := client.Recognize(ctx, &speechpb.RecognizeRequest{
		Config: &speechpb.RecognitionConfig{
			Encoding:        speechpb.RecognitionConfig_LINEAR16,
			SampleRateHertz: 16000,
			LanguageCode:    "en-US",
		},
		Audio: &speechpb.RecognitionAudio{
			AudioSource: &speechpb.RecognitionAudio_Uri{Uri: gcsURI},
		},
	})

	// Print the results.
	for _, result := range resp.Results {
		for _, alt := range result.Alternatives {
			fmt.Fprintf(w, "\"%v\" (confidence=%3f)\n", alt.Transcript, alt.Confidence)
		}
	}
	return nil
}

Node.js

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const gcsUri = 'gs://my-bucket/audio.raw';
// const encoding = 'Encoding of the audio file, e.g. LINEAR16';
// const sampleRateHertz = 16000;
// const languageCode = 'BCP-47 language code, e.g. en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};
const audio = {
  uri: gcsUri,
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log('Transcription: ', transcription);

Python

def transcribe_gcs(gcs_uri):
    """Transcribes the audio file specified by the gcs_uri."""
    from google.cloud import speech

    client = speech.SpeechClient()

    audio = speech.RecognitionAudio(uri=gcs_uri)
    config = speech.RecognitionConfig(
        encoding=speech.RecognitionConfig.AudioEncoding.FLAC,
        sample_rate_hertz=16000,
        language_code="en-US",
    )

    response = client.recognize(config=config, audio=audio)

    # Each result is for a consecutive portion of the audio. Iterate through
    # them to get the transcripts for the entire audio file.
    for result in response.results:
        # The first alternative is the most likely one for this portion.
        print(u"Transcript: {}".format(result.alternatives[0].transcript))

추가 언어

C#: 클라이언트 라이브러리 페이지의 C# 설정 안내를 따른 다음 .NET용 Speech-to-Text 참조 문서를 참조하세요.

PHP: 클라이언트 라이브러리 페이지의 PHP 설정 안내를 따른 다음 PHP용 Speech-to-Text 참조 문서를 참조하세요.

Ruby: 클라이언트 라이브러리 페이지의 Ruby 설정 안내를 따른 다음 Ruby용 Speech-to-Text 참조 문서를 참조하세요.