Selecionar um modelo de transcrição

Nesta página, você aprende a usar um modelo de machine learning específico para fazer solicitações de transcrição de áudio à Speech-to-Text.

Modelos de transcrição

A Speech-to-Text detecta palavras em clipes de áudio comparando a entrada com um dos vários modelos de machine learning. Cada modelo foi treinado por meio da análise de milhões de exemplos (nesse caso, muitas gravações de áudio de pessoas falando).

A Speech-to-Text tem modelos especializados treinados com áudio de fontes específicas, como chamadas telefônicas ou vídeos. Devido a esse processo de treinamento, esses modelos especializados fornecem melhores resultados quando aplicados a tipos semelhantes de dados de áudio.

Por exemplo, a Speech-to-Text tem um modelo de transcrição treinado para reconhecer fala gravada por telefone. Quando a Speech-to-Text usa o modelo telephony ou telephony_short para transcrever áudios por telefone, ela produz resultados de transcrição com mais acurácia do que se os tivesse transcrito usando os modelos latest_short ou latest_long.

Confira na tabela a seguir os modelos de transcrições disponíveis para uso com a Speech-to-Text.

Nome do modelo Descrição
latest_long Use esse modelo para qualquer tipo de conteúdo em formato longo, como mídia ou fala e conversas espontâneas. Considere usar esse modelo no lugar do modelo de vídeo, principalmente se o segundo não estiver disponível no idioma de destino. Também é possível usá-lo no lugar do modelo padrão.
latest_short Use esse modelo para enunciados curtos com alguns segundos de duração. Ele é útil para tentar capturar comandos ou outros casos de uso de fala direcionados uma única vez. Considere usar esse modelo em vez do comando e do modelo de pesquisa.
telephony Versão aprimorada do modelo phone_call, ideal para áudios originados de uma chamada telefônica, geralmente gravados a uma taxa de amostragem de 8 kHz.
telephony_short Versão dedicada do modelo moderno de telefonia para enunciados curtos ou mesmo de palavras únicas em áudios de chamada telefônica, geralmente gravados a uma taxa de amostragem de 8 kHz.
medical_dictation Use esse modelo para transcrever notas ditadas por um profissional da saúde.

Este é um modelo premium que custa mais do que a taxa padrão. Consulte a página de preços para mais detalhes.

medical_conversation Use esse modelo para transcrever uma conversa entre um profissional da saúde e um paciente.

Esse é um modelo premium que custa mais do que a taxa padrão. Consulte a página de preços para mais detalhes.

Os modelos a seguir são baseados principalmente em arquiteturas clássicas sem conformidade e são mantidos majoritariamente por motivos legados e de compatibilidade com versões anteriores.
command_and_search Indicado para enunciados curtos ou de palavra única, como comandos de voz ou pesquisa por voz.
default Indicado para áudios que não se encaixam nos outros modelos, como áudios ou ditados de formato longo. O modelo padrão vai produzir resultados de transcrição para qualquer tipo de áudio, incluindo áudios como clipes de vídeo, que são transcritos por um modelo separado e especificamente adaptado. No entanto, o reconhecimento de áudio de clipes de vídeo usando o modelo padrão vai produzir resultados de qualidade inferior em comparação com o uso do modelo de vídeo. O ideal é que o áudio seja de alta fidelidade e gravado com uma taxa de amostragem de 16 kHz ou mais.
phone_call Ideal para áudios de chamadas telefônicas, geralmente gravados com uma taxa de amostragem de 8 kHz.
video

Indicado para áudios de clipes de vídeo ou outras fontes (como podcasts) com vários interlocutores. Esse modelo também costuma ser a melhor opção para áudios gravados com um microfone de alta qualidade ou que tenham muito ruído de fundo. Para conseguir resultados melhores, forneça um áudio gravado a uma taxa de amostragem de 16.000 Hz ou mais.

Selecionar um modelo para a transcrição de áudio

Para especificar um modelo específico a ser usado para transcrição de áudio, defina o campo model com um dos valores permitidos: latest_long, latest_short, telephony ou telephony_short, nos parâmetros RecognitionConfig da solicitação. A Speech-to-Text aceita a seleção de modelos para todos os métodos de reconhecimento de fala: speech:recognize, speech:longrunningrecognize e streaming.

Realizar a transcrição de um arquivo de áudio local

Protocolo

Consulte o endpoint da API speech:recognize para conferir todos os detalhes.

Para realizar o reconhecimento de fala síncrono, faça uma solicitação POST e forneça o corpo de solicitação apropriado. Confira a seguir um exemplo de uma solicitação POST que usa curl. O exemplo usa a CLI do Google Cloud para gerar um token de acesso. Para instruções sobre como instalar a gcloud CLI, consulte o guia de início rápido.

