Como transcrever arquivos de áudio curtos

Nesta página, descrevemos como transcrever um arquivo de áudio curto para texto usando o reconhecimento de fala síncrono.

O reconhecimento de fala síncrono converte o texto reconhecido para áudio curto (menos de 60 segundos). Para processar uma solicitação de reconhecimento de fala de mais de 60 segundos, use o Reconhecimento de fala assíncrono.

O conteúdo de áudio pode ser enviado diretamente para o Speech-to-Text de um arquivo local ou o Speech-to-Text pode processar conteúdo de áudio armazenado em um intervalo do Google Cloud Storage. Consulte a página cotas e limites para ver os limites nas solicitações síncronas de reconhecimento de fala.

Como executar o reconhecimento de fala síncrono em um arquivo local

Este é um exemplo de reconhecimento de fala síncrono em um arquivo de áudio local:

REST e LINHA DE CMD

Consulte o endpoint da API speech:recognize para ver todos os detalhes. Consulte a documentação de referência RecognitionConfig para mais informações sobre como configurar o corpo da solicitação.

O conteúdo de áudio fornecido no corpo da solicitação precisa ser codificado em base64. Para mais informações sobre como codificar áudio em base64, consulte Como codificar conteúdo de áudio em Base64. Para mais informações sobre o campo content, consulte RecognitionAudio.

Antes de usar os dados da solicitação abaixo, faça estas substituições:

  • LANGUAGE_CODE: o código BCP-47 do idioma falado no seu clipe de áudio.
  • ENCODING: a codificação do áudio que você quer transcrever.
  • SAMPLE_RATE_HERTZ: taxa de amostragem em hertz do áudio que você quer transcrever.
  • ENABLE_TIME_WORD_OFFSETS: ative esse campo se quiser que os ajustes de horário de início e término de palavra (carimbos de data/hora) sejam retornados.
  • INPUT_AUDIO: uma string codificada em base64 dos dados de áudio que você quer transcrever.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

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

gcloud

Consulte o comando recognize para ver todos os detalhes.

Para realizar o reconhecimento de voz em um arquivo local, use a ferramenta de linha de comando gcloud, passando o caminho de caminho local do arquivo para executar o reconhecimento de fala.

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

Se a solicitação for bem-sucedida, o servidor retornará uma resposta no formato 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
}

Java

/*
 * Please include the following imports to run this sample.
 *
 * import com.google.cloud.speech.v1.RecognitionAudio;
 * import com.google.cloud.speech.v1.RecognitionConfig;
 * import com.google.cloud.speech.v1.RecognizeRequest;
 * import com.google.cloud.speech.v1.RecognizeResponse;
 * import com.google.cloud.speech.v1.SpeechClient;
 * import com.google.cloud.speech.v1.SpeechRecognitionAlternative;
 * import com.google.cloud.speech.v1.SpeechRecognitionResult;
 * import com.google.protobuf.ByteString;
 * import java.nio.file.Files;
 * import java.nio.file.Path;
 * import java.nio.file.Paths;
 */

public static void sampleRecognize() {
  // TODO(developer): Replace these variables before running the sample.
  String localFilePath = "resources/brooklyn_bridge.raw";
  sampleRecognize(localFilePath);
}

/**
 * Transcribe a short audio file using synchronous speech recognition
 *
 * @param localFilePath Path to local audio file, e.g. /path/audio.wav
 */
public static void sampleRecognize(String localFilePath) {
  try (SpeechClient speechClient = SpeechClient.create()) {

    // The language of the supplied audio
    String languageCode = "en-US";

    // Sample rate in Hertz of the audio data sent
    int sampleRateHertz = 16000;

    // Encoding of audio data sent. This sample sets this explicitly.
    // This field is optional for FLAC and WAV audio formats.
    RecognitionConfig.AudioEncoding encoding = RecognitionConfig.AudioEncoding.LINEAR16;
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setLanguageCode(languageCode)
            .setSampleRateHertz(sampleRateHertz)
            .setEncoding(encoding)
            .build();
    Path path = Paths.get(localFilePath);
    byte[] data = Files.readAllBytes(path);
    ByteString content = ByteString.copyFrom(data);
    RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(content).build();
    RecognizeRequest request =
        RecognizeRequest.newBuilder().setConfig(config).setAudio(audio).build();
    RecognizeResponse response = speechClient.recognize(request);
    for (SpeechRecognitionResult result : response.getResultsList()) {
      // First alternative is the most probable result
      SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
      System.out.printf("Transcript: %s\n", alternative.getTranscript());
    }
  } catch (Exception exception) {
    System.err.println("Failed to create the client due to: " + exception);
  }
}

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))

Outras linguagens

C#: Siga as Instruções de configuração do C# na página das bibliotecas de cliente e acesse Documentação de referência da Speech-to-Text para .NET.

