Usa la API de Speech-to-Text con Python

1. Descripción general

9e7124a578332fed.png

La API de Speech-to-Text permite que los desarrolladores conviertan audio en texto en más de 125 idiomas y variantes mediante la aplicación de potentes modelos de redes neuronales en una API fácil de usar.

En este instructivo, te enfocarás en el uso de la API de Speech-to-Text con Python.

Qué aprenderás

  • Cómo configurar tu entorno
  • Cómo transcribir archivos de audio en inglés
  • Cómo transcribir archivos de audio con marcas de tiempo de palabras
  • Cómo transcribir archivos de audio en diferentes idiomas

Requisitos

  • Un proyecto de Google Cloud
  • Un navegador, como Chrome o Firefox.
  • Conocimientos de Python

Encuesta

¿Cómo usarás este instructivo?

Leer Leer y completar los ejercicios

¿Cómo calificarías tu experiencia en Python?

Principiante Intermedio Avanzado

¿Cómo calificarías tu experiencia con los servicios de Google Cloud?

Principiante Intermedio Avanzado .
.

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Inicia Cloud Shell

Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este codelab usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shell853e55310c205094.png.

8c1dabeca90e44e5.png

Si es la primera vez que inicias Cloud Shell, verás una pantalla intermedia que describe en qué consiste. Si apareció una pantalla intermedia, haz clic en Continuar.

9c92662c6a846a5c.png

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

9f0e51b578fecce5.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que mejora considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.

Una vez que te conectes a Cloud Shell, deberías ver que estás autenticado y que el proyecto está configurado con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list

Resultado del comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto:
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].

3. Configuración del entorno

Antes de comenzar a usar la API de Speech-to-Text, ejecuta el siguiente comando en Cloud Shell para habilitarla:

gcloud services enable speech.googleapis.com

Debería ver algo como esto:

Operation "operations/..." finished successfully.

Ya puedes usar la API de Speech-to-Text.

Navega a tu directorio principal:

cd ~

Crea un entorno virtual de Python para aislar las dependencias:

virtualenv venv-speech

Activa el entorno virtual:

source venv-speech/bin/activate

Instala IPython y la biblioteca cliente de la API de Speech-to-Text:

pip install ipython google-cloud-speech

Debería ver algo como esto:

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

Ya tienes todo listo para usar la biblioteca cliente de la API de Speech-to-Text.

En los siguientes pasos, usarás un intérprete de Python interactivo llamado IPython, que instalaste en el paso anterior. Para iniciar una sesión, ejecuta ipython en Cloud Shell:

ipython

Debería ver algo como esto:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Ya puedes realizar tu primera solicitud...

4. Transcribe archivos de audio

En esta sección, transcribirás un archivo de audio en inglés.

Copia el siguiente código en tu sesión de IPython:

from google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

Tómate un momento para estudiar el código y ver cómo usa el método de la biblioteca cliente recognize para transcribir un archivo de audio*.* El parámetro config indica cómo procesar la solicitud y el parámetro audio especifica los datos de audio que se reconocerán.

Envía una solicitud:

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

Deberías ver el siguiente resultado:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

Actualiza la configuración para habilitar la puntuación automática y enviar una nueva solicitud:

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

Deberías ver el siguiente resultado:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

Resumen

En este paso, pudiste transcribir un archivo de audio en inglés usando diferentes parámetros y, luego, imprimir el resultado. Obtén más información para transcribir archivos de audio.

5. Obtén marcas de tiempo en las palabras

Speech-to-Text puede detectar compensaciones horarias (marcas de tiempo) para el audio transcrito. Las compensaciones horarias muestran el principio y el final de cada palabra pronunciada en el audio suministrado. Un valor de compensación horaria representa la cantidad de tiempo que transcurrió desde el comienzo del audio, en incrementos de 100 ms.

Para transcribir un archivo de audio con marcas de tiempo de palabras, copia lo siguiente en tu sesión de IPython para actualizar el código:

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

Tómate un momento para estudiar el código y ver cómo transcribe un archivo de audio con marcas de tiempo de palabras*.* El parámetro enable_word_time_offsets le indica a la API que muestre las compensaciones horarias para cada palabra (consulta el documento para obtener más detalles).

Envía una solicitud:

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

Deberías ver el siguiente resultado:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

Resumen

En este paso, pudiste transcribir un archivo de audio en inglés con marcas de tiempo de palabras y, luego, imprimir el resultado. Obtén más información sobre la obtención de marcas de tiempo de palabras.

6. Transcribe diferentes idiomas

La API de Speech-to-Text reconoce más de 125 idiomas y variantes. Consulta la lista de idiomas admitidos aquí.

En esta sección, transcribirás un archivo de audio en francés.

Para transcribir el archivo de audio en francés, copia lo siguiente en tu sesión de IPython para actualizar el código:

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

Deberías ver el siguiente resultado:

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

Resumen

En este paso, pudiste transcribir un archivo de audio en francés y, luego, imprimir el resultado. Obtén más información sobre los idiomas compatibles.

7. ¡Felicitaciones!

9e7124a578332fed.png

Aprendiste a usar la API de Speech-to-Text con Python para realizar diferentes tipos de transcripciones en archivos de audio.

Limpia

Para limpiar tu entorno de desarrollo, desde Cloud Shell, haz lo siguiente:

  • Si aún estás en la sesión de IPython, vuelve a la shell: exit
  • Deja de usar el entorno virtual de Python: deactivate
  • Borra tu carpeta de entorno virtual: cd ~ ; rm -rf ./venv-speech

Para borrar tu proyecto de Google Cloud de Cloud Shell, haz lo siguiente:

  • Recupera tu ID del proyecto actual: PROJECT_ID=$(gcloud config get-value core/project)
  • Asegúrate de que este sea el proyecto que quieres borrar: echo $PROJECT_ID
  • Borrar el proyecto: gcloud projects delete $PROJECT_ID

Más información

Licencia

Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.