Seleccionar un modelo de transcripción

En esta página se describe cómo usar un modelo de aprendizaje automático específico para las solicitudes de transcripción de audio a Speech-to-Text.

Modelos de transcripción

Speech-to-Text detecta palabras en un clip de audio comparando la entrada con uno de los muchos modelos de aprendizaje automático. Cada modelo se ha entrenado analizando millones de ejemplos. En este caso, se trata de muchísimas grabaciones de audio de personas hablando.

Speech-to-Text tiene modelos especializados entrenados a partir de audio de fuentes específicas, como llamadas telefónicas o vídeos. Gracias a este proceso de entrenamiento, estos modelos especializados ofrecen mejores resultados cuando se aplican a tipos de datos de audio similares.

Por ejemplo, Speech-to-Text tiene un modelo de transcripción entrenado para reconocer la voz grabada por teléfono. Cuando Speech-to-Text usa el modelo telephony o telephony_short para transcribir audio telefónico, produce resultados de transcripción más precisos que si hubiera transcrito audio telefónico con los modelos latest_short o latest_long.

En la siguiente tabla se muestran los modelos de transcripción disponibles para usar con Speech-to-Text.

Nombre del modelo Descripción
latest_long Usa este modelo para cualquier tipo de contenido extenso, como contenido multimedia o conversaciones y discursos espontáneos. Te recomendamos que uses este modelo en lugar del modelo de vídeo, sobre todo si este último no está disponible en el idioma de destino. También puedes usarlo en lugar del modelo predeterminado.
latest_short Usa este modelo para las expresiones cortas que duren unos segundos. Es útil para intentar captar comandos u otros casos prácticos de habla dirigida de un solo intento. Te recomendamos que uses este modelo en lugar del modelo de comandos y búsquedas.
telephony Versión mejorada del modelo "phone_call", ideal para el audio procedente de una llamada telefónica, normalmente grabada a una frecuencia de muestreo de 8 kHz.
telephony_short Versión específica del modelo moderno "telefonía" para expresiones cortas o incluso de una sola palabra en audio procedente de una llamada telefónica, normalmente grabada a una frecuencia de muestreo de 8 kHz.
medical_dictation Usa este modelo para transcribir las notas dictadas por un profesional médico.

Este modelo premium es más caro que el estándar. Consulta la página de precios para obtener más información.

medical_conversation Usa este modelo para transcribir una conversación entre un profesional médico y un paciente.

Este modelo premium es más caro que el estándar. Consulta la página de precios para obtener más información.

Los siguientes modelos se basan principalmente en arquitecturas clásicas no conformes y se conservan principalmente por motivos de compatibilidad con versiones anteriores.
command_and_search Adecuado para frases cortas o de una sola palabra, como comandos de voz o búsquedas por voz.
default Adecuado para el audio que no se corresponde con los otros modelos de audio, como el audio de formato largo o el dictado. El modelo predeterminado generará resultados de transcripción para cualquier tipo de audio, incluido el audio de clips de vídeo que tengan un modelo independiente específicamente diseñado para ellos. Sin embargo, es probable que el reconocimiento del audio de los clips de vídeo con el modelo predeterminado dé como resultado una calidad inferior a la que se obtiene con el modelo de vídeo. Lo ideal es que sea de alta fidelidad y que esté grabado a una velocidad de muestreo de 16 kHz o superior.
phone_call Adecuado para el audio generado a partir de una llamada telefónica (normalmente grabado a una frecuencia de muestreo de 8 kHz).
video

Adecuado para el audio de clips de vídeo u otras fuentes (como pódcasts) en los que intervienen varios interlocutores. Este modelo también suele ser la mejor opción para el audio que se ha grabado con un micrófono de alta calidad o que tiene mucho ruido de fondo. Para obtener los mejores resultados, proporciona audio grabado a una frecuencia de muestreo de 16.000 Hz o superior.

Seleccionar un modelo para la transcripción de audio

Para especificar un modelo concreto que se va a usar en la transcripción de audio, debes asignar al campo model uno de los valores permitidos (por ejemplo, latest_long, latest_short, telephony o telephony_short) en los parámetros RecognitionConfig de la solicitud. Speech-to-Text admite la selección de modelos para todos los métodos de reconocimiento de voz: speech:recognize, speech:longrunningrecognize y Streaming.

Transcribir un archivo de audio local

Protocolo

Consulta todos los detalles en el endpoint de la API speech:recognize.

Para realizar el reconocimiento de voz síncrono, haz una solicitud POST y proporciona el cuerpo de la solicitud adecuado. A continuación, se muestra un ejemplo de una solicitud POST que utiliza curl. En el ejemplo se usa Google Cloud CLI para generar un token de acceso. Para obtener instrucciones sobre cómo instalar gcloud CLI, consulta la guía de inicio 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"
    }
}'

Consulta la documentación de referencia de RecognitionConfig para obtener más información sobre cómo configurar el cuerpo de la solicitud.

Si la solicitud se realiza de forma correcta, el servidor devuelve un código de estado HTTP 200 OK y la respuesta en 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 saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Go Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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 saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Java Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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 saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Node.js Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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 saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Python Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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}")

Idiomas adicionales

C#: Sigue las instrucciones de configuración de C# en la página de bibliotecas de cliente y, a continuación, consulta la documentación de referencia de Speech-to-Text para .NET.

PHP Sigue las instrucciones de configuración de PHP en la página de bibliotecas de cliente y, a continuación, consulta la documentación de referencia de Speech-to-Text para PHP.

Ruby: Sigue las instrucciones de configuración de Ruby en la página de bibliotecas de cliente y, a continuación, consulta la documentación de referencia de Speech-to-Text para Ruby.

Transcribir un archivo de audio de Cloud Storage

Go

Para saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Go Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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 saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Java Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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 saber cómo instalar y usar la biblioteca de cliente de Speech-to-Text, consulta el artículo Bibliotecas de cliente de Speech-to-Text. Para obtener más información, consulta la documentación de referencia de la API Node.js Speech-to-Text.

Para autenticarte en Speech-to-Text, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo 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);

Idiomas adicionales

C#: Sigue las instrucciones de configuración de C# en la página de bibliotecas de cliente y, a continuación, consulta la documentación de referencia de Speech-to-Text para .NET.

PHP Sigue las instrucciones de configuración de PHP en la página de bibliotecas de cliente y, a continuación, consulta la documentación de referencia de Speech-to-Text para PHP.

Ruby: Sigue las instrucciones de configuración de Ruby en la página de bibliotecas de cliente y, a continuación, consulta la documentación de referencia de Speech-to-Text para Ruby.