Descripción general de Cloud Speech-to-Text

Este documento es una guía de los conceptos básicos del uso de Cloud Speech-to-Text. En esta guía conceptual, se abordan los tipos de solicitudes que puedes realizar a Cloud STT, cómo crearlas y cómo manejar sus respuestas. Recomendamos que todos los usuarios de Cloud STT lean esta guía y uno de los instructivos asociados antes de empezar a usar la API.

Pruébalo por tu cuenta

Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de Cloud STT en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar e implementar cargas de trabajo.

Probar Cloud STT gratis

Solicitudes de voz

Cloud STT dispone de 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 de Cloud Speech-to-Text, realiza el reconocimiento de esos datos y devuelve los resultados luego de procesar todo el audio. Las solicitudes de reconocimiento síncrono están limitadas a datos de audio de 1 minuto o menos de duración.

  • El reconocimiento asíncrono (REST y gRPC) envía los datos de audio a la API de Cloud Speech-to-Text y, también, inicia una operación de larga duración. Esta operación te permite sondear periódicamente los resultados del reconocimiento. Usa las solicitudes asíncronas para datos de audio de cualquier duración, con un máximo de 480 minutos.

  • El reconocimiento de transmisión (solo en gRPC) realiza el reconocimiento de los datos de audio proporcionados dentro de una transmisión bidireccional de gRPC. Las solicitudes de transmisión continua están diseñadas para fines de reconocimiento en tiempo real, como la captura de audio en vivo de un micrófono. El reconocimiento de transmisión continua proporciona resultados provisorios mientras se captura el audio, lo que permite que el resultado aparezca, por ejemplo, mientras un usuario aún está hablando.

Las solicitudes contienen parámetros de configuración, así como datos de audio. En las secciones siguientes, se describe con más detalle este tipo de solicitudes de reconocimiento, las respuestas que generan y cómo se manejan.

Reconocimiento de la API de Cloud Speech-to-Text

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

La solicitud síncrona implica un bloqueo, lo que significa que Cloud STT debe devolver una respuesta antes de procesar la solicitud siguiente. En general, Cloud STT procesa audio más rápido que en tiempo real; en promedio, procesa 30 segundos de audio en 15 segundos. En el caso de audios de mala calidad, la solicitud de reconocimiento puede tardar mucho más tiempo.

Solicitudes de reconocimiento de voz síncronas

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

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

Todas las solicitudes de reconocimiento síncrono de la API de Cloud Speech-to-Text deben incluir un campo config de reconocimiento de voz (de tipo RecognitionConfig). Una RecognitionConfig contiene los subcampos que se indican a continuación:

  • encoding: Obligatorio. Especifica el esquema de codificación del audio suministrado (del tipo AudioEncoding). Si puedes elegir el códec, se recomienda usar una codificación sin pérdida, como FLAC o LINEAR16, para lograr el mejor rendimiento. (Para obtener más información, consulta Codificaciones de audio). El campo encoding es opcional para archivos FLAC y WAV en los que la codificación se incluye en el encabezado del archivo.
  • sampleRateHertz: Obligatorio. Especifica la tasa de muestreo (en hercios) del audio suministrado. (Para obtener más información sobre las tasas de muestreo, consulta Tasas de muestreo a continuación). El campo sampleRateHertz es opcional para los archivos FLAC y WAV en los que la tasa de muestreo se incluye en el encabezado del archivo.
  • languageCode: Obligatorio. Contiene el idioma más la región o la configuración regional que se 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 consistir en etiquetas del idioma principal y subetiquetas de la región secundaria que indican los dialectos (por ejemplo, “en” para inglés y “US” para Estados Unidos en el ejemplo anterior). (Para obtener una lista de los idiomas admitidos, consulta Idiomas compatibles).
  • maxAlternatives: Opcional; el valor predeterminado es 1. Indica la cantidad de transcripciones alternativas que se deben proporcionar en la respuesta. De forma predeterminada, la API de Cloud Speech-to-Text proporciona una transcripción principal. Si quieres evaluar diferentes alternativas, establece maxAlternatives en un valor más alto. Ten en cuenta que Cloud STT solo devolverá alternativas si el reconocedor determina que estas son de una calidad suficiente. En general, las alternativas son más adecuadas para las solicitudes en tiempo real que requieren comentarios de los usuarios (por ejemplo, comandos por voz) y, por lo tanto, son más adecuadas para las solicitudes de reconocimiento de transmisión.
  • profanityFilter: Opcional. Indica si se deben filtrar palabras o frases obscenas. Las palabras filtradas contendrán su primera letra y asteriscos para los caracteres restantes (p. ej., m*****). El filtro de lenguaje obsceno funciona para palabras sueltas; no detecta frases ni combinaciones de palabras de voz ofensiva o abusiva.
  • speechContext: Opcional. Contiene información contextual adicional para procesar este audio. Un contexto contiene el subcampo siguiente:
    • boost: Contiene un valor que asigna una ponderación para reconocer una palabra o frase determinada.
    • phrases: Contiene una lista de palabras y frases que proporcionan sugerencias para la tarea de reconocimiento de voz. Para conocer más, consulta la información sobre adaptación de voz.

