Información sobre las funciones de reconocimiento de voz

Transcripción de voz es una de las tres APIs preentrenadas de Vertex AI en el dispositivo air-gapped de Google Distributed Cloud (GDC). El servicio Speech-to-Text reconoce la voz en archivos de audio y transcribe el audio en texto. Speech-to-Text cumple los requisitos de residencia y cumplimiento de los 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 y 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 varios tipos de codificación. 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 Se requieren 16 bits o 24 bits para las transmisiones
LINEAR16 PCM lineal Codificación 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 formato .FLAC, que incluye un encabezado con metadatos.

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

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 el dispositivo con air gap de GDC cuenta con los tres métodos siguientes 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íncronas 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 se han diseñado para el reconocimiento en tiempo real, como la captura de audio en directo de un micrófono. El reconocimiento de 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 secciones siguientes 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 reconocer 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. Puedes transcribir hasta siete minutos de audio por minuto, lo que equivale a siete segundos de audio transcrito por segundo en cada unidad de electrodoméstico. En los casos en los que la calidad del audio sea mala, la solicitud de reconocimiento puede tardar mucho más.

Solicitudes de reconocimiento de voz

Una solicitud síncrona de la API Speech-to-Text consta de 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íncronas 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 puedes elegir un códec, te recomendamos que uses una codificación sin pérdidas, como FLAC o LINEAR16, para obtener el mejor rendimiento. Para ver una lista de los formatos de codificación de audio admitidos, consulta Codificaciones de audio admitidas para 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 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 van a usar para el reconocimiento de voz del audio proporcionado. El código de idioma debe ser un identificador BCP-47. Los códigos de idioma se componen de etiquetas de idioma principales y subetiquetas de región secundarias para indicar dialectos. En el ejemplo, en es el código del inglés y US es el de Estados Unidos. Para ver una lista de los idiomas admitidos, consulta Idiomas admitidos.

Proporciona audio a Speech-to-Text a través del parámetro audio 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 sobre el contenido de audio insertado. El audio que se transmite 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 y 48.000 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 la opción de elegir al codificar el material de origen, captura 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 más altos no tienen ningún efecto apreciable en la calidad del reconocimiento de voz.

Sin embargo, si has grabado tus datos de audio con una frecuencia de muestreo distinta a 16.000 Hz, no cambies la frecuencia de muestreo 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-to-Text con su frecuencia de muestreo original.

Idiomas

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

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

Selección de modelos

Cuando envías una solicitud de transcripción de audio a Speech-to-Text, puedes 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. La función de conversión de voz a texto en el dispositivo aislado de GDC solo admite el modelo default.

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 REST, este debe ser compatible con la serialización JSON.

Solo puedes enviar datos directamente en el campo content para el reconocimiento síncrono si tus datos de audio tienen una duración máxima de 60 segundos y un tamaño máximo de 10 MB. 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 campo content.

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 que el texto se ajuste a la 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 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. Cuando se te proporcionen alternativas secuenciales, puedes concatenar estas transcripciones.
      • words: contiene una lista de información específica de cada palabra reconocida.

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 disponibles. 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 completada 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 ha definido como True y que response de la operación contiene un conjunto de resultados de tipo SpeechRecognitionResult, el mismo tipo que devuelve una solicitud de reconocimiento síncrona.

Solicitudes y respuestas de streaming

Una llamada de reconocimiento de la API Streaming Speech-to-Text se ha diseñado para capturar y reconocer audio en tiempo real en un flujo bidireccional. Tu aplicación puede enviar audio en el flujo de solicitudes y recibir resultados de reconocimiento provisionales y finales en tiempo real en el flujo de respuestas. 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 Streaming Speech-to-Text es necesario enviar varias solicitudes. El primer elemento StreamingRecognizeRequest debe contener una configuración de tipo StreamingRecognitionConfig.

Un 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 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 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 definitivos.
    • result_end_time: indica el desfase temporal del final de este resultado en relación con el inicio del audio.