Solución de problemas

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.

Sigue estos pasos para resolver otros posibles motivos de una respuesta vacía:

  1. Reproduce el archivo y escucha el sonido de salida. ¿El audio es claro y la voz inteligible?

    Para reproducir archivos, puedes usar el comando play de 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.flac

    Los 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
  2. 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 comando play de SoX deben coincidir con estos parámetros de la siguiente manera:

    play audio.flac

    Debería enumerar lo siguiente:

    Encoding: FLAC
    Channels: 1 @ 16-bit
    Sampleratehertz: 16000 Hz

    Si la lista de SoX muestra un Sampleratehertz distinto de 16000Hz, cambia "sampleRateHertz" en InitialRecognizeRequest para que coincida. Si Encoding no es FLAC o Channels no es 1 @ 16-bit, no puedes usar este archivo directamente y tendrás que convertirlo en una codificación compatible (consulta el siguiente paso).

  3. 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
  4. 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 , No y Siguiente, y no aparecen en la transcripción.

  • Solución: Haz lo siguiente.

    1. Prueba la misma solicitud con diferentes modelos.

    2. Agrega la adaptación de voz y potencia las palabras faltantes.

    3. 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.

    1. Prueba la misma solicitud con diferentes modelos.

    2. 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.

    3. Intenta aumentar max_alternatives. Luego, marca SpeechRecognitionResult alternatives y 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.