El audio se suministra a Cloud STT a través del parámetro audio del tipo RecognitionAudio. El campo audio contiene cualquiera de los subcampos que se indican a continuación:

  • content contiene el audio que se evaluará, incorporado en la solicitud. Consulta Incorpora contenido de audio para obtener más información. El audio que se pasa directamente por este campo tiene un límite de 1 minuto de duración.
  • uri contiene un URI que apunta al contenido del audio. El archivo no debe estar comprimido (por ejemplo, en formato gzip). Este campo debe contener un URI de Cloud Storage (con el formato gs://bucket-name/path_to_audio_file). Consulta Pasa audio cuya referencia es un URI.

Tasas de muestreo

La tasa de muestreo del audio se especifica en el campo sampleRateHertz de la configuración de la solicitud, que debe coincidir con la tasa de muestreo de la transmisión o del contenido de audio asociados. Las tasas de muestreo entre 8,000 Hz y 48,000 Hz son compatibles con Cloud STT. Puedes especificar la tasa de muestreo para un archivo FLAC o WAV en su encabezado, en lugar de usar el campo sampleRateHertz. Un archivo FLAC debe contener la tasa de muestreo en el encabezado FLAC para poder enviarlo a la API de Speech-to-Text.

Si tienes la opción de elegir la tasa de muestreo durante la codificación del material de origen, captura audio con una tasa de muestreo de 16,000 Hz. Los valores más bajos pueden afectar la exactitud del reconocimiento de voz, y los niveles más altos no tienen un efecto apreciable en la calidad del reconocimiento.

Sin embargo, si los datos de audio ya se grabaron con una tasa de muestreo existente que no es de 16,000 Hz, no realices un nuevo muestreo a 16,000 Hz. La mayoría del audio de telefonía heredado, por ejemplo, usa tasas de muestreo de 8,000 Hz, lo que puede dar resultados menos exactos. Si debes usar ese audio, proporciónaselo a la API de Speech-to-Text a su tasa de muestreo original.

Idiomas

El motor de reconocimiento de Cloud STT admite una variedad de idiomas y dialectos. El idioma (y el dialecto nacional o regional) de tu audio debes especificarlo dentro del campo languageCode de la configuración de la solicitud, con un identificador BCP-47.

En la página Idiomas compatibles, encontrarás una lista completa de los idiomas que admite cada función.

Compensaciones de tiempo (marcas de tiempo)

Cloud STT puede incluir valores de compensación de tiempo (marcas de tiempo) para el inicio y el final de cada palabra enunciada que se reconoce en el audio suministrado. Un valor de compensación de tiempo representa la cantidad de tiempo que transcurrió desde el comienzo del audio en incrementos de 100 ms.

Las compensaciones horarias son especialmente útiles para analizar archivos de audio más largos, en los que es posible que necesites buscar una palabra en particular en el texto reconocido y ubicarla (buscarla) en el audio original. Las compensaciones horarias son compatibles con todos nuestros métodos de reconocimiento: recognize, streamingrecognize y longrunningrecognize.

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

Para incluir compensaciones de tiempo en los resultados de tu solicitud, establece el parámetro enableWordTimeOffsets en verdadero en la configuración de la solicitud. Para ver ejemplos que usan la API de REST o las Bibliotecas cliente, consulta Usa compensaciones horarias (marcas de tiempo). Por ejemplo, puedes incluir el parámetro enableWordTimeOffsets en la configuración de la solicitud, como se muestra aquí:

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

El resultado que devuelve la API de Cloud Speech-to-Text contendrá valores de compensación 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,
          }
        ]
      }
    ]
  }
}

Elección del modelo

