Usa la API de Speech-to-Text con Node.js

Usa la API de Speech-to-Text con Node.js

Acerca de este codelab

subjectÚltima actualización: dic 15, 2022
account_circleEscrito por Anu Srivastava

1. Descripción general

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

En este codelab, te enfocarás en el uso de la API de Speech-to-Text con Node.js. Aprenderás a enviar un archivo de audio en inglés y otros idiomas a la API de Cloud Speech-to-Text para su transcripción.

Qué aprenderás

  • Cómo habilitar la API de Speech-to-Text
  • Cómo autenticar solicitudes a la API
  • Cómo instalar la biblioteca cliente de Google Cloud para Node.js
  • 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 Platform
  • Un navegador como Chrome o Firefox
  • Conocimientos de JavaScript o Node.js

Encuesta

.

¿Cómo usarás este instructivo?

¿Cómo calificarías tu experiencia con Node.js?

¿Cómo calificarías tu experiencia en el uso de los servicios de Google Cloud Platform?

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de G Suite, debes crear una).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID.

  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.

Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza” en la que se aconseja cómo cerrar recursos para no incurrir en facturación más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google 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 ShellH7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Si nunca ha iniciado Cloud Shell, aparecerá una pantalla intermedia (debajo de la mitad inferior de la página) que describe qué es. Si ese es el caso, haz clic en Continuar (y no volverás a verlo). Así es como se ve la pantalla única:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

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

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
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`
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. Habilita la API de Speech-to-Text

Antes de comenzar a usar la API de Speech-to-Text, debes habilitarla. Puedes habilitar la API con el siguiente comando en Cloud Shell:

gcloud services enable speech.googleapis.com

4. Autentica solicitudes a la API

Para realizar solicitudes a la API de Speech-to-Text, debes usar una cuenta de servicio. Una cuenta de servicio pertenece a tu proyecto y la biblioteca cliente de Google de Node.js la usa para realizar solicitudes a la API de Speech-to-Text. Al igual que cualquier otra cuenta de usuario, una cuenta de servicio está representada por una dirección de correo electrónico. En esta sección, usarás el SDK de Cloud para crear una cuenta de servicio y, luego, crear las credenciales que necesitarás para autenticarte como la cuenta de servicio.

Primero, configura una variable de entorno con tu PROJECT_ID que usarás durante este codelab. Si usas Cloud Shell, se configurará por ti:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

A continuación, crea una cuenta de servicio nueva para acceder a la API de Speech-to-Text con el siguiente comando:

gcloud iam service-accounts create my-speech-to-text-sa \
 
--display-name "my speech-to-text codelab service account"

A continuación, crea credenciales que tu código de Node.js usará para acceder como tu cuenta de servicio nueva. Crea estas credenciales y guárdalas como un archivo JSON ~/key.json con el siguiente comando:

gcloud iam service-accounts keys create ~/key.json \
 
--iam-account  my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Por último, configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS, que se usa en la biblioteca de Node.js de la API de Speech-to-Text, que se explica en el siguiente paso, para encontrar tus credenciales. La variable de entorno se debe establecer en la ruta de acceso completa del archivo JSON de credenciales que creaste, con el siguiente código:

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

Puedes obtener más información sobre cómo autenticar la API de Speech-to-Text.

5. Instala la biblioteca cliente de la API de Google Cloud Speech-to-Text para Node.js

Primero, crea un proyecto que usarás para ejecutar este lab de la API de Speech-to-Text y, luego, inicializa un nuevo paquete de Node.js en la carpeta que elijas:

npm init

NPM hace varias preguntas sobre la configuración del proyecto, como el nombre y la versión. En cada pregunta, presiona ENTER para aceptar los valores predeterminados. El punto de entrada predeterminado es un archivo llamado index.js.

A continuación, instala la biblioteca de Google Cloud Speech en el proyecto:

npm install --save @google-cloud/speech

Si quieres obtener más instrucciones para configurar un desarrollo de Node.js para Google Cloud, consulta la Guía de configuración.

Ya está todo listo para que uses la API de Speech-to-Text.

6. Transcribir archivos de audio

En esta sección, transcribirás un archivo de audio pregrabado en inglés. El archivo de audio está disponible en Google Cloud Storage.

Navega al archivo index.js dentro y reemplaza el código por lo siguiente:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'LINEAR16',
    sampleRateHertz
: 16000,
    languageCode
: 'en-US',
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// 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}`);
}

