Información general sobre Cloud Speech-to-Text

En este documento se explican los conceptos básicos para usar Cloud Speech-to-Text. En esta guía conceptual se describen los tipos de solicitudes que puedes enviar a Cloud STT, cómo crear esas solicitudes y cómo gestionar sus respuestas. Recomendamos que todos los usuarios de Cloud STT lean esta guía y uno de los tutoriales asociados antes de empezar a usar la API.

Pruébalo

Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de Cloud STT en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.

Probar Cloud STT gratis

Solicitudes de voz

Cloud STT cuenta con tres métodos principales para realizar el reconocimiento de voz:

  • El reconocimiento síncrono (REST y gRPC) envía datos de audio a la API Cloud Speech-to-Text, realiza el reconocimiento de esos datos y devuelve los resultados después de que se haya procesado todo el audio. Las solicitudes de reconocimiento síncronas se limitan a datos de audio de 1 minuto o menos.

  • La función de reconocimiento asíncrono (REST y gRPC) envía datos de audio a la API Cloud Speech-to-Text e inicia una operación de larga duración. Con esta operación, puedes consultar periódicamente los resultados del reconocimiento. Usa solicitudes asíncronas para datos de audio de cualquier duración de hasta 480 minutos.

  • Streaming Recognition (solo gRPC) realiza el reconocimiento de los datos de audio proporcionados en un flujo bidireccional de gRPC. Las solicitudes de streaming están diseñadas para el reconocimiento en tiempo real, como la captura de audio en directo desde un micrófono. El reconocimiento de streaming proporciona resultados provisionales mientras se captura el audio, lo que permite que aparezcan resultados, por ejemplo, mientras el usuario sigue hablando.

Las solicitudes contienen parámetros de configuración y datos de audio. En las siguientes secciones se explican con más detalle estos tipos de solicitudes de reconocimiento, las respuestas que generan y cómo se gestionan.

Reconocimiento de la API Cloud Speech-to-Text

Una solicitud de reconocimiento síncrono de la API Cloud Speech-to-Text es el método más sencillo para realizar el reconocimiento de datos de audio de voz. Cloud STT puede procesar hasta 1 minuto de datos de audio de voz enviados en una solicitud síncrona. Una vez que Cloud STT procesa y reconoce todo el audio, devuelve una respuesta.

Una solicitud síncrona es de bloqueo, lo que significa que Cloud STT debe devolver una respuesta antes de procesar la siguiente solicitud. Por lo general, el servicio Cloud STT procesa el audio más rápido que en tiempo real. De media, procesa 30 segundos de audio en 15 segundos. En los casos en los que la calidad del audio sea deficiente, la solicitud de reconocimiento puede tardar mucho más.

Solicitudes de reconocimiento de voz síncronas

Una solicitud síncrona de la API Cloud Speech-to-Text consta de una configuración de reconocimiento de voz y datos de audio. Por ejemplo:

{
    "config": {
        "encoding": "LINEAR16",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
    },
    "audio": {
        "uri": "gs://bucket-name/path_to_audio_file"
    }
}