Cloud STT puede usar uno de varios modelos de aprendizaje automático para transcribir archivos de audio. Google entrenó 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. Esto permite que la API de Cloud Speech-to-Text procese los archivos de audio con un modelo entrenado de aprendizaje automático para reconocer audios de voz de ese tipo particular de fuente.

Para especificar un modelo destinado al reconocimiento de voz, incluye el campo model en el objeto RecognitionConfig de tu solicitud, especificando el modelo que quieres usar.

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

Contenido de audio incorporado

El audio incorporado se incluye en la solicitud de reconocimiento de voz cuando se pasa un parámetro content por el campo audio de la solicitud. En el caso del audio incorporado que se proporciona como contenido dentro de una solicitud de gRPC, ese audio debe ser compatible con la serialización Proto3 y se debe proporcionar como datos binarios. El audio incorporado que se proporciona como contenido dentro de una solicitud de REST debe ser compatible con la serialización JSON y, primero, se debe codificar en Base64. Para obtener más información, consulta Codifica tu audio en Base64.

Cuando crees una solicitud con una biblioteca cliente de Google Cloud, por lo general, deberás escribir estos datos de objeto binario (o codificados en Base64) directamente en el campo content.

Pasa audio cuya referencia es un URI

Con más frecuencia, pasarás un parámetro uri por el campo audio de la solicitud de Speech-to-Text y apuntarás a un archivo de audio (en formato binario, no Base64) ubicado en Cloud Storage con el formato siguiente:

gs://bucket-name/path_to_audio_file

Por ejemplo, la parte siguiente de una solicitud de Speech-to-Text hace referencia al archivo de audio de muestra que se usó en la guía de 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 que se indican a continuación:

  • Legible públicamente (como los archivos de audio de muestra)
  • Legible por tu cuenta de servicio si usas la autorización de la cuenta de servicio
  • Legible por una cuenta de usuario si usas OAuth de 3 segmentos para la autorización de la cuenta de usuario

Para obtener más información sobre la administración del acceso a Cloud Storage, consulta Crea y administra Listas de control de acceso en la documentación de Cloud Storage.

Respuestas de la API de Cloud Speech-to-Text

Como se indicó antes, una respuesta síncrona de la API de Cloud Speech-to-Text puede tardar un algo de tiempo en devolver resultados de manera proporcional a la duración del audio proporcionado. Una vez procesado el audio, 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 (del tipo SpeechRecognitionResult) en la que cada uno corresponde a un segmento de audio (los segmentos de audio están separados por pausas). Cada resultado constará de uno o más de los siguientes campos:
    • alternatives contiene una lista de las transcripciones posibles del tipo SpeechRecognitionAlternatives. La aparición de más de una alternativa depende de si solicitaste más de una (estableciendo maxAlternatives en un valor mayor que 1) y de si Cloud STT produjo alternativas de una calidad lo suficientemente alta. Cada alternativa constará de los campos que se indican a continuación:

Los componentes de esta respuesta se explican en las secciones que se indican a continuación.

Elige alternativas

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

Establecer maxAlternatives en un valor mayor que 1 no implica ni garantiza que se devolverán varias alternativas. En general, tener más de una alternativa es más apropiado para proporcionar opciones en tiempo real a los usuarios que obtienen los resultados a través de una solicitud de reconocimiento de transmisión.

Maneja las transcripciones

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

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

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 confidence es una estimación entre 0.0 y 1.0. Esta se calcula agregando los valores de "probabilidad" asignados a cada palabra en el audio. Un número más alto indica una mayor probabilidad estimada de que las palabras individuales reconocidas sean correctas. Por lo general, este campo está destinado a las principales hipótesis y solo se proporciona para los resultados en los que sucede lo siguiente: is_final=true. Por ejemplo, puedes usar el valor de confidence para decidir si deseas mostrar resultados alternativos al usuario o pedir la confirmación del usuario.

Sin embargo, ten en cuenta que el modelo determina el "mejor" resultado en función de más señales que la puntuación confidence sola (como el contexto de la oración). Debido a esto, hay casos ocasionales en los que el resultado superior no tiene la puntuación de confianza más alta. Si no solicitaste múltiples resultados alternativos, el "mejor" resultado mostrado puede tener un valor de confianza menor al previsto. Por ejemplo, esto puede ocurrir en casos en que se usan palabras raras. A una palabra que se usa con poca frecuencia se le puede asignar un valor bajo de "probabilidad", incluso si se reconoce correctamente. Si el modelo determina que la palabra infrecuente 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 menor que las alternativas.

