1. Descripción general
En este codelab, aprenderás a enviar un archivo de audio a través de la API de Google Cloud Speech-to-Text y, luego, generar la transcripción en un documento de Google. La API de Speech-to-Text es fácil de usar y aplica potentes redes neuronales para permitir que los desarrolladores conviertan audio en texto. Además, cuenta con tecnología de aprendizaje automático.
Usarás la API de Google Docs para crear un documento nuevo y escribir en él. Crearás una aplicación de línea de comandos en Java y ejecutarás tu código con el sistema de compilación de Gradle. Luego, usarás la API de Docs para ver tus resultados.
Qué aprenderás
- Cómo usar la API de Google Cloud Speech-to-Text
- Cómo usar la API de Google Docs para crear un documento nuevo
- Cómo usar la API de Docs para escribir en un documento
Requisitos
- Java instalado (versión 7 o superior)
- Gradle instalado (versión 5 o posterior)
- Acceso a Internet y un navegador web
- Una Cuenta de Google
- Un proyecto de Google Cloud
2. Configura tu proyecto
Crea tu proyecto de Cloud
- Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. (Si aún no tienes una cuenta de Gmail o Workspace, 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.
Obtén una clave de cuenta de servicio para la API de Cloud Speech-to-Text

- Dirígete a la consola de GCP y busca tu proyecto nuevo.
- Crea una cuenta de servicio
- Descarga una clave de cuenta de servicio como JSON
- Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS con la ruta de acceso al archivo JSON que contiene la clave de tu cuenta de servicio. Si reinicias la sesión de shell, deberás volver a configurar la variable.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Por ejemplo:
$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"
Obtén credenciales para la API de Docs
- En la consola de GCP, ve a Credenciales.
- Crea una clave de OAuth 2.0 y descárgala como JSON
- Cambia el nombre del archivo a
credentials.jsony asegúrate de que esté en el directoriosrc/main/resources/de tu código.
Habilita las APIs

- Selecciona la pestaña Panel, haz clic en el botón Habilitar APIs y servicios y habilita las siguientes 2 APIs:
- Voz a texto
- Documentos de Google

Ahora puedes comenzar a trabajar con tu código.
3. Configura tu código
Obtén el código de muestra
Para obtener el código de muestra, descarga el archivo ZIP en tu computadora…
… o clona el repositorio de GitHub desde la línea de comandos.
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
Trabajarás en el archivo CreateTranscript.java dentro del directorio start. No se deben modificar los archivos de Gradle.
En tu directorio, navega a la carpeta start y abre el archivo CreateTranscript.java. Desplázate hacia abajo hasta que veas la declaración de la clase CreateTranscript.
public class CreateTranscript {
private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
// Specify audio file name below.
private static final String AUDIO_FILENAME = "audioFile.wav";
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String APPLICATION_NAME = "CreateTranscript";
private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);
Para tu variable SCOPES, especificaste que tu código podrá ver y administrar los documentos de Documentos de Google del usuario. Si tu código requiere una autorización que va más allá de este acceso o es diferente, asegúrate de ajustar esta variable según los permisos de la API de Google de OAuth 2.0.
Por ejemplo, si no escribieras en un Documento de Google, podrías cambiar el alcance a DOCUMENTS_READONLY. La variable SCOPES es necesaria no solo para que tu app tenga los permisos de acceso adecuados, sino también para mantener la transparencia con los usuarios. Al usuario se le muestran los permisos específicos que solicitas en la página de verificación de OAuth, en la que debe dar su consentimiento para usar la app.
Cambiar el nombre de las variables
Asegúrate de que las variables anteriores se declaren correctamente para tu proyecto.
- Asegúrate de que AUDIO_FILENAME esté configurado con el nombre del archivo de demostración que envías a la API de Speech-to-Text. En el archivo CreateTranscript.java, ya deberías ver que está configurado correctamente.
- Cambia el nombre de CREDENTIALS_FILE_PATH al nombre del archivo de credenciales descargado (debe ser "/
credentials.json'"). Asegúrate de que este archivo esté dentro del directoriosrc/main/resourcesde tu carpeta. Si la clonación de GitHub no lo hace por ti, asegúrate de crear este directorio.
Ahora puedes comenzar a ejecutar tu código.
4. Inicializa un cliente de Docs
En el archivo CreateTranscript.java, busca la declaración del método principal y echa un vistazo a lo que hay dentro:
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Autorización de funciones
La primera tarea que realizarás aquí es la creación de la variable Docs service. El servicio representa un cliente de API autorizado que contiene tus credenciales y, en este caso, la autenticación del usuario final.
En tu código, cualquier función que realice una llamada a la API de Docs deberá utilizar esta variable service para realizar tareas relacionadas con Documentos.
5. Cómo crear un documento de Google
Crearás un nuevo documento de Google con un título específico. Entonces, copiemos el siguiente código en la función createDocument.
Document doc = new Document().setTitle("Transcript for " +
AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;
Esta función devuelve el ID del archivo de Drive del documento de Google. Este mismo ID se puede encontrar en la URL del documento.
A continuación, inicializarás el cliente de Speech-to-Text.
6. Llama a la API de Speech-to-Text
La siguiente tarea que deseas realizar en tu código es obtener la transcripción escrita del archivo de audio. Dentro de CreateTranscript.java, busca la función getTranscript().
Primero, obtén la ruta de acceso y los bytes de audio del archivo de audio:
SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);
Cómo configurar el reconocimiento de voz
A continuación, debes inicializar correctamente la variable RecognitionConfig.
Aquí, config proporciona información sobre cómo debe procesar exactamente tu solicitud el reconocedor de voz. Deberás editar setLanguageCode() si, por ejemplo, tu archivo de audio está en un idioma distinto del inglés y cambiar setSampleRateHertz() si tu archivo de audio tiene una tasa de muestreo diferente en hercios (1, 600 es óptimo).
RecognitionConfig config =
RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setLanguageCode("en-US")
.setSampleRateHertz(8000)
.build();
RecognitionAudio audio =
RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();
Cómo preparar el texto
Por último, controla la variable result de la transcripción del archivo de audio y prepárala para insertarla en un documento.
Cada elemento de los resultados es una transcripción del tipo SpeechRecognitionAlternatives. Por lo tanto, cada elemento contiene dos partes: una transcripción de texto y la puntuación de confianza correspondiente de la API.
List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
// Using the first + most likely alternative transcript
SpeechRecognitionAlternative alternative =
result.getAlternativesList().get(0);
String toInsert = alternative.getTranscript();
// Add requests array list to return.
requests.add(
new Request()
.setInsertText(
new InsertTextRequest()
.setText(toInsert)
.setEndOfSegmentLocation(new
EndOfSegmentLocation().setSegmentId(""))));
}
return requests;
7. Inserta texto en un documento
Ahora insertarás el texto de la transcripción en el documento de Google. Para realizar modificaciones en un documento, deberás usar el método BatchUpdate. BatchUpdate es un contenedor para diferentes tipos de solicitudes de escritura y, aquí, usarás InsertTextRequest.
EndOfSegmentLocation es un parámetro importante que especifica en qué parte del documento deseas imprimir el texto. En el código fuente, insertas texto en el cuerpo del documento.
Inserta el siguiente código en tu función para ver cómo los resultados de la API de Speech-to-Text junto con las llamadas a la API de Docs pueden permitirnos insertar la transcripción de un archivo de audio en un documento de Google:
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
Crea la solicitud
Cuando realices la solicitud de BatchUpdate, deberás establecer dos especificaciones muy importantes: qué deseas imprimir (.setText()) y en qué parte del documento deseas hacerlo (.setIndex(1)).
Ahora insertaste la transcripción de tu archivo de audio en el documento que creaste.
8. Ejecuta el código
Ahora que tienes todo el código que necesitas para tomar un archivo de audio, obtener su transcripción e imprimirla en un documento de Google recién creado, ¡comencemos!
Como ejecutarás tu código Java con el sistema de compilación de Gradle, debes indicarle a tu archivo build.gradle qué compilar y ejecutar exactamente. En este y otros proyectos, asegúrate de que mainClassName coincida con la clase de Java que deseas ejecutar.
¡Genial! Ahora puedes ejecutar tu código. Para ello, escribe lo siguiente en la línea de comandos:
$ gradle run
Autenticación del usuario final
La primera vez que ejecutes este código, verás que se imprime una URL en la terminal, en la que se te pedirá que accedas a tu cuenta de servicio y autorices el acceso a sus Documentos de Google. Después de permitir el acceso, verás un archivo nuevo almacenado en tu directorio.
Dentro de tu directorio de trabajo, verás una carpeta recién creada llamada tokens, que contiene un archivo StoredCredential. Este es el token de autenticación que acabas de proporcionar, que tu cliente solicitó al servidor de autenticación de Google, extrajo de su respuesta y ahora enviará a cualquier API a la que llames.
Solución
Si tu código no funciona, consulta el archivo CreateTranscript.java dentro de la carpeta finish. Este archivo contiene todo tu código exactamente como debe estar para que se ejecute correctamente.
Ahora veamos el resultado.
9. Visualiza los resultados
Acabas de crear un documento de Google nuevo que contiene la transcripción de tu archivo de audio, así que echemos un vistazo.
Este documento se creó a través de la cuenta con la que el usuario final proporcionó la autorización. Una posible expansión es que puedes compartir automáticamente este documento con otras personas usando la API de Drive.
Con tu código fuente y el archivo de audio proporcionado, deberías ver lo siguiente:

10. ¡Felicitaciones!
Ahora aprendiste a crear un documento de Google, hacer una llamada a la API de Speech-to-Text y generar la transcripción de tu archivo de audio en el documento que creaste.
Posibles mejoras
Estas son algunas ideas para lograr una integración más atractiva:
- Configura tu código para que escuche cuando se agrega un archivo de audio a tu bucket de Google Cloud Storage Drive y activa una función de Google Cloud para ejecutar este código.
- Experimenta con la inserción de texto en un documento de Google que no esté vacío
Más información
- Lee la documentación para desarrolladores de la API de Google Docs.
- Publica preguntas y encuentra respuestas en Stack Overflow con la etiqueta google-docs-api.