Obtén información sobre los pasos para solucionar problemas que pueden servirte si tienes dificultades con Cloud Speech-to-Text.
No se puede realizar la autenticación en Cloud STT
Es posible que recibas un mensaje de error que indica que tus credenciales predeterminadas de la aplicación no están disponibles. O, tal vez, te preguntes cómo obtener una clave de API para usar cuando llames a Cloud STT.
Cloud STT usa credenciales predeterminadas de la aplicación (ADC) para la autenticación.
Las credenciales para ADC deben estar disponibles en el contexto en que llamas a la API de Cloud Speech-to-Text. Por ejemplo, si configuras ADC en tu terminal, pero ejecutas el código en el depurador del IDE, el contexto de ejecución del código podría no tener acceso a las credenciales. En ese caso, tu solicitud a Cloud STT podría fallar.
Para obtener más información sobre cómo proporcionar credenciales a ADC, consulta Configura credenciales predeterminadas de la aplicación.
Cloud STT devuelve una respuesta vacía
Existen varios motivos por los que Cloud STT podría devolver una respuesta
vacía. El origen del problema puede ser RecognitionConfig o el audio
en sí.
Soluciona problemas de RecognitionConfig
El objeto RecognitionConfig (o StreamingRecognitionConfig) es parte de una
solicitud de reconocimiento de Cloud STT. Para realizar una transcripción de forma correcta, establece los campos que se incluyen en las siguientes categorías principales:
- Configuración de audio
- Idioma y modelo
Una causa común de las respuestas vacías, como una respuesta JSON {} vacía, es brindar información incorrecta sobre los metadatos
de audio. Si los campos de configuración de audio no están establecidos de forma correcta,
es probable que la transcripción falle y el modelo de reconocimiento devuelva resultados vacíos.
La configuración de audio contiene los metadatos del audio proporcionado. Puedes obtener
los metadatos para el archivo de audio con el comando ffprobe, que forma parte
de FFMPEG.
En el siguiente ejemplo, se muestra el uso del comando para obtener los metadatos de esta muestra de voz.
$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
Duration: 00:00:35.75, bitrate: 128 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s
El archivo tiene claramente 8,000 Hz, un canal y codificación LINEAR16 (s16), y puedes usar esta información en tu RecognitionConfig.
Soluciona problemas relacionados con la codificación
Sigue estos pasos para resolver otros posibles motivos de una respuesta vacía:
Reproduce el archivo y escucha el sonido de salida. ¿El audio es claro y la voz inteligible?
Para reproducir archivos, puedes usar el comando
playde SoX (Sound eXchange). A continuación, se muestran algunos ejemplos basados en diferentes codificaciones de audio.Los archivos FLAC incluyen un encabezado que indica la tasa de muestreo, el tipo de codificación y el número de canales, y se pueden reproducir de la siguiente manera:
play audio.flacLos archivos LINEAR16 no incluyen un encabezado. Para reproducirlos, especifica la tasa de muestreo, el tipo de codificación y la cantidad de canales. La codificación LINEAR16 debe ser un número entero con signo de 16 bits y con formato little-endian.
play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw
Los archivos MULAW tampoco incluyen un encabezado y, a menudo, utilizan una tasa de muestreo más baja.
play --channels=1 --rate=8000 --encoding=u-law audio.raw
Verifica que la codificación de audio de tus datos coincida con los parámetros que enviaste en
RecognitionConfig. Por ejemplo, si en tu solicitud especificaste"encoding":"FLAC"y"sampleRateHertz":16000, los parámetros de datos de audio que se enumeraron con el comandoplayde SoX deben coincidir con estos parámetros de la siguiente manera:play audio.flacDebería enumerar lo siguiente:
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000 Hz
Si la lista de SoX muestra un
Sampleratehertzdistinto de16000Hz, cambia"sampleRateHertz"enInitialRecognizeRequestpara que coincida. SiEncodingno esFLACoChannelsno es1 @ 16-bit, no puedes usar este archivo directamente y tendrás que convertirlo en una codificación compatible (consulta el siguiente paso).Si tu archivo de audio no posee una codificación FLAC, intenta convertirlo en FLAC usando SoX y repite los pasos anteriores para reproducir el archivo y verificar la codificación, sampleRateHertz y los canales. Ejemplos que convierten varios formatos de archivos de audio en codificación FLAC:
sox audio.wav --channels=1 --bits=16 audio.flac sox audio.ogg --channels=1 --bits=16 audio.flac sox audio.au --channels=1 --bits=16 audio.flac sox audio.aiff --channels=1 --bits=16 audio.flac
Para convertir un archivo sin procesar en FLAC, debes conocer la codificación de audio del archivo. Por ejemplo, para convertir estéreo de 16 bits con firma y formato little-endian de 16,000 Hz a FLAC, sigue este ejemplo:
sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw --channels=1 --bits=16 audio.flac
Ejecuta el ejemplo de la guía de inicio rápido o una de las aplicaciones de muestra con el archivo de audio de muestra suministrado. Una vez que el ejemplo se ejecute con éxito, reemplaza el archivo de audio de muestra por tu archivo de audio.
Configura el modelo y el idioma
La selección de modelos es muy importante para obtener resultados de transcripción
de alta calidad. Cloud STT
brinda varios modelos que se ajustan a diferentes casos de uso y que se deben
elegir para que coincidan lo más posible con tu audio.
Por ejemplo, algunos modelos, como latest_short y command_and_search,
son modelos de formato corto, lo que significa que son más adecuados para instrucciones y audios cortos.
Es probable que estos modelos devuelvan resultados apenas detecten un período de
silencio. Por otro lado, los modelos de formato largo, como
latest_short, phone_call, video and default, son más
adecuados para audios más largos y no son tan sensibles para interpretar un silencio como
el final del audio.
Si tu reconocimiento finaliza de forma abrupta o no se devuelve rápido, experimenta con otros modelos usando la IU de voz para ver si puedes obtener una mejor calidad de transcripción.
Errores del tiempo de espera
En su mayoría, estos problemas se deben a una configuración incorrecta o a un uso inadecuado de Cloud Speech-to-Text.
LongRunningRecognize o BatchRecognize
Problema: Recibes el mensaje
TimeoutError: Operation did not complete within the designated timeout.Solución: Puedes enviar una transcripción al bucket de Cloud Storage o extender el tiempo de espera en la solicitud.
Este problema se produce cuando la solicitud LongRunningRecognize
o BatchRecognize
no se completa en el tiempo de espera especificado y no es un error que
indique una falla en la transcripción de voz. Esto significa que los resultados
de la transcripción no están listos para extraerse.
StreamingRecognize
Problema: Recibes el mensaje
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.Solución: Debe disminuir el tiempo entre los fragmentos de audio enviados. Si Cloud Speech-to-Text no recibe un nuevo fragmento cada pocos segundos, cerrará la conexión y activará este error.
Se anuló StreamingRecognize 409
Problema: Recibes el error
409 Max duration of 5 minutes reached for stream.Solución: Estás alcanzando el límite de reconocimiento de transmisión de cinco minutos de audio. Cuando te acerques a este límite, cierra la transmisión y abre una nueva.
Calidad baja de la transcripción
El reconocimiento de voz automático (ASR) admite una amplia variedad de casos de uso. La mayoría de los problemas de calidad se pueden solucionar probando diferentes opciones de la API. Para mejorar la exactitud del reconocimiento, sigue los lineamientos en Prácticas recomendadas.
No se reconocen las expresiones cortas
Problema: La API no capta las expresiones breves del usuario final, como Sí, No y Siguiente, y no aparecen en la transcripción.
Solución: Haz lo siguiente.
Prueba la misma solicitud con diferentes modelos.
Agrega la adaptación de voz y potencia las palabras faltantes.
Si usas la entrada de transmisión, intenta configurar
single_utterance=true.
Palabra o frase que no se reconoce en reiteradas ocasiones
Problema: Ciertas palabras o frases se reconocen de manera incorrecta en reiteradas ocasiones, como cuando a se percibe como 8.
Solución: Haz lo siguiente.
Prueba la misma solicitud con diferentes modelos.
Agrega la adaptación de voz y potencia las palabras faltantes. Puedes usar tokens de clase para potenciar conjuntos completos de palabras, como secuencias de dígitos o direcciones. Verifica los tokens de clase disponibles.
Intenta aumentar
max_alternatives. Luego, marca SpeechRecognitionResultalternativesy elige el primero que coincida con el formato que deseas.
El formato puede ser un desafío para el ASR. A menudo, la adaptación del habla puede ayudar a obtener el formato requerido, pero es posible que se necesite un procesamiento posterior para ajustarse a él.
Entradas mixtas o en varios idiomas
Problema: El audio contiene habla en varios idiomas, como una conversación entre un interlocutor de inglés y uno de español, lo que genera una transcripción incorrecta.
Solución: Esta función no es compatible. Speech-to-Text solo puede transcribir un idioma por solicitud.
Artefactos durante el silencio o la música con los modelos de Chirp
Problema: Cuando se pasa audio con partes de silencio o música, la transcripción contiene números aleatorios o palabras alucinadas.
Solución: Habilita la cancelación de ruido y el filtro de SNR, y prueba diferentes combinaciones del umbral de SNR.
Permiso denegado
Problema: Recibes el siguiente error.
Permission denied to access GCS object BUCKET-PATH. Source error: PROJECT-ID@gcp-sa-speech.iam.gserviceaccount.com does not have storage.buckets.get access to the Google Cloud Storage bucket. Permission 'storage.buckets.get' denied on resource (or it may not exist).
Solución: Otorga permiso a PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.com para acceder al archivo en el bucket BUCKET-PATH.
Argumento no válido
Problema: Recibes el siguiente error.
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
Solución: Comprueba los argumentos y compáralos con la documentación de la API. Luego, valida que sean correctos. Asegúrate de que el extremo seleccionado coincida con la ubicación en la solicitud o el recurso.
Se agotó el recurso
Problema: Recibes el siguiente error.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
Solución: Consulta Solicita un ajuste de cuota.
El fragmento de transmisión es demasiado grande
Problema: Recibes el siguiente error.
INVALID_ARGUMENT: Request audio can be a maximum of 10485760 bytes. [type.googleapis.com/util.MessageSetPayload='[google.rpc.error_details_ext] { message: "Request audio can be a maximum of 10485760 bytes." }']
Solución: Debes reducir el tamaño de los fragmentos de audio que se envían. Te recomendamos que envíes fragmentos de 100 ms para obtener la mejor latencia y evitar alcanzar el límite de audio.
Registro de datos
Problema: Speech-to-Text no brinda ningún registro de Cloud Logging.
Solución: Debido a que Speech-to-Text tiene inhabilitado el registro de datos de forma predeterminada, los clientes deben habilitarlo al nivel de proyecto.