Información sobre las funciones de reconocimiento de voz

Speech-to-Text es una de las tres APIs preentrenadas de Vertex AI en Google Distributed Cloud (GDC) air-gapped. El servicio Speech-to-Text reconoce la voz en archivos de audio y transcribe el audio a texto. Speech-to-Text cumple los requisitos de residencia y cumplimiento de datos.

En la siguiente tabla se describen las funciones clave de Speech-to-Text:

Funciones clave
Transcripción Aplica algoritmos avanzados de aprendizaje profundo y redes neuronales para reconocer la voz automáticamente.
Modelos Despliega modelos de reconocimiento de menos de 1 GB que consumen poquísimos recursos.
Compatible con APIs Usa la API Speech-to-Text y sus bibliotecas de cliente para enviar audio y recibir una transcripción de texto del servicio Speech-to-Text.

Codificaciones de audio admitidas en Speech-to-Text

La API Speech-to-Text admite varias codificaciones diferentes. En la siguiente tabla se indican los códecs de audio admitidos:

Códec Nombre Sin pérdida Notas de uso
FLAC Códec de audio sin pérdida Sí Se requieren 16 bits o 24 bits para las transmisiones
LINEAR16 PCM lineal Sí Codificación de modulación por impulsos codificados (PCM) lineal de 16 bits. El encabezado debe contener la frecuencia de muestreo.
MULAW μ-ley No Codificación PCM de 8 bits
OGG_OPUS Marcos de audio codificados Opus en un contenedor Ogg No La frecuencia de muestreo debe ser de 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz, o 48000 Hz

FLAC es tanto un códec de audio como un formato de archivo de audio. Para transcribir archivos de audio con la codificación FLAC, debes proporcionarlos en el formato de archivo .FLAC, que incluye un encabezado con metadatos.

Speech-to-Text admite archivos WAV con audio codificado en LINEAR16 o MULAW.

Para obtener más información sobre los códecs de audio de Speech-to-Text, consulta la AudioEncoding documentación de referencia.

Si tienes una opción al codificar el material de origen, usa una codificación sin pérdida como FLAC o LINEAR16 para obtener un mejor reconocimiento de voz.

Funciones de Speech-to-Text

Speech-to-Text en Distributed Cloud cuenta con tres métodos para realizar el reconocimiento de voz:

  • Reconocimiento síncrono: envía datos de audio a la API Speech-to-Text, realiza el reconocimiento de esos datos y devuelve los resultados después de procesar el audio. Las solicitudes de reconocimiento síncrono se limitan a un minuto o menos de datos de audio.

  • Reconocimiento asíncrono: envía datos de audio a la API Speech-to-Text e inicia una operación de larga duración. Con esta operación, puedes sondear periódicamente los resultados del reconocimiento. Usa solicitudes asíncronas para datos de audio de cualquier duración hasta 480 minutos.

  • Reconocimiento en streaming: realiza el reconocimiento de los datos de audio proporcionados en un flujo bidireccional. 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 en streaming proporciona resultados provisionales mientras se captura el audio, lo que permite que los resultados aparezcan, por ejemplo, mientras el usuario sigue hablando.

Las solicitudes contienen parámetros de configuración y datos de audio. En las siguientes secciones se describen estas solicitudes de reconocimiento, las respuestas que generan y cómo gestionar esas respuestas con más detalle.

Solicitudes y respuestas síncronas

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

Speech-to-Text debe devolver una respuesta antes de procesar la siguiente solicitud. Por lo general, Speech-to-Text procesa el audio más rápido que en tiempo real, con una media de 30 segundos de audio en 15 segundos. En los casos en que la calidad del audio sea deficiente, la solicitud de reconocimiento puede tardar mucho más.

Solicitudes de reconocimiento de voz

Una solicitud a la API síncrona de Speech-to-Text incluye una configuración de reconocimiento de voz y datos de audio. En el siguiente ejemplo se muestra una solicitud:

{
    "config": {
        "encoding": "LINEAR16",
        "sample_rate_hertz": 16000,
        "language_code": "en-US",
    },
    "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
    }
}