Todas las solicitudes de reconocimiento síncronas de la API Cloud Speech-to-Text deben incluir un campo configde reconocimiento de voz (de tipo RecognitionConfig). Un RecognitionConfig contiene los siguientes subcampos:

  • encoding: obligatorio. Especifica el esquema de codificación del audio proporcionado (de tipo AudioEncoding). Si puedes elegir el códec, te recomendamos que uses una codificación sin pérdidas, como FLAC o LINEAR16, para obtener el mejor rendimiento. Para obtener más información, consulta Codificaciones de audio. El campo encoding es opcional para los archivos FLAC y WAV en los que la codificación se incluye en el encabezado del archivo.
  • sampleRateHertz: obligatorio. Especifica la frecuencia de muestreo (en hercios) del audio proporcionado. Para obtener más información sobre las frecuencias de muestreo, consulta la sección Frecuencias de muestreo que se incluye más abajo. El campo sampleRateHertz es opcional para los archivos FLAC y WAV en los que la frecuencia de muestreo se incluye en el encabezado del archivo.
  • languageCode: obligatorio. Contiene el idioma y la región o la configuración regional que se van a usar para el reconocimiento de voz del audio proporcionado. El código de idioma debe ser un identificador BCP-47. Ten en cuenta que los códigos de idioma suelen constar de etiquetas de idioma principales y subetiquetas de región secundarias para indicar dialectos (por ejemplo, "en" para inglés y "US" para Estados Unidos en el ejemplo anterior). Para ver una lista de los idiomas admitidos, consulta Idiomas admitidos.
  • maxAlternatives: opcional, el valor predeterminado es 1. Indica el número de transcripciones alternativas que se deben proporcionar en la respuesta. De forma predeterminada, la API Cloud Speech-to-Text proporciona una transcripción principal. Si quieres evaluar diferentes alternativas, asigna un valor más alto a maxAlternatives. Ten en cuenta que Cloud STT solo devolverá alternativas si el reconocedor determina que las alternativas son de calidad suficiente. Por lo general, las alternativas son más adecuadas para las solicitudes en tiempo real que requieren comentarios de los usuarios (por ejemplo, comandos de voz) y, por lo tanto, son más adecuadas para las solicitudes de reconocimiento de streaming.
  • profanityFilter: opcional. Indica si se deben filtrar las palabras o frases malsonantes. Las palabras filtradas incluirán la primera letra y asteriscos para el resto de los caracteres (por ejemplo, p***). El filtro de palabras malsonantes funciona con palabras sueltas, no detecta expresiones abusivas u ofensivas que sean frases o combinaciones de palabras.
  • speechContext: opcional. Contiene información contextual adicional para procesar este audio. Un contexto contiene los siguientes subcampos:
    • boost: contiene un valor que asigna una ponderación al reconocimiento de una palabra o frase determinada.
    • phrases: contiene una lista de palabras y frases que proporcionan pistas a la tarea de reconocimiento de voz. Para obtener más información, consulta la sección sobre adaptación del habla.

El audio se proporciona a Cloud STT a través del parámetro audio de tipo RecognitionAudio. El campo audio contiene uno de los siguientes subcampos:

  • content contiene el audio que se va a evaluar, insertado en la solicitud. Consulta más información sobre cómo insertar contenido de audio. El audio transmitido directamente en este campo está restringido a un minuto de duración.
  • uri contiene un URI que apunta al contenido de audio. El archivo no debe estar comprimido (por ejemplo, con gzip). Este campo debe contener un URI de Cloud Storage (con el formato gs://bucket-name/path_to_audio_file). Consulta Enviar una referencia de audio mediante un URI.

Frecuencias de muestreo

La frecuencia de muestreo del audio se especifica en el campo sampleRateHertz de la configuración de la solicitud y debe coincidir con la frecuencia de muestreo del contenido o la emisión de audio asociados. Se admiten frecuencias de muestreo entre 8000 y 48.000 Hz en Cloud STT. Puedes especificar la frecuencia de muestreo de un archivo FLAC o WAV en el encabezado del archivo en lugar de usar el campo sampleRateHertz. Para poder enviar un archivo FLAC a la API Speech-to-Text, debe contener la frecuencia de muestreo en el encabezado FLAC.

Si puedes elegir cuando codifiques el material de origen, captura el audio con una frecuencia de muestreo de 16.000 Hz. Los valores inferiores a este pueden alterar la precisión del reconocimiento de voz y con los valores superiores no se aprecia una mejora en la calidad del reconocimiento de voz.

Sin embargo, si tus datos de audio ya se han grabado a una frecuencia de muestreo distinta de 16.000 Hz, no los remuestrees a 16.000 Hz. Por ejemplo, la mayoría del audio de telefonía antiguo usa frecuencias de muestreo de 8000 Hz, lo que puede dar resultados menos precisos. Si debes usar este tipo de audio, proporciónalo a la API Speech con su frecuencia de muestreo original.

Idiomas

El motor de reconocimiento de Cloud STT admite varios idiomas y dialectos. Puedes especificar el idioma (y el dialecto nacional o regional) del audio en el campo languageCode de la configuración de la solicitud mediante un identificador BCP-47.

Puedes consultar la lista completa de idiomas disponibles para cada función en la página Idiomas disponibles.

Compensaciones horarias (marcas de tiempo)

Cloud STT puede incluir valores de desfase temporal (marcas de tiempo) para el inicio y el final de cada palabra hablada que se reconoce en el audio proporcionado. Un valor de compensación horaria representa la cantidad de tiempo que ha transcurrido desde el comienzo del audio, en incrementos de 100 ms.

Las compensaciones horarias son especialmente útiles para analizar archivos de audio más largos, donde es posible que deba buscar una palabra determinada en el texto reconocido y ubicarla (buscar) en el audio original. Se admiten desfases de tiempo en todos nuestros métodos de reconocimiento: recognize, streamingrecognize y longrunningrecognize.

Los valores de compensación horaria solo se incluyen para la primera alternativa provista en la respuesta de reconocimiento.

Para incluir desfases horarios en los resultados de tu solicitud, define el parámetro enableWordTimeOffsets como true en la configuración de la solicitud. Para ver ejemplos de uso de la API REST o las bibliotecas de cliente, consulta Usar desfases horarios (marcas de tiempo). Por ejemplo, puede incluir el parámetro enableWordTimeOffsets en la configuración de la solicitud, como se muestra a continuación:

{
"config": {
  "languageCode": "en-US",
  "enableWordTimeOffsets": true
  },
"audio":{
  "uri":"gs://gcs-test-data/gettysburg.flac"
  }
}

El resultado devuelto por la API Cloud Speech-to-Text contendrá valores de desfase de tiempo para cada palabra reconocida, como se muestra a continuación:

{
  "name": "6212202767953098955",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2017-07-24T10:21:22.013650Z",
    "lastUpdateTime": "2017-07-24T10:21:45.278630Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "Four score and twenty...(etc)...",
            "confidence": 0.97186122,
            "words": [
              {
                "startTime": "1.300s",
                "endTime": "1.400s",
                "word": "Four"
              },
              {
                "startTime": "1.400s",
                "endTime": "1.600s",
                "word": "score"
              },
              {
                "startTime": "1.600s",
                "endTime": "1.600s",
                "word": "and"
              },
              {
                "startTime": "1.600s",
                "endTime": "1.900s",
                "word": "twenty"
              },
              ...
            ]
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "for score and plenty...(etc)...",
            "confidence": 0.9041967,
          }
        ]
      }
    ]
  }
}

