Este documento es una guía sobre los aspectos básicos del uso de Speech-to-Text. En esta guía conceptual se describen los tipos de solicitudes que puedes enviar a Speech-to-Text, cómo crearlas y cómo gestionar sus respuestas. Recomendamos que todos los usuarios de Speech-to-Text 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 Speech-to-Text en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.
Probar Speech-to-Text gratisSolicitudes de voz
Speech-to-Text cuenta con tres métodos principales para realizar el reconocimiento de voz. Son los siguientes:
Reconocimiento síncrono: (REST y gRPC) envía datos de audio a la API Speech-to-Text, reconoce esos datos y devuelve los resultados una vez que se ha procesado todo el audio. Las solicitudes de reconocimiento síncronas se limitan a datos de audio de 1 minuto o menos.
El reconocimiento asíncrono (REST y gRPC) 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 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 Speech-to-Text
Una solicitud de reconocimiento síncrono de la API 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 1 minuto de datos de audio de voz enviados en una solicitud síncrona. Una vez que la función de voz a texto procesa y reconoce todo el audio, devuelve una respuesta.
Una solicitud síncrona es de bloqueo, lo que significa que Speech-to-Text debe devolver una respuesta antes de procesar la siguiente solicitud. Speech-to-Text suele procesar 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.
Speech-to-Text tiene métodos REST y gRPC para llamar a las solicitudes síncronas y asíncronas de la API Speech-to-Text. En este artículo se muestra la API REST porque es más sencillo mostrar y explicar el uso básico de la API. Sin embargo, la estructura básica de una solicitud REST o gRPC es bastante similar. Las solicitudes de reconocimiento en streaming solo se pueden procesar con gRPC.
Solicitudes de reconocimiento de voz síncronas
Una solicitud síncrona de la API Speech-to-Text consta de una configuración de reconocimiento de voz y datos de audio. Esta es una solicitud de 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 Speech-to-Text deben incluir un campo de reconocimiento de voz config
(de tipo RecognitionConfig). Un RecognitionConfig
contiene los siguientes subcampos:
encoding
: (obligatorio) especifica el esquema de codificación del audio proporcionado (de tipoAudioEncoding
). Si puedes elegir el códec, te recomendamos que uses una codificación sin pérdida, comoFLAC
oLINEAR16
, para obtener el mejor rendimiento. Para obtener más información, consulta Codificaciones de audio. El campoencoding
es opcional para los archivosFLAC
yWAV
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 camposampleRateHertz
es opcional en los archivosFLAC
yWAV
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 es1
) indica el número de transcripciones alternativas que se deben proporcionar en la respuesta. De forma predeterminada, la API Speech-to-Text proporciona una transcripción principal. Si quieres evaluar diferentes alternativas, asigna un valor más alto amaxAlternatives
. Ten en cuenta que Speech-to-Text solo devolverá alternativas si el reconocedor determina que las alternativas son de calidad suficiente. En general, las alternativas son más adecuadas para las solicitudes en tiempo real que requieren comentarios de los usuarios (por ejemplo, los comandos de voz) y, por lo tanto, son más adecuadas para las solicitudes de reconocimiento de streaming.profanityFilter
: (opcional) indica si se deben excluir 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 el lenguaje ofensivo o inapropiado que sea una frase o una combinación de palabras.speechContext
: (opcional) contiene información contextual adicional para procesar el 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 sugerencias para 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 Speech-to-Text 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 la sección Insertar contenido de audio más abajo para obtener más información. 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). Actualmente, este campo debe contener un URI de Google Cloud Storage (con el formatogs://bucket-name/path_to_audio_file
). Consulta la sección Enviar una referencia de audio mediante un URI más abajo.
En las siguientes secciones se explican con más detalle estos parámetros de solicitud y respuesta.
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. Speech-to-Text admite frecuencias de muestreo entre 8000 y 48.000 Hz. Puede especificar la frecuencia de muestreo de un archivo FLAC
o WAV
en el encabezado del archivo en lugar de usar el campo sampleRateHertz
.
Un archivo FLAC
debe contener la frecuencia de muestreo en el encabezado FLAC
para poder enviarse a la API Speech-to-Text.
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 ya se han grabado los datos de audio con una frecuencia distinta, no vuelvas a realizar el muestreo del audio a 16.000 Hz. La mayoría de los audios telefónicos antiguos, por ejemplo, utilizan frecuencias de muestreo de 8000 Hz, de modo que los resultados pueden ser menos precisos. Si te ves obligado a utilizar dicho audio, proporciónalo a la API Speech con su frecuencia de muestreo nativa.
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 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)
Speech-to-Text 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 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
La API Speech-to-Text 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 Speech-to-Text, puedes mejorar los resultados que recibes especificando la fuente del audio original. De esta forma, la API 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 Speech-to-Text 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
.
Transferir audio referenciado por un URI
Lo más habitual es que envíe un parámetro uri
en el campo audio
de la solicitud de Speech, que apunta a un archivo de audio (en formato binario, no en base64) ubicado en Google 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 Google 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.
Encontrarás más información sobre la administración del acceso a Google Cloud Storage en la sección sobre cómo crear y administrar listas de control de acceso en la documentación de Google Cloud Storage.
Respuestas de la API Speech-to-Text
Como se ha indicado anteriormente, una respuesta síncrona de la API Speech-to-Text puede tardar un tiempo en devolver los resultados, proporcional a la duración del audio proporcionado. Una vez procesado, la API devolverá una respuesta como la siguiente:
{ "results": [ { "alternatives": [ { "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" } ] } ] }
A continuación se explican estos campos:
results
contiene la lista de resultados (de tipoSpeechRecognitionResult
), donde cada resultado corresponde a un segmento de audio (los segmentos de audio se separan por pausas). Cada resultado constará de uno o varios de los siguientes campos:alternatives
contiene una lista de posibles transcripciones de tipoSpeechRecognitionAlternatives
. Que aparezca más de una alternativa depende de si has solicitado más de una (asignando amaxAlternatives
un valor superior a1
) y de si Speech-to-Text ha generado alternativas de una calidad lo suficientemente alta. Cada alternativa constará de los siguientes campos:transcript
contiene el texto transcrito. Consulta la sección Gestionar transcripciones más abajo.confidence
contiene un valor entre 0 y 1 que indica el grado de confianza de Speech-to-Text en la transcripción dada. Consulta la sección Interpretar los valores de confianza más abajo.
Si no se puede reconocer ninguna parte del audio proporcionado, la lista results
devuelta no contendrá ningún elemento.
Normalmente, el sistema falla en el reconocimiento cuando la calidad del audio es muy deficiente o cuando el código de idioma, la codificación o los valores de frecuencia de muestreo no coinciden con los del audio proporcionado.
Los componentes de esta respuesta se explican en las secciones siguientes.
Cada respuesta síncrona de la API Speech-to-Text devuelve una lista de resultados, en lugar de un único resultado que contenga todo el audio reconocido. La lista de audio reconocido (dentro de los elementos transcript
) aparecerá en orden contiguo.
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 Speech-to-Text determina que una alternativa tiene un valor de confianza suficiente, se incluye en la respuesta. La primer alternativa mostrada en la respuesta es siempre la mejor, es decir, la más probable.
Si se asigna a maxAlternatives
un valor superior a 1
, no se implica ni se garantiza que se devuelvan varias alternativas. Por lo general, es más adecuado ofrecer más de una alternativa para proporcionar opciones en tiempo real a los usuarios que obtienen resultados a través de una Streaming Recognition Request.
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 clasificado en función de más señales que 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 en función del 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 Speech-to-Text al método LongRunningRecognize tiene la misma forma que una solicitud síncrona de la API 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.
Esta es una respuesta de operación normal:
{ "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. Speech-to-Text 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
.
A continuación, puedes ver una respuesta completa después de la finalización de 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
contiene un conjunto de resultados de tipo
SpeechRecognitionResult
que es el mismo tipo que devuelve una solicitud de reconocimiento síncrona de la API Speech-to-Text.
De forma predeterminada, una respuesta REST asíncrona asignará el valor False
a done
, que es su valor predeterminado. Sin embargo, como JSON no requiere que los valores predeterminados estén presentes en un campo, al probar si una operación se ha completado, debes comprobar que el campo done
esté presente y que tenga el valor True
.
Solicitudes de reconocimiento de la API Streaming Speech-to-Text
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 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 StreamingRecognizeRequest
s 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 esfalse
) indica si esta solicitud debe finalizar automáticamente cuando ya no se detecte voz. Si se define, la función de voz a texto 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. Definirsingle_utterance
comotrue
es útil para procesar comandos de voz.interim_results
: indica que esta solicitud de streaming debe devolver resultados temporales que se pueden refinar más adelante (después de procesar más audio). Es opcional y el valor predeterminado esfalse
. Los resultados provisionales se indicarán en las respuestas mediante la configuración deis_final
comofalse
.
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 listaresults
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 resultadosisFinal=true
a lo largo de una sola emisión, pero el resultadoisFinal=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 que1.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. SiisFinal
se define comotrue
,stability
no se definirá.