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 tipoAudioEncoding. Si tienes que elegir un códec, te recomendamos que uses una codificación sin pérdida comoFLACoLINEAR16para 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 campoencodinges opcional para los archivosFLACyWAV, 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 camposample_rate_hertzes opcional para los archivosFLACyWAV, 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,encorresponde al inglés yUSa 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 tipoSpeechRecognitionResult, 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 tipoSpeechRecognitionAlternative. 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 tipoSpeechEventType. 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 tipoStreamingRecognitionResult. La listaresultsincluye 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.