Scopri i passaggi per la risoluzione dei problemi, utili in caso di problemi nell'utilizzo di Speech-to-Text.
Impossibile eseguire l'autenticazione in Speech-to-Text
Potresti ricevere un messaggio di errore che indica che le credenziali predefinite dell'applicazione non sono disponibili. Oppure, potresti chiederti come ottenere una chiave API da utilizzare quando chiami Speech-to-Text.
Speech-to-Text utilizza credenziali predefinite dell'applicazione (ADC) per l'autenticazione.
Le credenziali per ADC devono essere disponibili nel contesto in cui chiami l'API Speech-to-Text. Ad esempio, se configuri ADC nel terminale, ma esegui il codice nel debugger dell'IDE, il contesto di esecuzione del codice potrebbe non avere accesso alle credenziali. In questo caso, la tua richiesta diSpeech-to-Texte potrebbe non andare a buon fine.
Per scoprire come fornire le credenziali a Credenziali predefinite dell'applicazione, consulta Configurare le credenziali predefinite dell'applicazione.
Speech-to-Text restituisce una risposta vuota
Esistono diversi motivi per cui Speech-to-Text potrebbe restituire una risposta vuota. La causa del problema può essere RecognitionConfig
o l'audio
stesso.
Risoluzione dei problemi RecognitionConfig
L'oggetto RecognitionConfig
(o StreamingRecognitionConfig
) fa parte di una
richiesta di riconoscimentoSpeech-to-Texte. Per eseguire correttamente una trascrizione, imposta i campi che rientrano nelle seguenti categorie principali:
- Configurazione audio
- Modello e lingua
Una causa comune di risposte vuote (ad esempio una risposta JSON {}
vuota) è la fornitura di informazioni errate sui metadati audio. Se i campi di configurazione audio non sono impostati correttamente, la trascrizione
molto probabilmente non andrà a buon fine e il modello di riconoscimento restituirà risultati vuoti.
La configurazione audio contiene i metadati dell'audio fornito. Puoi ottenere
i metadati del file audio utilizzando il comando ffprobe
, che fa parte
di FFMPEG.
L'esempio seguente mostra l'utilizzo del comando per ottenere i metadati di questo esempio di voce.
$ 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
Il file ha chiaramente 8000 Hz, un canale e la codifica LINEAR16 (s16) e puoi utilizzare queste informazioni nel tuo RecognitionConfig
.
Risoluzione dei problemi relativi alla codifica
Per risolvere altri possibili motivi di una risposta vuota, segui questi passaggi:
Riproduci il file e ascolta l'output. L'audio è chiaro e il discorso è comprensibile?
Per riprodurre i file, puoi utilizzare il comando SoX (Sound eXchange)
play
. Di seguito sono riportati alcuni esempi basati su diverse codifiche audio.I file FLAC includono un'intestazione che indica la frequenza di campionamento, il tipo di codifica e il numero di canali e possono essere riprodotti come segue:
play audio.flac
I file LINEAR16 non includono un'intestazione. Per riprodurli, specifica la frequenza di campionamento, il tipo di codifica e il numero di canali. La codifica LINEAR16 deve essere a 16 bit, con numeri interi con segno e little-endian.
play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw
Inoltre, i file MULAW non includono un'intestazione e spesso utilizzano una frequenza di campionamento inferiore.
play --channels=1 --rate=8000 --encoding=u-law audio.raw
Verifica che la codifica audio dei dati corrisponda ai parametri che hai inviato in
RecognitionConfig
. Ad esempio, se la tua richiesta specificava"encoding":"FLAC"
e"sampleRateHertz":16000
, i parametri dei dati audio elencati dal comando SoXplay
devono corrispondere a questi parametri, come segue:play audio.flac
Deve elencare:
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000 Hz
Se la scheda SoX mostra un valore
Sampleratehertz
diverso da16000Hz
, modifica"sampleRateHertz"
inInitialRecognizeRequest
in modo che corrisponda. SeEncoding
non èFLAC
oChannels
non è1 @ 16-bit
, non puoi utilizzare questo file direttamente e dovrai convertirlo in una codifica compatibile (vedi il passaggio successivo).Se il file audio non è codificato in formato FLAC, prova a convertirlo in FLAC utilizzando SoX. Ripeti i passaggi per riprodurre il file e verificare la codifica, sampleRateHertz e i canali. Esempi di conversione di vari formati di file audio in codifica 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
Per convertire un file non elaborato in FLAC, devi conoscere la codifica audio del file. Ad esempio, per convertire stereo, 16 bit, con segno, little-endian a 16.000 Hz in FLAC, segui questo esempio:
sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw --channels=1 --bits=16 audio.flac
Esegui l'esempio della guida rapida o una delle applicazioni di esempio con il file audio di esempio fornito. Quando l'esempio viene eseguito correttamente, sostituisci il file audio di esempio con il tuo file audio.
Configurazione del modello e della lingua
La selezione del modello è molto importante per ottenere risultati di trascrizione di alta qualità. Speech-to-Text
fornisce più modelli ottimizzati per diversi casi d'uso e deve essere
scelto in modo che corrisponda il più possibile al tuo audio.
Ad esempio, alcuni modelli (come latest_short
e command_and_search
)
sono modelli di formato breve, il che significa che sono più adatti a prompt e audio brevi.
Questi modelli probabilmente restituiranno risultati non appena rileveranno un periodo di
silenzio. I modelli di lunga durata, invece (come
latest_short, phone_call, video and default
), sono più
adatti agli audio più lunghi e non sono sensibili all'interpretazione del silenzio come
la fine dell'audio.
Se il riconoscimento termina troppo bruscamente o non viene restituito rapidamente, prova a migliorare la qualità della trascrizione sperimentando altri modelli utilizzando l'interfaccia utente vocale.
Errori di timeout
Questi problemi sono causati principalmente da una configurazione errata o da un uso improprio di Speech-to-Text.
LongRunningRecognize
o BatchRecognize
Problema: stai ricevendo
TimeoutError: Operation did not complete within the designated timeout
.Soluzione:puoi inviare una trascrizione al bucket Cloud Storage o estendere il timeout nella richiesta.
Questo problema si verifica quando la richiesta LongRunningRecognize
o BatchRecognize
non viene completata nel timeout specificato e non è un errore che
indica un errore nella trascrizione vocale. Ciò significa che i risultati della trascrizione non sono pronti per essere estratti.
StreamingRecognize
Problema: stai ricevendo
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time
.Soluzione: il tempo tra i chunk audio inviati deve diminuire. Se Speech-to-Text non riceve un nuovo blocco ogni pochi secondi, chiuderà la connessione e attiverà questo errore.
StreamingRecognize
409 interrotto
Problema:ricevi l'errore
409 Max duration of 5 minutes reached for stream
.Soluzione:stai raggiungendo il limite di riconoscimento dello streaming di cinque minuti di audio. Quando ti avvicini a questo limite, chiudi lo stream e aprine uno nuovo.
Qualità della trascrizione bassa
Il riconoscimento vocale automatico (ASR) supporta un'ampia gamma di casi d'uso. La maggior parte dei problemi di qualità può essere risolta provando diverse opzioni dell'API. Per migliorare la precisione del riconoscimento, segui le linee guida riportate in Best practice.
Le espressioni brevi non vengono riconosciute
Problema: le espressioni brevi dell'utente finale come Sì, No e Avanti non vengono acquisite dall'API e mancano nella trascrizione.
Soluzione: segui questi passaggi.
Prova la stessa richiesta con modelli diversi.
Aggiungi l'ottimizzazione vocale e ottimizza le parole mancanti.
Se utilizzi l'input di streaming, prova a impostare
single_utterance=true
.
Parola o frase non riconosciuta in modo coerente
Problema: alcune parole o frasi vengono riconosciute in modo errato, ad esempio a viene riconosciuta come 8.
Soluzione: segui questi passaggi.
Prova la stessa richiesta con modelli diversi.
Aggiungi l'ottimizzazione vocale e ottimizza le parole mancanti. Puoi utilizzare i token di classe per aumentare l'importanza di interi insiemi di parole, come sequenze di cifre o indirizzi. Controlla i token del corso disponibili.
Prova ad aumentare
max_alternatives
. Quindi, seleziona SpeechRecognitionResultalternatives
e scegli il primo che corrisponde al formato che preferisci.
La formattazione può essere difficile per l'ASR. L'adattamento del discorso può spesso aiutare a ottenere un formato richiesto, ma potrebbe essere necessario il post-processing per adattarlo al formato richiesto.
Input misti o multilingue
Problema: l'audio contiene discorsi in più lingue, ad esempio una conversazione tra una persona che parla inglese e una che parla spagnolo, con conseguente trascrizione errata.
Soluzione: questa funzionalità non è supportata. Speech-to-Text può trascrivere solo una lingua per richiesta.
Autorizzazione negata
Problema: ricevi il seguente errore.
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).
Soluzione:concedi l'autorizzazione a PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.com per accedere al file nel bucket BUCKET-PATH.
Argomento non valido
Problema: ricevi il seguente errore.
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
Soluzione: controlla gli argomenti e confrontali con la documentazione dell'API, poi verifica che siano corretti. Assicurati che l'endpoint selezionato corrisponda alla posizione nella richiesta / risorsa.
Risorsa esaurita
Problema: ricevi il seguente errore.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
Soluzione:consulta Richiedi un aggiustamento delle quote.
Il blocco di streaming è troppo grande
Problema: ricevi il seguente errore.
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." }']
Soluzione:devi ridurre le dimensioni dei segmenti audio inviati. Ti consigliamo di inviare blocchi di 100 ms per ottenere la latenza migliore ed evitare di raggiungere il limite audio.
Logging dei dati
Problema:Speech-to-Text non fornisce alcun Cloud Logging.
Soluzione:poiché il logging dei dati di Speech-to-Text è disattivato per impostazione predefinita, i clienti devono attivarlo a livello di progetto.