Selección de modelos

Transcripción de voz de Cloud puede usar uno de los varios modelos de aprendizaje automático para transcribir tu archivo de audio. Google ha entrenado estos modelos de reconocimiento de voz para tipos y fuentes de audio específicos.

Cuando envías una solicitud de transcripción de audio a Cloud STT, puedes mejorar los resultados que recibes especificando la fuente del audio original. De esta forma, la API Cloud Speech-to-Text puede procesar tus archivos de audio con un modelo de aprendizaje automático entrenado para reconocer el audio de voz de ese tipo de fuente concreto.

Para especificar un modelo de reconocimiento de voz, incluya el campo model en el objeto RecognitionConfig de su solicitud y especifique el modelo que quiera usar.

Consulta la lista de modelos de transcripción de Cloud STT para ver los modelos de aprendizaje automático disponibles.

Contenido de audio insertado

El audio insertado se incluye en la solicitud de reconocimiento de voz cuando se pasa un parámetro content en el campo audio de la solicitud. En el caso del audio insertado que se proporciona como contenido en una solicitud gRPC, ese audio debe ser compatible con la serialización Proto3 y proporcionarse como datos binarios. En cambio, para audio insertado proporcionado como contenido en una solicitud REST, el audio debe ser compatible con la serialización JSON y debe codificarse primero en Base64. Consulte Codificación Base64 de audio para obtener más información.

Cuando crees una solicitud con una biblioteca de cliente de Google Cloud, normalmente escribirás estos datos binarios (o codificados en base64) directamente en el campo content.

Transfiere el audio al que se hace referencia mediante un URI

Lo más habitual es que envíes un parámetro uri en el campo audio de la solicitud de voz, que apunta a un archivo de audio (en formato binario, no en base64) ubicado en Cloud Storage con el siguiente formato:

gs://bucket-name/path_to_audio_file

Por ejemplo, la siguiente parte de una solicitud de Speech hace referencia al archivo de audio de muestra utilizado dentro del inicio rápido:

...
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
    }
...

Debes tener los permisos de acceso adecuados para leer archivos de Cloud Storage, como uno de los siguientes:

  • Lectura pública (como nuestros archivos de audio de muestra)
  • Lectura con tu cuenta de servicio, si se usa una autorización de cuenta de servicio.
  • Puede leerla una cuenta de usuario si se usa el protocolo OAuth de tres vías para autorizar la cuenta de usuario.

