Transcribe archivos de audio cortos

En esta página, se demuestra cómo transcribir un archivo de audio corto a texto con el reconocimiento de voz síncrono.

El reconocimiento de voz síncrono devuelve el texto reconocido de un audio corto (menos de 60 segundos). Para procesar una solicitud de reconocimiento de voz de un audio de mayor extensión, usa el reconocimiento de voz asíncrono.

El contenido del audio se puede enviar directamente a Cloud Speech-to-Text desde un archivo local, o bien se puede procesar si está almacenado en un bucket de Cloud Storage. Consulta la página de cuotas y límites para conocer los límites de las solicitudes de reconocimiento de voz síncrono.

Realiza reconocimiento de voz síncrono en un archivo local

El siguiente es un ejemplo de cómo realizar un reconocimiento de voz síncrono en un archivo de audio local:

REST

Consulta el extremo de la API de speech:recognize para obtener todos los detalles. Consulta la documentación de referencia de RecognitionConfig para obtener más información sobre cómo configurar el cuerpo de la solicitud.

El contenido del audio suministrado en el cuerpo de la solicitud debe estar codificado en Base64. Para obtener más información sobre cómo codificar audio en Base64, consulta Contenido de audio con codificación en Base64. Para obtener más información sobre el campo content, consulta RecognitionAudio.

