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, aplicando potentes modelos de redes neuronales en una API fácil de usar.
En este codelab, te enfocarás en usar 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
- Conocimiento del uso de JavaScript/Node.js
Encuesta
¿Cómo usarás este instructivo?
¿Cómo calificarías tu experiencia con Node.js?
¿Cómo calificarías tu experiencia con el uso de los servicios de Google Cloud Platform?
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- 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).
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.
- 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 que no se te facture 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
- En la consola de Cloud, haz clic en Activar Cloud Shell
.
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:
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
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.
- 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 Node.js de Google 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, establece una variable de entorno con tu PROJECT_ID que utilizarás durante todo este codelab. Si usas Cloud Shell, esta variable se establecerá automáticamente:
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 la biblioteca de Node.js de la API de Speech-to-Text, que se explica en el siguiente paso, usa para encontrar tus credenciales. La variable de entorno se debe establecer con la ruta de acceso completa del archivo JSON de credenciales que creaste, con el siguiente comando:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
Obtén más información para 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
Para obtener más instrucciones sobre cómo configurar un entorno de desarrollo de Node.js para Google Cloud, consulta la Guía de configuración.
Ya puedes usar la API de Speech-to-Text.
6. Transcribe archivos de audio
En esta sección, transcribirás un archivo de audio grabado previamente en inglés. El archivo de audio está disponible en Google Cloud Storage.
Navega al archivo index.js dentro de 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 un minuto o dos para estudiar el código y ver cómo 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 .raw (consulta el documento para obtener más detalles sobre el tipo de codificación).
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 al archivo de audio. Aquí usamos un URI de Cloud Storage.
Ejecuta el programa:
node .
Deberías ver el siguiente resultado:
how old is the Brooklyn Bridge
7. Transcribe con marcas de tiempo de palabras
Speech-to-Text puede detectar la compensación horaria (marca de tiempo) del audio transcrito. Las compensaciones horarias muestran el principio y el final de cada palabra pronunciada en el audio proporcionado. 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 de 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();
Dedica uno o dos minutos a estudiar el código y ver cómo 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 los desplazamientos de tiempo (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. Transcribir diferentes idiomas
La API de Speech-to-Text admite la transcripción en más de 100 idiomas. Para consultar la lista de idiomas admitidos, ingresa 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 de 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 oración de un popular cuento infantil francés.
Para obtener la lista completa de idiomas admitidos y sus códigos, consulta la documentación aquí.
9. ¡Felicitaciones!
Aprendiste a usar la API de Speech-to-Text con Node.js para realizar diferentes tipos de transcripción 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 Cloud Platform Console.
- Selecciona el proyecto que deseas cerrar y, luego, haz clic en "Borrar" en la parte superior para programar su eliminación.
Más información
- API de Google Cloud Speech-to-Text: https://cloud.google.com/speech-to-text/docs
- Node.js en Google Cloud Platform: https://cloud.google.com/nodejs/
- Cliente de Node.js de Google Cloud: https://googlecloudplatform.github.io/google-cloud-node/
Licencia
Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.