Solución de problemas

Obtén información sobre los pasos para solucionar problemas que pueden servirte si tienes dificultades con Speech-to-Text.

No puedes autenticar en Speech-to-Text

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 llamar a Speech-to-Text.

En Speech-to-Text, se usan credenciales predeterminadas de la aplicación (ADC) para la autenticación.

Las credenciales para ADC deben estar disponibles dentro del contexto en que llamas a la API de Speech-to-Text. Por ejemplo, si configuras ADC en tu terminal, pero ejecutas tu 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 Speech-to-Text podría fallar.

Para obtener información sobre cómo proporcionar credenciales a ADC, consulta Configura credenciales predeterminadas de la aplicación.

Se muestra una respuesta vacía en Speech-to-Text

Existen varias razones por las que Speech-to-Text podría mostrar 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 Speech-to-Text. Hay 2 categorías de campos principales que se deben establecer para realizar una transcripción de forma correcta:

  • Configuración de audio
  • Modelo e idioma

Una de las causas más comunes de las respuestas vacías (por ejemplo, recibes una respuesta JSON {} vacía) es proporcionar información incorrecta sobre los metadatos de audio. Si los campos de configuración de audio no están configurados de forma correcta, es probable que la transcripción falle y el modelo de reconocimiento muestre resultados vacíos.

La configuración de audio contiene los metadatos del audio proporcionado. Puedes obtener los metadatos para el archivo de audio mediante el comando ffprobe, que forma parte de FFMPEG.

En el siguiente ejemplo, se demuestra el uso de ffprobe para obtener los metadatos de https://storage.googleapis.com/cloud-samples-tests/speech/commercial_mono.wav.

$ 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

Con el comando anterior, podemos ver que el archivo tiene lo siguiente:

  • sample_rate_hertz: 8000
  • canales: 1
  • codificación LINEAR16 (s16)

Puedes usar esta información en tu RecognitionConfig.

Los motivos adicionales relacionados con el audio para una respuesta vacía pueden estar relacionados con la codificación de audio. Estas son otras herramientas y cosas que puedes probar:

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

    Para reproducir archivos, puedes utilizar 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, debes especificar la tasa de muestreo, el tipo de codificación y el número de canales. La codificación LINEAR16 debe ser de 16 bits, número entero con signo y 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 tu solicitud especificó "encoding":"FLAC" y "sampleRateHertz":16000, los parámetros de datos de audio enumerados por el comando play de SoX deben coincidir con estos parámetros, de la siguiente manera:

    play audio.flac

    debería enumerar:

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

    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 codificación FLAC, intenta convertirlo en FLAC mediante SoX, y repite los pasos anteriores para reproducir el archivo y verificar la codificación, sampleRateHertz y los canales. Aquí hay algunos 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 RAW en FLAC, debes conocer la codificación de audio del archivo. Por ejemplo, para convertir estéreo de 16 bits con signo de little-endian a 16000 Hz a FLAC, haz lo siguiente:

    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 con tu archivo de audio.

Configuración de modelo y lenguaje

La selección de modelos es muy importante para obtener resultados de transcripción de alta calidad. Speech-to-Text proporciona 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 cortos, lo que significa que son más adecuados para audios y mensajes cortos. Es probable que estos modelos muestren 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 el silencio como el final del audio.

Si tu reconocimiento finaliza de forma abrupta o no se muestra rápido, es posible que desees verificar y experimentar con otros modelos para ver si puedes obtener una mejor calidad de transcripción. Puedes experimentar con varios modelos mediante la IU de Speech.

Errores de tiempo de espera

Por lo general, estos problemas se deben a una configuración incorrecta o al uso inadecuado de la función.

LongRunningRecognize o BatchRecognize

  • Problema: Recibes 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 ocurre 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. Significa que los resultados de la transcripción aún no están listos para extraerse.

StreamingRecognize

  • Problema: Recibes Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.

  • Solución: Se debe disminuir el tiempo entre los fragmentos de audio enviados. Si la función de texto a voz no recibe un fragmento nuevo cada pocos segundos, cerrará la conexión y activará este error.

StreamingRecognize 409 abortado

  • Problema: Recibes el error 409 Max duration of 5 minutes reached for stream.

  • Solución: Alcanzaste el límite de reconocimiento de transmisión de 5 minutos de audio. Cuando te acerques a este límite, cierra la transmisión y abre una nueva.

La calidad de la transcripción es baja

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 abordar probando diferentes opciones de API. Para mejorar la precisión del reconocimiento, sigue los lineamientos de las Prácticas recomendadas.

No se reconocen las oraciones cortas.

  • Problema: La API no captura las oraciones breves del usuario final, como , No y Siguiente, y no aparecen en la transcripción.

  • Solución: Sigue estos pasos.

    1. Prueba la misma solicitud con diferentes modelos.

    2. Agrega la adaptación de voz y mejora las palabras que faltan.

    3. Si usas una entrada de transmisión, intenta configurar single_utterance=true.

Palabra o frase que no se reconoce de forma coherente

  • Problema: Algunas palabras o frases se reconocen de forma incorrecta de forma constante, por ejemplo, a se reconoce como 8.

  • Solución: Sigue estos pasos.

    1. Prueba la misma solicitud con diferentes modelos.

    2. Agrega la adaptación de voz y mejora las palabras que faltan. Puedes usar tokens de clase para mejorar conjuntos completos de palabras, como secuencias de dígitos o direcciones. Verifica los tokens de clase disponibles.

    3. Intenta aumentar max_alternatives. Luego, revisa SpeechRecognitionResult alternatives y elige el primero que coincida con el formato que deseas.

El formato puede ser un desafío para la ASR. A menudo, la adaptación de voz puede ayudar a obtener un formato requerido, pero es posible que se necesite el procesamiento posterior para ajustarse al formato requerido.

Entradas mixtas o en varios idiomas

  • Problema: El audio contiene voz en varios idiomas, como una conversación entre una persona que habla inglés y una que habla español, lo que genera una transcripción incorrecta.

  • Solución: Esta función no es compatible. La función de texto a voz solo puede transcribir un idioma por solicitud.

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.compara que acceda 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: Verifica 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

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 disminuir el tamaño de los fragmentos de audio enviados. 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: La función de voz a texto no proporciona ningún registro de Cloud Logging.

  • Solución: Como Speech-to-Text tiene inhabilitado el registro de datos de forma predeterminada, los clientes deben habilitarlo a nivel del proyecto.