Antes de usar cualquiera de los datos de la solicitud, reemplaza los valores que se indican a continuación:

  • LANGUAGE_CODE: Es el código BCP-47 del idioma que se habla en el clip de audio.
  • ENCODING: Es la codificación del audio que quieres transcribir.
  • SAMPLE_RATE_HERTZ: Es la tasa de muestreo expresada en hercios del audio que quieres transcribir.
  • ENABLE_WORD_TIME_OFFSETS: Habilita este campo si quieres que se devuelvan las compensaciones de tiempo de inicio y de finalización de las palabras (marcas de tiempo).
  • INPUT_AUDIO: Es la cadena codificada en Base64 de los datos de audio que quieres transcribir.
  • PROJECT_ID: Es el ID alfanumérico de tu proyecto de Google Cloud .

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "config": {
      "languageCode": "LANGUAGE_CODE",
      "encoding": "ENCODING",
      "sampleRateHertz": SAMPLE_RATE_HERTZ,
      "enableWordTimeOffsets": ENABLE_WORD_TIME_OFFSETS
  },
  "audio": {
    "content": "INPUT_AUDIO"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

gcloud

Consulta el comando recognize para obtener todos los detalles.

Para realizar el reconocimiento de voz en un archivo local, usa la Google Cloud CLI y pasa la ruta de acceso al archivo local.

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

Si la solicitud es exitosa, el servidor devuelve una respuesta en formato JSON:

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

Go

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Go.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.


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 := os.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

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Java.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

/**
 * Performs speech recognition on raw PCM audio and prints the transcription.
 *
 * @param fileName the path to a PCM audio file to transcribe.
 */
public static void syncRecognizeFile(String fileName) throws Exception {
  try (SpeechClient speech = SpeechClient.create()) {
    Path path = Paths.get(fileName);
    byte[] data = Files.readAllBytes(path);
    ByteString audioBytes = ByteString.copyFrom(data);

    // Configure request with local raw PCM audio
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setEncoding(AudioEncoding.LINEAR16)
            .setLanguageCode("en-US")
            .setSampleRateHertz(16000)
            .build();
    RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(audioBytes).build();

    // Use blocking call to get audio transcript
    RecognizeResponse response = speech.recognize(config, audio);
    List<SpeechRecognitionResult> results = response.getResultsList();

    for (SpeechRecognitionResult result : results) {
      // 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("Transcription: %s%n", alternative.getTranscript());
    }
  }
}

Node.js

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Node.js.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Python.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

from google.cloud import speech


def transcribe_file(audio_file: str) -> speech.RecognizeResponse:
    """Transcribe the given audio file.
    Args:
        audio_file (str): Path to the local audio file to be transcribed.
            Example: "resources/audio.wav"
    Returns:
        cloud_speech.RecognizeResponse: The response containing the transcription results
    """
    client = speech.SpeechClient()

    with open(audio_file, "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",
    )

    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(f"Transcript: {result.alternatives[0].transcript}")

    return response

Lenguajes adicionales

C#: Sigue las instrucciones de configuración de C# de la página de bibliotecas cliente y, luego, consulta la documentación de referencia de Cloud STT para .NET.

PHP: Sigue las instrucciones de configuración de PHP de la página de bibliotecas cliente y, luego, consulta la documentación de referencia de Cloud STT para PHP.

Ruby: Sigue las instrucciones de configuración de Ruby de la página de bibliotecas cliente y, luego, consulta la documentación de referencia de Cloud STT para Ruby.

Realiza reconocimiento de voz síncrono en un archivo remoto

Para una mayor practicidad, la API de Cloud Speech-to-Text puede realizar el reconocimiento de voz síncrono directamente en un archivo de audio ubicado en Cloud Storage sin necesidad de enviar el contenido del archivo de audio en el cuerpo de la solicitud.

El siguiente es un ejemplo de cómo se realiza un reconocimiento de voz síncrono en un archivo ubicado en Cloud Storage.

REST

Consulta el extremo de la API de speech:recognize para obtener todos los detalles. Consulta la documentación de referencia de RecognitionConfig para obtener más información sobre cómo configurar el cuerpo de la solicitud.

El contenido del audio suministrado en el cuerpo de la solicitud debe estar codificado en Base64. Para obtener más información sobre cómo codificar audio en Base64, consulta Contenido de audio con codificación en Base64. Para obtener más información sobre el campo content, consulta RecognitionAudio.

Antes de usar cualquiera de los datos de la solicitud, reemplaza los valores que se indican a continuación:

  • LANGUAGE_CODE: Es el código BCP-47 del idioma que se habla en el clip de audio.
  • ENCODING: Es la codificación del audio que quieres transcribir.
  • SAMPLE_RATE_HERTZ: Es la tasa de muestreo expresada en hercios del audio que quieres transcribir.
  • ENABLE_WORD_TIME_OFFSETS: Habilita este campo si quieres que se devuelvan las compensaciones de tiempo de inicio y de finalización de las palabras (marcas de tiempo).
  • STORAGE_BUCKET: Es un bucket de Cloud Storage.
  • INPUT_AUDIO: Es el archivo de datos de audio que quieres transcribir.
  • PROJECT_ID: Es el ID alfanumérico de tu proyecto de Google Cloud .

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

gcloud

Consulta el comando recognize para obtener todos los detalles.

Para realizar el reconocimiento de voz en un archivo local, usa la Google Cloud CLI y pasa la ruta de acceso al archivo local.

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

Si la solicitud es exitosa, el servidor devuelve una respuesta en formato JSON:

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

Go

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Go.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.


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

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Java.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

/**
 * Performs speech recognition on remote FLAC file and prints the transcription.
 *
 * @param gcsUri the path to the remote FLAC audio file to transcribe.
 */
public static void syncRecognizeGcs(String gcsUri) throws Exception {
  // Instantiates a client with GOOGLE_APPLICATION_CREDENTIALS
  try (SpeechClient speech = SpeechClient.create()) {
    // Builds the request for remote FLAC file
    RecognitionConfig config =
        RecognitionConfig.newBuilder()
            .setEncoding(AudioEncoding.FLAC)
            .setLanguageCode("en-US")
            .setSampleRateHertz(16000)
            .build();
    RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(gcsUri).build();

    // Use blocking call for getting audio transcript
    RecognizeResponse response = speech.recognize(config, audio);
    List<SpeechRecognitionResult> results = response.getResultsList();

    for (SpeechRecognitionResult result : results) {
      // 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("Transcription: %s%n", alternative.getTranscript());
    }
  }
}

Node.js

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Node.js.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud STT, consulta Bibliotecas cliente de Cloud STT. Para obtener más información, consulta la documentación de referencia de la API de Cloud STT para Python.

Para autenticarte en Cloud STT, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

def transcribe_gcs(audio_uri: str) -> speech.RecognizeResponse:
    """Transcribes the audio file specified by the gcs_uri.
    Args:
        audio_uri (str): The Google Cloud Storage URI of the input audio file.
            E.g., gs://cloud-samples-data/speech/audio.flac
    Returns:
        cloud_speech.RecognizeResponse: The response containing the transcription results
    """
    from google.cloud import speech

    client = speech.SpeechClient()

    audio = speech.RecognitionAudio(uri=audio_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(f"Transcript: {result.alternatives[0].transcript}")

    return response

Lenguajes adicionales

C#: Sigue las instrucciones de configuración de C# de la página de bibliotecas cliente y, luego, consulta la documentación de referencia de Cloud STT para .NET.

PHP: Sigue las instrucciones de configuración de PHP de la página de bibliotecas cliente y, luego, consulta la documentación de referencia de Cloud STT para PHP.

Ruby: Sigue las instrucciones de configuración de Ruby de la página de bibliotecas cliente y, luego, consulta la documentación de referencia de Cloud STT para Ruby.