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 les "identifiants par défaut de l'application" ne sont pas disponibles, ou vous vous demandez peut-être 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 le 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. Il existe deux catégories principales de champs à définir pour effectuer une transcription correctement :
- Configuration audio.
- Modèle et langue.
L'une des causes les plus courantes de réponses vides (par exemple, vous recevez une réponse JSON {}
vide) est la fourniture d'informations incorrectes sur les métadonnées audio. Si les champs de configuration audio ne sont pas correctement définis, la transcription échouera 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 fonction ffprobe pour obtenir les métadonnées 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
La commande ci-dessus montre que le fichier contient les éléments suivants :
- sample_rate_hertz : 8000
- canaux : 1
- encoding LINEAR16 (s16)
Vous pouvez utiliser ces informations dans votre configuration RecognitionConfig
.
D'autres facteurs liés à l'audio pouvant expliquer une réponse vide peuvent être liés à l'encodage audio. Voici d'autres outils et solutions à essayer :
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
. Quelques exemples basés sur différents formats d'encodage audio sont présentés ci-dessous.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, vous devez spécifier 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 répertorier :
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000Hz
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, puis répétez les étapes ci-dessus afin de lire le fichier et de vérifier l'encodage, le taux d'échantillonnage et les canaux. Voici quelques exemples qui permettent de convertir plusieurs formats de fichier audio en fichier 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 de 16 bits signés 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 le fichier audio par votre propre fichier.
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, vous pouvez vérifier et tester d'autres modèles pour voir si vous pouvez obtenir une meilleure qualité de transcription. Vous pouvez tester plusieurs modèles à l'aide de l'interface utilisateur de la reconnaissance vocale.
Erreurs d'expiration de délai
Ces problèmes sont généralement dus à une mauvaise configuration ou à une mauvaise utilisation de la saisie vocale.
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 prolonger le délai avant expiration dans la requête.
Ce problème se produit lorsque la requête LongRunningRecognize
ou BatchRecognize
n'est pas terminée 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:L'intervalle entre les segments audio envoyés doit être réduit. Si la synthèse vocale ne reçoit pas de nouveau segment toutes les quelques secondes, elle ferme la connexion et déclenche cette erreur.
StreamingRecognize
409 interrompu
Problème:vous recevez l'erreur
409 Max duration of 5 minutes reached for stream
.Solution:Vous atteignez 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.
Transcription de mauvaise qualité
La reconnaissance vocale automatique (ASR) est compatible avec 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 courtes expressions ne sont pas reconnues
Problème: les courtes expressions de l'utilisateur final telles que Oui, Non et Suivant ne sont pas capturées par l'API et ne figurent pas 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 en streaming, essayez de définir
single_utterance=true
.
Mot ou expression non reconnus de manière cohérente
Problème: Certains mots ou expressions sont constamment 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 renforcer des ensembles entiers de mots, comme des séquences de chiffres ou des adresses. Vérifiez les jetons de classe disponibles.
Essayez d'augmenter
max_alternatives
. Vérifiez ensuite SpeechRecognitionResultalternatives
et choisissez le premier qui correspond au format souhaité.
La mise en forme peut être difficile pour la reconnaissance vocale. L'adaptation de la parole peut souvent aider à obtenir un format requis, mais un post-traitement peut être nécessaire pour s'adapter au format requis.
Entrées mixtes ou multilingues
Problème: l'audio contient des propos dans plusieurs langues, par exemple une conversation entre un locuteur anglais et un locuteur espagnol, ce qui entraîne une mauvaise transcription.
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:Autorisez PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.comà accéder au fichier du 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 vérifiez qu'ils sont corrects. Assurez-vous que le point de terminaison sélectionné correspond à l'emplacement dans la requête / la ressource.
Ressource épuisée
Problème:vous recevez l'erreur suivante.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
Solution:Découvrez comment demander une augmentation de quota.
Taille de la section de streaming trop importante
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 segments audio envoyés. Nous vous recommandons d'envoyer des blocs de 100 ms pour une latence optimale et éviter d'atteindre la limite audio.
Journalisation des données
Problème:la reconnaissance vocale ne fournit aucune journalisation Cloud.
Solution:La journalisation des données est désactivée par défaut pour Speech-to-Text. Les clients doivent donc l'activer au niveau du projet.