Todas las solicitudes de reconocimiento síncrono de Speech-to-Text deben incluir un campo config de reconocimiento de voz de tipo RecognitionConfig. Un objeto RecognitionConfig contiene los siguientes subcampos obligatorios:

  • encoding: especifica el esquema de codificación del audio proporcionado. Este campo es de tipo AudioEncoding. Si tienes que elegir un códec, te recomendamos que uses una codificación sin pérdida como FLAC o LINEAR16 para obtener el mejor rendimiento. Para ver una lista de los formatos de codificación de audio admitidos, consulta el artículo Codificaciones de audio admitidas en Speech-to-Text. El campo encoding es opcional para los archivos FLAC y WAV, que incluyen la codificación en el encabezado del archivo.
  • sample_rate_hertz: especifica la frecuencia de muestreo del audio proporcionado en hercios. Para obtener más información sobre las frecuencias de muestreo, consulta el artículo Frecuencias de muestreo. El campo sample_rate_hertz es opcional para los archivos FLAC y WAV, que incluyen la frecuencia de muestreo en el encabezado del archivo.
  • language_code: contiene el idioma y la región que se deben usar para el reconocimiento de voz del audio proporcionado. El código de idioma debe ser un BCP-47. Los códigos de idioma constan de etiquetas de idioma principal y subetiquetas de región secundaria para indicar los dialectos. En el ejemplo, en corresponde al inglés y US a Estados Unidos. Para ver una lista de los idiomas admitidos, consulta el artículo Idiomas admitidos.

Para obtener más información y una descripción de los subcampos opcionales que puedes incluir en el config campo, consulta el artículo RecognitionConfig.

Proporciona audio a Speech-to-Text a través del audio parámetro de tipo RecognitionAudio. El campo audio contiene el siguiente subcampo:

  • content: contiene el audio que se va a evaluar, insertado en la solicitud. Los bytes de datos de audio se codifican mediante una representación binaria pura. Las representaciones JSON usan Base64. Consulta más información en el artículo Contenido de audio insertado. El audio que se pasa directamente en este campo tiene una duración máxima de un minuto.

Frecuencias de muestreo

La frecuencia de muestreo del audio se especifica en el campo sample_rate_hertz de la configuración de la solicitud y debe coincidir con la frecuencia de muestreo del contenido de audio asociado. Speech-to-Text admite frecuencias de muestreo entre 8000 Hz y 48000 Hz. Puedes especificar la frecuencia de muestreo de un archivo FLAC o WAV en el encabezado del archivo en lugar de usar el campo sample_rate_hertz. Sin embargo, el campo sample_rate_hertz es obligatorio para todos los demás formatos de audio.

Si tienes que elegir un método para codificar el material de origen, te recomendamos que captures el audio con una frecuencia de muestreo de 16.000 Hz. Los valores más bajos pueden afectar a la precisión del reconocimiento de voz, y los valores más altos no tienen ningún efecto apreciable en la calidad del reconocimiento de voz.

Sin embargo, si has grabado los datos de audio con una frecuencia de muestreo distinta de 16.000 Hz, no vuelvas a muestrear el audio a 16.000 Hz. Por ejemplo, la mayoría del audio de telefonía heredado usa frecuencias de muestreo de 8000 Hz, lo que puede dar lugar a resultados menos precisos. Si debes usar ese audio, proporciónalo a la API Speech-to-Text con su frecuencia de muestreo original.

Idiomas

El motor de reconocimiento de Speech-to-Text admite una gran variedad de idiomas y dialectos. El idioma (y el dialecto nacional o regional) del audio se especifica en el campo language_code de la configuración de la solicitud mediante un BCP-47.

En la página Idiomas admitidos se incluye una lista completa de los idiomas admitidos en cada función.

Selección de modelos

Cuando envías una solicitud de transcripción de audio a Speech-to-Text, puedes procesar los archivos de audio con un modelo de aprendizaje automático entrenado para reconocer el audio de voz de ese tipo de fuente en concreto.

Para especificar un modelo de reconocimiento de voz, incluye el campo model en el RecognitionConfig objeto de la solicitud y especifica el modelo que quieras usar.

Speech-to-Text en Distributed Cloud admite el siguiente modelo:

  • default: transcribe el audio que no sea de un modelo de audio específico, como el audio de larga duración.

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 proporcionado como contenido en una solicitud REST, ese audio debe ser compatible con la serialización JSON.

