Découvrez les étapes de dépannage qui pourraient vous être utiles si vous rencontrez des problèmes avec Speech-to-Text.
Impossible de s'authentifier auprès de Speech-to-Text
Vous pouvez recevoir un message d'erreur indiquant que vos identifiants par défaut de l'application ne sont pas disponibles. Vous vous demandez peut-être aussi comment obtenir une clé API à utiliser lors de l'appel de Speech-to-Text.
Speech-to-Text utilise le service Identifiants par défaut de l'application (ADC) pour l'authentification.
Les identifiants ADC doivent être disponibles dans le contexte d'appel de l'API Speech-to-Text. Par exemple, si vous configurez le service ADC dans votre terminal, mais que vous exécutez votre code dans le débogueur de votre IDE, le contexte d'exécution du code peut ne pas avoir accès aux identifiants. Dans ce cas, la requête à Speech-to-Text peut échouer.
Pour savoir comment fournir des identifiants à ADC, consultez la page Configurer les identifiants par défaut de l'application.
Speech-to-Text renvoie une réponse vide
Speech-to-Text peut renvoyer une réponse vide pour plusieurs raisons. La source du problème peut être RecognitionConfig
ou l'audio lui-même.
Résoudre les problèmes liés à la configuration RecognitionConfig
L'objet RecognitionConfig
(ou StreamingRecognitionConfig
) fait partie d'une requête de reconnaissance vocale Speech-to-Text. Pour effectuer correctement une transcription, définissez les champs qui appartiennent aux catégories principales suivantes :
- Configuration audio
- Modèle et langue
Les réponses vides (comme une réponse JSON {}
vide) sont souvent dues à des informations incorrectes sur les métadonnées audio. Si les champs de configuration audio ne sont pas correctement définis, la transcription échouera très probablement et le modèle de reconnaissance renverra des résultats vides.
La configuration audio contient les métadonnées de l'audio fourni. Vous pouvez obtenir les métadonnées de votre fichier audio à l'aide de la commande ffprobe
, qui fait partie de FFMPEG.
L'exemple suivant montre comment utiliser la commande pour obtenir les métadonnées de cet exemple de discours.
$ 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
Le fichier comporte clairement 8 000 Hz, un canal et un encodage LINEAR16 (s16). Vous pouvez utiliser ces informations dans votre RecognitionConfig
.
Dépannage lié à l'encodage
Pour résoudre les autres raisons possibles d'une réponse vide, procédez comme suit :
Lisez le fichier, puis écoutez le résultat. Le contenu audio est-il clair ? Le discours est-il intelligible ?
Pour lire des fichiers, vous pouvez exécuter la commande SoX (Sound eXchange)
play
. Vous trouverez ci-dessous quelques exemples basés sur différents formats d'encodage audio.Les fichiers FLAC comprennent un en-tête indiquant le taux d'échantillonnage, le type d'encodage et le nombre de canaux. Ils peuvent être lus comme suit :
play audio.flac
Les fichiers LINEAR16 n'incluent pas d'en-tête. Pour les lire, spécifiez le taux d'échantillonnage, le type d'encodage et le nombre de canaux. Le format d'encodage LINEAR16 doit être un nombre entier little-endian de 16 bits signés.
play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw
Les fichiers MULAW n'incluent pas non plus d'en-tête et utilisent souvent un taux d'échantillonnage moins élevé.
play --channels=1 --rate=8000 --encoding=u-law audio.raw
Assurez-vous que l'encodage audio de vos données correspond aux paramètres indiqués dans
RecognitionConfig
. Par exemple, si les éléments"encoding":"FLAC"
et"sampleRateHertz":16000
sont spécifiés dans votre requête, les paramètres de données audio répertoriés par la commande SoXplay
doivent correspondre, comme indiqué ci-dessous :play audio.flac
Doit indiquer :
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000 Hz
Si la liste SoX indique un taux d’échantillonnage
Sampleratehertz
différent de16000Hz
, modifiez"sampleRateHertz"
dansInitialRecognizeRequest
pour qu'il soit identique. Vous ne pouvez pas utiliser ce fichier directement siEncoding
n'est pas défini surFLAC
ouChannels
sur1 @ 16-bit
. Vous devrez d'abord le convertir dans un format d'encodage compatible (voir l'étape suivante).Si votre fichier audio n'est pas encodé au format FLAC, essayez de le convertir en FLAC avec SoX. Répétez les étapes pour lire le fichier et vérifier l'encodage, le taux d'échantillonnage et les canaux. Exemples de conversion de différents formats de fichier audio en encodage 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
Pour convertir un fichier RAW en FLAC, vous devez connaître l'encodage audio du fichier. Par exemple, pour convertir un fichier little-endian stéréo signé de 16 bits avec un taux d'échantillonnage de 16 000 Hz en fichier FLAC, procédez comme suit :
sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw --channels=1 --bits=16 audio.flac
Exécutez l'exemple de démarrage rapide ou l'un des exemples d'applications à l'aide du fichier audio fourni. Une fois que l'exemple fonctionne correctement, remplacez l'exemple de fichier audio par votre propre fichier audio.
Configuration du modèle et de la langue
La sélection du modèle est très importante pour obtenir des résultats de transcription de haute qualité. Speech-to-Text fournit plusieurs modèles adaptés à différents cas d'utilisation. Vous devez choisir celui qui correspond le mieux à votre contenu audio.
Par exemple, certains modèles (tels que latest_short
et command_and_search
) sont des modèles courts, qui sont plus adaptés aux audios et aux invites courts.
Ces modèles sont susceptibles de renvoyer des résultats dès qu'ils détectent une période de silence. Les modèles longs (latest_short, phone_call, video and default
, par exemple) conviennent davantage aux contenus audio plus longs et sont moins susceptibles d'interpréter le silence comme la fin de l'audio.
Si votre reconnaissance se termine trop brusquement ou ne renvoie pas rapidement, essayez d'obtenir une meilleure qualité de transcription en testant d'autres modèles à l'aide de l'interface utilisateur de la reconnaissance vocale.
Erreurs d'expiration de délai
Ces problèmes sont, pour la plupart, dus à une mauvaise configuration ou à une mauvaise utilisation de Speech-to-Text.
LongRunningRecognize
ou BatchRecognize
Problème : vous recevez
TimeoutError: Operation did not complete within the designated timeout
.Solution : Vous pouvez envoyer une transcription au bucket Cloud Storage ou étendre le délai avant expiration dans la requête.
Ce problème se produit lorsque la requête LongRunningRecognize
ou BatchRecognize
ne se termine pas dans le délai spécifié et qu'il ne s'agit pas d'une erreur indiquant un échec de la transcription vocale. Cela signifie que les résultats de la transcription ne sont pas prêts à être extraits.
StreamingRecognize
Problème : vous recevez
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time
.Solution : Le temps entre les blocs audio envoyés doit diminuer. Si Speech-to-Text ne reçoit pas de nouveau bloc toutes les quelques secondes, il ferme la connexion et déclenche cette erreur.
StreamingRecognize
409 abandonné
Problème : vous recevez l'erreur
409 Max duration of 5 minutes reached for stream
.Solution : Vous avez atteint la limite de reconnaissance en streaming de cinq minutes d'audio. Lorsque vous approchez de cette limite, fermez le flux et ouvrez-en un autre.
Qualité de la transcription médiocre
La reconnaissance vocale automatique prend en charge de nombreux cas d'utilisation. La plupart des problèmes de qualité peuvent être résolus en essayant différentes options d'API. Pour améliorer la précision de la reconnaissance, respectez les consignes décrites dans les bonnes pratiques.
Les énoncés courts ne sont pas reconnus
Problème : Les énoncés courts des utilisateurs finaux, tels que Oui, Non et Suivant, ne sont pas capturés par l'API et sont manquants dans la transcription.
Solution : suivez les étapes ci-dessous.
Testez la même requête avec différents modèles.
Ajoutez l'adaptation vocale et boostez les mots manquants.
Si vous utilisez une entrée de flux, essayez de définir
single_utterance=true
.
Mot ou expression systématiquement non reconnus
Problème : Certains mots ou expressions sont systématiquement mal reconnus, par exemple a est reconnu comme 8.
Solution : suivez les étapes ci-dessous.
Testez la même requête avec différents modèles.
Ajoutez l'adaptation vocale et boostez les mots manquants. Vous pouvez utiliser des jetons de classe pour booster des ensembles entiers de mots, comme des séquences de chiffres ou des adresses. Consultez les jetons de classe disponibles.
Essayez d'augmenter
max_alternatives
. Cochez ensuite SpeechRecognitionResultalternatives
, puis choisissez le premier résultat qui correspond au format souhaité.
La mise en forme peut être difficile pour l'ASR. L'adaptation vocale peut souvent vous aider à obtenir le format requis, mais un post-traitement peut être nécessaire pour l'adapter.
Entrées multilingues ou dans plusieurs langues
Problème : L'audio contient des paroles dans plusieurs langues, comme une conversation entre un locuteur anglophone et un locuteur hispanophone, ce qui entraîne une transcription incorrecte.
Solution : Cette fonctionnalité n'est pas disponible. Speech-to-Text ne peut transcrire qu'une seule langue par requête.
Autorisation refusée
Problème : vous recevez l'erreur suivante.
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).
Solution : accordez l'autorisation à PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.comd'accéder au fichier dans le bucket BUCKET-PATH.
Argument incorrect
Problème : vous recevez l'erreur suivante.
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
Solution : Vérifiez les arguments et comparez-les à la documentation de l'API, puis assurez-vous qu'ils sont corrects. Assurez-vous que le point de terminaison sélectionné correspond à l'emplacement dans la requête / ressource.
Ressource épuisée
Problème : vous recevez l'erreur suivante.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
Solution : Consultez Demander un ajustement de quota.
Bloc de streaming trop volumineux
Problème : vous recevez l'erreur suivante.
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." }']
Solution : Vous devez réduire la taille des blocs audio envoyés. Nous vous recommandons d'envoyer des blocs de 100 ms pour optimiser la latence et éviter d'atteindre la limite audio.
Journalisation des données
Problème : Speech-to-Text ne fournit pas de journaux Cloud Logging.
Solution : Étant donné que la journalisation des données est désactivée par défaut dans Speech-to-Text, les clients doivent l'activer au niveau du projet.