curl -s -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    https://speech.googleapis.com/v1/speech:recognize \
    --data '{
    "config": {
        "encoding": "LINEAR16",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
        "model": "video"
    },
    "audio": {
        "uri": "gs://cloud-samples-tests/speech/Google_Gnome.wav"
    }
}'

Consulte a documentação de referência de RecognitionConfig para saber como configurar o corpo da solicitação.

Quando a solicitação é bem-sucedida, o servidor retorna um código de status HTTP 200 OK e a resposta no formato JSON:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "OK Google stream stranger things from
            Netflix to my TV okay stranger things from
            Netflix playing on TV from the people that brought you
            Google home comes the next evolution of the smart home
            and it's just outside your window me Google know hi
            how can I help okay no what's the weather like outside
            the weather outside is sunny and 76 degrees he's right
            okay no turn on the hose I'm holding sure okay no I'm can
            I eat this lemon tree leaf yes what about this Daisy yes
            but I wouldn't recommend it but I could eat it okay
            Nomad milk to my shopping list I'm sorry that sounds like
            an indoor request I keep doing that sorry you do keep
            doing that okay no is this compost really we're all
            compost if you think about it pretty much everything is
            made up of organic matter and will return",
          "confidence": 0.9251011
        }
      ]
    }
  ]
}

Go

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Go.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


func modelSelection(w io.Writer) error {
	ctx := context.Background()

	client, err := speech.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	data, err := os.ReadFile("../testdata/Google_Gnome.wav")
	if err != nil {
		return fmt.Errorf("ReadFile: %w", err)
	}

	req := &speechpb.RecognizeRequest{
		Config: &speechpb.RecognitionConfig{
			Encoding:        speechpb.RecognitionConfig_LINEAR16,
			SampleRateHertz: 16000,
			LanguageCode:    "en-US",
			Model:           "video",
		},
		Audio: &speechpb.RecognitionAudio{
			AudioSource: &speechpb.RecognitionAudio_Content{Content: data},
		},
	}

	resp, err := client.Recognize(ctx, req)
	if err != nil {
		return fmt.Errorf("recognize: %w", err)
	}

	for i, result := range resp.Results {
		fmt.Fprintf(w, "%s\n", strings.Repeat("-", 20))
		fmt.Fprintf(w, "Result %d\n", i+1)
		for j, alternative := range result.Alternatives {
			fmt.Fprintf(w, "Alternative %d: %s\n", j+1, alternative.Transcript)
		}
	}
	return nil
}

Java

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Java.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

/**
 * Performs transcription of the given audio file synchronously with the selected model.
 *
 * @param fileName the path to a audio file to transcribe
 */
public static void transcribeModelSelection(String fileName) throws Exception {
  Path path = Paths.get(fileName);
  byte[] content = Files.readAllBytes(path);

  try (SpeechClient speech = SpeechClient.create()) {
    // Configure request with video media type
    RecognitionConfig recConfig =
        RecognitionConfig.newBuilder()
            // encoding may either be omitted or must match the value in the file header
            .setEncoding(AudioEncoding.LINEAR16)
            .setLanguageCode("en-US")
            // sample rate hertz may be either be omitted or must match the value in the file
            // header
            .setSampleRateHertz(16000)
            .setModel("video")
            .build();

    RecognitionAudio recognitionAudio =
        RecognitionAudio.newBuilder().setContent(ByteString.copyFrom(content)).build();

    RecognizeResponse recognizeResponse = speech.recognize(recConfig, recognitionAudio);
    // Just print the first result here.
    SpeechRecognitionResult result = recognizeResponse.getResultsList().get(0);
    // There can be several alternative transcripts for a given chunk of speech. Just use the
    // first (most likely) one here.
    SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
    System.out.printf("Transcript : %s\n", alternative.getTranscript());
  }
}

Node.js

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Node.js.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

// Imports the Google Cloud client library for Beta API
/**
 * TODO(developer): Update client library import to use new
 * version of API when desired features become available
 */
const speech = require('@google-cloud/speech').v1p1beta1;
const fs = require('fs');

// 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 model = 'Model to use, e.g. phone_call, video, default';
// 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,
  model: model,
};
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

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Python.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import speech

# Instantiates a client
client = speech.SpeechClient()
# Reads a file as bytes
with open("resources/Google_Gnome.wav", "rb") as f:
    audio_content = f.read()

audio = speech.RecognitionAudio(content=audio_content)