Solo puedes enviar datos directamente en el campo content para el reconocimiento síncrono si los datos de audio tienen un máximo de 60 segundos y 10 MB. Todos los datos de audio del campo content deben estar en formato Base64.

Cuando creas una solicitud con una biblioteca de cliente, escribes estos datos binarios o codificados en Base64 directamente en el content campo.

La mayoría de los entornos de desarrollo incluyen una utilidad base64 para codificar un archivo binario en datos de texto ASCII, lo que te proporciona las herramientas y la asistencia necesarias. Además, Python tiene mecanismos integrados para codificar contenido en Base64. En los siguientes ejemplos se muestra cómo codificar un archivo:

Linux

Codifica el archivo con la herramienta de línea de comandos base64. Para evitar el ajuste de línea, usa la marca -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

En Python, codifica los archivos de audio en Base64 de la siguiente manera:

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Respuestas de reconocimiento de voz

Una respuesta síncrona de la API Speech-to-Text puede tardar un tiempo en devolver los resultados. Una vez procesada, la API devuelve una respuesta como en el siguiente ejemplo:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
        }
      ]
    }
  ]
}

Todas las respuestas de reconocimiento síncrono de la API Speech-to-Text incluyen resultados de reconocimiento de voz de tipo RecognizeResponse. Un objeto RecognizeResponse contiene los siguientes campos:

  • results: contiene la lista de resultados de tipo SpeechRecognitionResult, donde cada resultado corresponde a un segmento de audio. Cada resultado consta de uno o varios de los siguientes subcampos:

    • alternatives: contiene una lista de posibles transcripciones de tipo SpeechRecognitionAlternative. La primera alternativa de la respuesta siempre es la más probable. Cada alternativa consta de los siguientes subcampos:

      • transcript: contiene el texto transcrito. Si se proporcionan alternativas secuenciales, puedes concatenar estas transcripciones.
      • words: contiene una lista de información específica de cada palabra reconocida.

Para obtener más información, consulta el artículo RecognizeResponse.

Solicitudes y respuestas asíncronas

Una solicitud asíncrona de la API Speech-to-Text tiene la misma forma que una solicitud síncrona. Sin embargo, en lugar de devolver una respuesta, la solicitud asíncrona inicia una operación de larga duración y devuelve esta operación inmediatamente. Puedes usar el reconocimiento de voz asíncrono con audio de cualquier duración hasta 480 minutos.

A continuación, se muestra un ejemplo de respuesta de operación:

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

Ten en cuenta que los resultados aún no están presentes. Speech-to-Text sigue procesando el audio y usa esta operación para almacenar los resultados. Los resultados aparecen en el campo response de la operación devuelta cuando se completa la solicitud LongRunningRecognize.

A continuación, se muestra un ejemplo de 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_v1p1beta1.LongRunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "transcript": "how old is the Brooklyn Bridge",
        "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
      }]}]
  },
  "done": True
}

Ten en cuenta que done se establece en True y que la response de la operación contiene un conjunto de resultados de tipo SpeechRecognitionResult, el mismo tipo que devuelve una solicitud de reconocimiento síncrono.

Solicitudes y respuestas de streaming

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

Solicitudes de reconocimiento en streaming

A diferencia de las llamadas síncronas y asíncronas, en las que se envían tanto la configuración como el audio en una sola solicitud, para llamar a la API Speech-to-Text en streaming es necesario enviar varias solicitudes. La primera StreamingRecognizeRequest debe contener una configuración de tipo StreamingRecognitionConfig.

Una StreamingRecognitionConfig consta del campo config, que contiene información de configuración del audio de tipo RecognitionConfig y es el mismo que se muestra en las solicitudes síncronas y asíncronas.

Respuestas de reconocimiento en streaming

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

  • speech_event_type: contiene eventos de tipo SpeechEventType. El valor de estos eventos indica cuándo se ha completado una sola emisión. Los eventos de voz sirven como marcadores en la respuesta de tu flujo.
  • results: contiene la lista de resultados, que pueden ser resultados provisionales o finales resultados de tipo StreamingRecognitionResult. La lista results incluye los siguientes subcampos:
    • alternatives: contiene una lista de transcripciones alternativas.
    • is_final: indica si los resultados obtenidos en esta entrada de la lista son provisionales o finales.
    • result_end_time: indica la compensación horaria del final de este resultado con respecto al principio del audio.