短い音声ファイルの音声文字変換

このページでは、同期音声認識を使用して、短い音声ファイルをテキストに変換する方法を説明します。

同期音声認識は、短い音声(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: 文字変換する音声のサンプルレート(ヘルツ単位)。
  • 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 コマンドをご覧ください。

ローカル ファイルに対して音声認識を実行するには、gcloud コマンドライン ツールを使用してファイルのローカル ファイル パスを渡し、音声認識を実行します。

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: 文字変換する音声のサンプルレート(ヘルツ単位)。
  • 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 コマンドをご覧ください。

ローカル ファイルに対して音声認識を実行するには、gcloud コマンドライン ツールを使用してファイルのローカル ファイル パスを渡し、音声認識を実行します。

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 のリファレンス ドキュメントをご覧ください。