config = speech.RecognitionConfig(
    encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    language_code="en-US",
    model="video",  # Chosen model
)

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

for i, result in enumerate(response.results):
    alternative = result.alternatives[0]
    print("-" * 20)
    print(f"First alternative of result {i}")
    print(f"Transcript: {alternative.transcript}")

Linguagens adicionais

C#: siga as instruções de configuração de C# na página das bibliotecas de cliente e acesse a documentação de referência da Speech-to-Text para .NET.

PHP: siga as instruções de configuração de PHP na página das bibliotecas de cliente e acesse a 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 a documentação de referência da Speech-to-Text para Ruby.

Realizar a transcrição de um arquivo de áudio do Cloud Storage

Go

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Go.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


import (
	"context"
	"fmt"
	"io"
	"strings"

	speech "cloud.google.com/go/speech/apiv1"
	"cloud.google.com/go/speech/apiv1/speechpb"
)

// transcribe_model_selection_gcs Transcribes the given audio file asynchronously with
// the selected model.
func transcribe_model_selection_gcs(w io.Writer) error {
	ctx := context.Background()

	client, err := speech.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	audio := &speechpb.RecognitionAudio{
		AudioSource: &speechpb.RecognitionAudio_Uri{Uri: "gs://cloud-samples-tests/speech/Google_Gnome.wav"},
	}

	// The speech recognition model to use
	// See, https://cloud.google.com/speech-to-text/docs/speech-to-text-requests#select-model
	recognitionConfig := &speechpb.RecognitionConfig{
		Encoding:        speechpb.RecognitionConfig_LINEAR16,
		SampleRateHertz: 16000,
		LanguageCode:    "en-US",
		Model:           "video",
	}

	longRunningRecognizeRequest := &speechpb.LongRunningRecognizeRequest{
		Config: recognitionConfig,
		Audio:  audio,
	}

	operation, err := client.LongRunningRecognize(ctx, longRunningRecognizeRequest)
	if err != nil {
		return fmt.Errorf("error running recognize %w", err)
	}

	response, err := operation.Wait(ctx)
	if err != nil {
		return err
	}
	for i, result := range response.Results {
		alternative := result.Alternatives[0]
		fmt.Fprintf(w, "%s\n", strings.Repeat("-", 20))
		fmt.Fprintf(w, "First alternative of result %d", i)
		fmt.Fprintf(w, "Transcript: %s", alternative.Transcript)
	}
	return nil
}

Java

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Java.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

/**
 * Performs transcription of the remote audio file asynchronously with the selected model.
 *
 * @param gcsUri the path to the remote audio file to transcribe.
 */
public static void transcribeModelSelectionGcs(String gcsUri) throws Exception {
  try (SpeechClient speech = SpeechClient.create()) {

    // Configure request with video media type
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            // encoding may either be omitted or must match the value in the file header
            .setEncoding(AudioEncoding.LINEAR16)
            .setLanguageCode("en-US")
            // sample rate hertz may be either be omitted or must match the value in the file
            // header
            .setSampleRateHertz(16000)
            .setModel("video")
            .build();

    RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(gcsUri).build();

    // Use non-blocking call for getting file transcription
    OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> response =
        speech.longRunningRecognizeAsync(config, audio);

    while (!response.isDone()) {
      System.out.println("Waiting for response...");
      Thread.sleep(10000);
    }

    List<SpeechRecognitionResult> results = response.get().getResultsList();

    // Just print the first result here.
    SpeechRecognitionResult result = results.get(0);
    // There can be several alternative transcripts for a given chunk of speech. Just use the
    // first (most likely) one here.
    SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
    System.out.printf("Transcript : %s\n", alternative.getTranscript());
  }
}

Node.js

Para aprender a instalar e usar a biblioteca de cliente da Speech-to-Text, consulte Bibliotecas de cliente da Speech-to-Text. Para mais informações, consulte a documentação de referência da API Speech-to-Text Node.js.

Para se autenticar na Speech-to-Text, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

// Imports the Google Cloud client library for Beta API
/**
 * TODO(developer): Update client library import to use new
 * version of API when desired features become available
 */
const speech = require('@google-cloud/speech').v1p1beta1;

// 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 model = 'Model to use, e.g. phone_call, video, default';
// 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,
  model: model,
};
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);

Linguagens adicionais

C#: siga as instruções de configuração de C# na página das bibliotecas de cliente e acesse a documentação de referência da Speech-to-Text para .NET.

PHP: siga as instruções de configuração de PHP na página das bibliotecas de cliente e acesse a 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 a documentação de referência da Speech-to-Text para Ruby.