quickstart
();

Tómate uno o dos minutos para estudiar el código y comprobar que se usa para transcribir un archivo de audio.**

El parámetro Encoding le indica a la API qué tipo de codificación de audio usas para el archivo de audio. Flac es el tipo de codificación para archivos sin procesar (consulta el documento para conocer el tipo de codificación y obtener más detalles).

En el objeto RecognitionAudio, puedes pasar a la API el URI de nuestro archivo de audio en Cloud Storage o la ruta de acceso local del archivo. Aquí, usamos un URI de Cloud Storage.

Ejecuta el programa:

node .

Deberías ver el siguiente resultado:

how old is the Brooklyn Bridge

7. Transcribir con marcas de tiempo de palabras

Speech-to-Text puede detectar la compensación horaria (marca 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.

Navega al archivo index.js dentro y reemplaza el código por lo siguiente:

const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'LINEAR16',
    sampleRateHertz
: 16000,
    languageCode
: 'en-US',
    enableWordTimeOffsets
: true,
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
  response
.results.forEach((result) => {
    result
.alternatives.forEach((alternative) => {
      console
.log(`Transcript: ${alternative.transcript}`);
      console
.log(`Word details:`);
      console
.log(` Word count ${alternative.words.length}`);
      alternative
.words.forEach((item) => {
        console
.log(`  ${item.word}`);
       
const s = parseInt(item.startTime.seconds) +
         item
.startTime.nanos/1000000000;
        console
.log(`   WordStartTime: ${s}s`);
       
const e = parseInt(item.endTime.seconds) +
        item
.endTime.nanos/1000000000;
        console
.log(`   WordEndTime: ${e}s`);
     
});
   
});
 
});
}

quickstart
();

Tómate uno o dos minutos para estudiar el código y ver que se usa para transcribir un archivo de audio con marcas de tiempo de palabras*.* El parámetro EnableWordTimeOffsets le indica a la API que habilite las compensaciones horarias (consulta el documento para obtener más detalles).

Vuelve a ejecutar el programa:

node .

Deberías ver el siguiente resultado:

Transcript: how old is the Brooklyn Bridge
Word details:
 
Word count 6
  how
   
WordStartTime: 0s
   
WordEndTime: 0.3s
  old
   
WordStartTime: 0.3s
   
WordEndTime: 0.6s
 
is
   
WordStartTime: 0.6s
   
WordEndTime: 0.8s
  the
   
WordStartTime: 0.8s
   
WordEndTime: 0.9s
 
Brooklyn
   
WordStartTime: 0.9s
   
WordEndTime: 1.1s
 
Bridge
   
WordStartTime: 1.1s
   
WordEndTime: 1.4s

8. Transcribe diferentes idiomas

La API de Speech-to-Text admite transcripciones en más de 100 idiomas. Consulta la lista de idiomas admitidos aquí.

En esta sección, transcribirás un archivo de audio pregrabado en francés. El archivo de audio está disponible en Google Cloud Storage.

Navega al archivo index.js dentro y reemplaza el código por lo siguiente:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'FLAC',
    languageCode
: 'fr-FR',
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// 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}`);
}

quickstart
();

Vuelve a ejecutar el programa. Deberías ver el siguiente resultado:

maître corbeau sur un arbre perché tenait en son bec un fromage

Esta es una frase de un popular cuento infantil francés.

Para ver la lista completa de idiomas y códigos de idiomas admitidos, consulta la documentación aquí.

9. ¡Felicitaciones!

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

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos de esta guía de inicio rápido:

  • Ve a la consola de Google Cloud.
  • Selecciona el proyecto que deseas cerrar y haz clic en “Borrar”. en la parte superior: esta opción programa la eliminación del proyecto.

Más información

Licencia

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