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. Para realizar una transcripción correctamente, establece los campos que se incluyen en las siguientes categorías principales:

  • Configuración de audio
  • Modelo y lenguaje

Una causa común de las respuestas vacías (como 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 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 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, especifica la tasa de muestreo, el tipo de codificación y la cantidad 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

    Debe incluir 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 codificación FLAC, intenta convertirlo en FLAC con SoX. Repite los pasos 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 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 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. Cuando 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, experimenta con otros modelos usando la IU de Speech para ver si puedes obtener una mejor calidad de transcripción.

Errores de tiempo de espera

En su mayoría, estos problemas se deben a una configuración incorrecta o al uso inadecuado de 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: Se debe reducir el tiempo entre los fragmentos de audio enviados. Si Speech-to-Text no recibe un nuevo fragmento cada pocos segundos, cerrará la conexión y activará este error.

StreamingRecognize 409 aborted

  • 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 precisión del reconocimiento, sigue las pautas de las Recomendaciones.

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: Sigue estos pasos.

    1. Prueba la misma solicitud con diferentes modelos.

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

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

Palabra o frase que no se reconoce de forma constante

  • Problema: Ciertas palabras o frases se reconocen de forma incorrecta de manera constante, como a que 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 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 RAH. La adaptación del discurso a menudo puede ayudar a obtener el formato requerido, pero es posible que se necesite un procesamiento posterior para ajustarse al formato requerido.

Entradas en varios idiomas o mixtas

  • Problema: El audio contiene voz en varios idiomas, como una conversación entre un hablante 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.

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 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 proporciona 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 a nivel del proyecto.