PHP: Siga as Instruções de configuração do PHP na página das bibliotecas de cliente e acesse Documentação de referência da Speech-to-Text para PHP.

Ruby: Siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse Documentação de referência da Speech-to-Text para Ruby.

Como executar o reconhecimento de fala síncrono em um arquivo remoto

Para sua comodidade, a API Speech-to-Text executa o reconhecimento de fala síncrono diretamente em um arquivo de áudio localizado no Google Cloud Storage, sem a necessidade de enviar o conteúdo do arquivo de áudio no corpo da solicitação.

Este é um exemplo de reconhecimento de fala síncrono em um arquivo localizado no Cloud Storage:

REST e LINHA DE CMD

Consulte o endpoint da API speech:recognize para ver todos os detalhes. Consulte a documentação de referência RecognitionConfig para mais informações sobre como configurar o corpo da solicitação.

O conteúdo de áudio fornecido no corpo da solicitação precisa ser codificado em base64. Para mais informações sobre como codificar áudio em base64, consulte Como codificar conteúdo de áudio em Base64. Para mais informações sobre o campo content, consulte RecognitionAudio.

Antes de usar os dados da solicitação abaixo, faça estas substituições:

  • LANGUAGE_CODE: o código BCP-47 do idioma falado no seu clipe de áudio.
  • ENCODING: a codificação do áudio que você quer transcrever.
  • SAMPLE_RATE_HERTZ: taxa de amostragem em Hertz do áudio que você quer transcrever.
  • ENABLE_TIME_WORD_OFFSETS: ative esse campo se quiser que os ajustes de horário de início e término de palavra (carimbos de data/hora) sejam retornados.
  • STORAGE_BUCKET: um bucket do Cloud Storage
  • INPUT_AUDIO: o arquivo fr dados de áudio que você quer transcrever.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

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

gcloud

Consulte o comando recognize para ver todos os detalhes.

Para realizar o reconhecimento de voz em um arquivo local, use a ferramenta de linha de comando gcloud, passando o caminho de caminho local do arquivo para executar o reconhecimento de fala.

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

Se a solicitação for bem-sucedida, o servidor retornará uma resposta no formato 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
}

Java

/*
 * Please include the following imports to run this sample.
 *
 * import com.google.cloud.speech.v1.RecognitionAudio;
 * import com.google.cloud.speech.v1.RecognitionConfig;
 * import com.google.cloud.speech.v1.RecognizeRequest;
 * import com.google.cloud.speech.v1.RecognizeResponse;
 * import com.google.cloud.speech.v1.SpeechClient;
 * import com.google.cloud.speech.v1.SpeechRecognitionAlternative;
 * import com.google.cloud.speech.v1.SpeechRecognitionResult;
 */

public static void sampleRecognize() {
  // TODO(developer): Replace these variables before running the sample.
  String storageUri = "gs://cloud-samples-data/speech/brooklyn_bridge.raw";
  sampleRecognize(storageUri);
}

/**
 * Transcribe short audio file from Cloud Storage using synchronous speech recognition
 *
 * @param storageUri URI for audio file in Cloud Storage, e.g. gs://[BUCKET]/[FILE]
 */
public static void sampleRecognize(String storageUri) {
  try (SpeechClient speechClient = SpeechClient.create()) {

    // Sample rate in Hertz of the audio data sent
    int sampleRateHertz = 16000;

    // The language of the supplied audio
    String languageCode = "en-US";

    // Encoding of audio data sent. This sample sets this explicitly.
    // This field is optional for FLAC and WAV audio formats.
    RecognitionConfig.AudioEncoding encoding = RecognitionConfig.AudioEncoding.LINEAR16;
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setSampleRateHertz(sampleRateHertz)
            .setLanguageCode(languageCode)
            .setEncoding(encoding)
            .build();
    RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(storageUri).build();
    RecognizeRequest request =
        RecognizeRequest.newBuilder().setConfig(config).setAudio(audio).build();
    RecognizeResponse response = speechClient.recognize(request);
    for (SpeechRecognitionResult result : response.getResultsList()) {
      // First alternative is the most probable result
      SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
      System.out.printf("Transcript: %s\n", alternative.getTranscript());
    }
  } catch (Exception exception) {
    System.err.println("Failed to create the client due to: " + exception);
  }
}

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))

Outras linguagens

C#: Siga as Instruções de configuração do C# na página das bibliotecas de cliente e acesse Documentação de referência da Speech-to-Text para .NET.

PHP: Siga as Instruções de configuração do PHP na página das bibliotecas de cliente e acesse Documentação de referência da Speech-to-Text para PHP.

Ruby: Siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse Documentação de referência da Speech-to-Text para Ruby.