Para obtener más información sobre cómo gestionar el acceso a Cloud Storage, consulta el artículo Crear y gestionar listas de control de acceso de la documentación de Cloud Storage.

Respuestas de la API Cloud Speech-to-Text

Como se ha indicado anteriormente, una respuesta síncrona de la API Cloud Speech-to-Text puede tardar un tiempo en devolver los resultados, proporcional a la duración del audio proporcionado. Una vez procesada, la API devolverá una respuesta como se muestra en el siguiente bloque de código:

{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.98267895,
          "transcript": "how old is the Brooklyn Bridge"
        }
      ]
    }
  ]
}
  • results contiene la lista de resultados (de tipo SpeechRecognitionResult), donde cada resultado corresponde a un segmento de audio (los segmentos de audio están separados por pausas). Cada resultado constará de uno o varios de los siguientes campos:
    • alternatives contiene una lista de posibles transcripciones de tipo SpeechRecognitionAlternatives. Que aparezca más de una alternativa depende de si has solicitado más de una alternativa (asignando a maxAlternatives un valor superior a 1) y de si el servicio STT de Cloud ha generado alternativas de calidad suficiente. Cada alternativa constará de los siguientes campos:

Los componentes de esta respuesta se explican en las secciones siguientes.

Seleccionar alternativas

Cada resultado de una respuesta de reconocimiento síncrono correcta puede contener uno o varios alternatives (si el valor de maxAlternatives de la solicitud es mayor que 1). Si Cloud STT determina que una alternativa tiene un valor de confianza suficiente, se incluye en la respuesta. La primera alternativa de la respuesta siempre es la mejor (la más probable).

Si asignas a maxAlternatives un valor superior a 1, no se implica ni se garantiza que se devuelvan varias alternativas. En general, es más adecuado ofrecer más de una alternativa para proporcionar opciones en tiempo real a los usuarios que obtienen resultados mediante una solicitud de reconocimiento de streaming.

Administración de transcripciones

Cada alternativa proporcionada en la respuesta contendrá un elemento transcript que incluirá el texto reconocido. Cuando se proporcionen alternativas secuenciales, deberías concatenar estas transcripciones.

El siguiente código de Python se repite en una lista de resultados y concatena las transcripciones. Ten en cuenta que en todos los casos tomamos la primera alternativa (el cero).

response = service_request.execute()
recognized_text = 'Transcribed Text: \n'
for i in range(len(response['results'])):
    recognized_text += response['results'][i]['alternatives'][0]['transcript']

Valores de confianza

El valor de confidence es una estimación entre 0.0 y 1.0. Se calcula agregando los valores de "probabilidad" asignados a cada palabra del audio. Un número más alto indica una mayor probabilidad estimada de que las palabras individuales se hayan reconocido correctamente. Este campo normalmente solo se proporciona para la hipótesis principal y solo para los resultados en los que is_final=true. Por ejemplo, puedes usar el valor confidence para decidir si quieres mostrar resultados alternativos al usuario o pedirle que confirme.

Sin embargo, ten en cuenta que el modelo determina el resultado "mejor" o mejor clasificado en función de más señales que solo la puntuación confidence (como el contexto de la frase). Por este motivo, en ocasiones, el resultado principal no tiene la puntuación de confianza más alta. Si no has solicitado varios resultados alternativos, es posible que el resultado "óptimo" que se devuelva tenga un valor de confianza inferior al esperado. Esto puede ocurrir, por ejemplo, en los casos en los que se usan palabras poco frecuentes. A una palabra que se usa poco se le puede asignar un valor de "probabilidad" bajo, aunque se reconozca correctamente. Si el modelo determina que la palabra poco común es la opción más probable según el contexto, ese resultado se devuelve en la parte superior, aunque el valor confidence del resultado sea inferior al de otras opciones.

Solicitudes y respuestas asíncronas

Una solicitud asíncrona de la API Cloud Speech-to-Text al método LongRunningRecognize tiene la misma forma que una solicitud síncrona de la API Cloud Speech-to-Text. Sin embargo, en lugar de devolver una respuesta, la solicitud asíncrona iniciará una operación de larga duración (de tipo Operation) y devolverá esta operación al llamador inmediatamente. Puedes usar el reconocimiento de voz asíncrono con audio de cualquier duración, hasta 480 minutos.