Solicitudes y respuestas asíncronas

Una solicitud asíncrona de la API de Cloud Speech-to-Text enviada al método LongRunningRecognize es idéntica a una solicitud síncrona enviada a la API de Cloud Speech-to-Text. Sin embargo, en lugar de devolver una respuesta, la solicitud asíncrona iniciará una operación de larga duración (del tipo Operación) y se la devolverá al destinatario de inmediato. Puedes usar el reconocimiento de voz asíncrono con audio de cualquier duración con un máximo de 480 minutos.

Por ejemplo, como se indica a continuación:

{
  "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"
  }
}

Ten en cuenta que aún no hay resultados. Cloud STT continuará procesando el audio y usará esta operación para almacenar los resultados. Los resultados aparecerán en el campo response de la operación que se devuelve cuando se completa la solicitud LongRunningRecognize.

A continuación, se muestra un ejemplo de una respuesta completa una vez que finaliza 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 estableció en True y que la response de la operación contiene un conjunto de resultados del tipo SpeechRecognitionResult, que es el mismo tipo que devuelve una solicitud de reconocimiento síncrono de la API de Cloud Speech-to-Text.

Solicitudes de reconocimiento de transmisión de la API de Cloud Speech-to-Text

Una llamada de reconocimiento de transmisión a la API de Cloud Speech-to-Text está diseñada para la captura y el reconocimiento de audio en tiempo real, dentro de una transmisión bidireccional. Tu aplicación puede enviar audio en la transmisión de la solicitud y recibir resultados de reconocimiento provisorios y finales en tiempo real en la transmisión de la respuesta. Los resultados intermedios representan el resultado del reconocimiento actual correspondiente a una sección de audio, mientras que el resultado del reconocimiento final representa la última y mejor interpretación de esa sección de audio.

Solicitudes de transmisión continua

A diferencia de las llamadas síncronas y asíncronas, en las que envías la configuración y el audio en una misma solicitud, llamar a la API de Speech-to-Text de transmisión requiere el envío de varias solicitudes. El primer elemento StreamingRecognizeRequest debe contener una configuración del tipo StreamingRecognitionConfig sin audio que lo acompañe. Los elementos StreamingRecognizeRequest subsiguientes enviados en la misma transmisión continua consistirán en marcos consecutivos de bytes de audio sin procesar.

Una StreamingRecognitionConfig consta de los campos que se indican a continuación:

  • config: Obligatorio. Contiene datos sobre la configuración del audio, del tipo RecognitionConfig, y es igual al que se muestra en las solicitudes síncronas y asíncronas.
  • single_utterance: Indica si esta solicitud debe finalizar automáticamente después de que ya no se detecte la voz (opcional; el valor predeterminado es false). Si se configura, Cloud STT detectará pausas, silencios o audio sin voz para determinar cuándo debe finalizar el reconocimiento. Si no se configura, la transmisión continuará escuchando y procesando audio hasta que esta se cierre directamente o exceda la longitud límite. Establecer single_utterance en true es útil para procesar comandos por voz.
  • interim_results: Indica que esta solicitud de transmisión debe devolver resultados temporales que pueden definirse mejor más adelante (después de procesar más audio) (opcional; el valor predeterminado es false). Los resultados provisorios se anotarán en las respuestas estableciendo is_final en false.

Respuestas de transmisión

Los resultados del reconocimiento de voz de transmisión continua se muestran en una serie de respuestas del tipo StreamingRecognitionResponse. Esta respuesta consta de los campos que se indican a continuación:

  • speechEventType contiene eventos de tipo SpeechEventType. El valor de estos eventos indicará el momento en que se haya determinado que se completó una declaración. Los eventos de voz sirven como marcadores en la respuesta de la transmisión.
  • results contiene la lista de resultados, que pueden ser provisorios o finales, del 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 lista son provisionales o finales. Google puede devolver varios resultados isFinal=true en una sola transmisión, pero el resultado isFinal=true solo está garantizado después de que se cierra la transmisión de escritura (medio cierre).
    • El valor stability indica la volatilidad de los resultados obtenidos hasta el momento. El valor 0.0 indica una inestabilidad completa; 1.0, una estabilidad completa. Ten en cuenta que, a diferencia de la confianza, que estima si una transcripción es correcta, stability estima si el resultado parcial dado puede cambiar. Si isFinal está establecido en true, stability no se establecerá.