Por ejemplo:

{
  "name": "operation_name",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata"
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

Fíjate que aún no hay resultados. Cloud STT seguirá procesando el audio y usará esta operación para almacenar los resultados. Los resultados aparecerán en el campo response de la operación devuelta cuando se complete la solicitud LongRunningRecognize.

El siguiente ejemplo es una respuesta completa una vez que se ha completado la solicitud:

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongrunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "confidence": 0.98267895,
        "transcript": "how old is the Brooklyn Bridge"
      }]}]
  },
  "done": True,
}

Ten en cuenta que done se ha definido como True y que response de la operación contiene un conjunto de resultados de tipo SpeechRecognitionResult que es el mismo tipo que devuelve una solicitud de reconocimiento síncrona de la API Cloud Speech-to-Text.

Solicitudes de reconocimiento de la API Streaming Cloud Speech-to-Text

Una llamada de reconocimiento de la API Cloud Speech-to-Text en streaming está diseñada para capturar y reconocer audio en tiempo real en un flujo bidireccional. Tu aplicación puede enviar audio en el flujo de la solicitud y recibir resultados provisionales y finales en el flujo de respuesta en tiempo real. Los resultados provisionales representan el resultado de reconocimiento actual de una sección de audio, mientras que el resultado de reconocimiento final corresponde a la última y mejor suposición de dicha sección de audio.

Solicitudes en streaming

A diferencia de las llamadas síncronas y asíncronas, en las que se mandan la configuración y el audio en una sola solicitud, la llamada a la API Speech en streaming requiere enviar varias solicitudes. El primer StreamingRecognizeRequest debe contener una configuración de tipo StreamingRecognitionConfig sin ningún audio. Los StreamingRecognizeRequests posteriores que se envíen a través del mismo flujo constarán de fotogramas consecutivos de bytes de audio sin procesar.

Un StreamingRecognitionConfig consta de los siguientes campos:

  • config: obligatorio. Contiene información de configuración del audio, de tipo RecognitionConfig, y es la misma que se muestra en las solicitudes síncronas y asíncronas.
  • single_utterance: (opcional, el valor predeterminado es false) indica si esta solicitud debe finalizar automáticamente cuando ya no se detecte voz. Si se define, la transcripción de voz de Cloud detectará pausas, silencios o audio que no sea voz para determinar cuándo finalizar el reconocimiento. Si no se define, la emisión seguirá escuchando y procesando audio hasta que se cierre directamente o se supere la longitud máxima de la emisión. Definir single_utterance como true es útil para procesar comandos de voz.
  • interim_results: (opcional, el valor predeterminado es false) indica que esta solicitud de flujo debe devolver resultados temporales que se pueden perfeccionar más adelante (después de procesar más audio). Los resultados provisionales se indicarán en las respuestas mediante la configuración de is_final como false.

Respuestas en streaming

Los resultados de reconocimiento de voz en streaming se devuelven en una serie de respuestas del tipo StreamingRecognitionResponse. Esta respuesta consta de los campos siguientes:

  • speechEventType contiene eventos del tipo SpeechEventType. El valor de estos eventos indicará cuándo se ha determinado que se ha completado una sola expresión. Los eventos de voz sirven como marcadores en la respuesta de tu flujo.
  • results contiene la lista de resultados, que pueden ser provisionales o finales, de tipo StreamingRecognitionResult. La lista results contiene los siguientes subcampos:
    • alternatives contiene una lista de transcripciones alternativas.
    • isFinal indica si los resultados obtenidos en esta entrada de la lista son provisionales o definitivos. Google puede devolver varios resultados isFinal=true a lo largo de una sola emisión, pero el resultado isFinal=true solo se garantiza después de que se cierre la emisión de escritura (cierre parcial).
    • stability indica la volatilidad de los resultados obtenidos hasta el momento. 0.0 indica una inestabilidad total, mientras que 1.0 indica una estabilidad total. Ten en cuenta que, a diferencia de la confianza, que estima si una transcripción es correcta, stability estima si el resultado parcial proporcionado puede cambiar. Si isFinal se define como true, stability no se definirá.