Questo documento è una guida alle nozioni di base sull'utilizzo di Cloud Speech-to-Text. Questa guida concettuale illustra i tipi di richieste che puoi inviare a Cloud STT, come crearle e come gestirne le risposte. Consigliamo a tutti gli utenti di Cloud STT di leggere questa guida e uno dei tutorial associati prima di approfondire l'API stessa.
Provalo
Se non conosci Google Cloud, crea un account per valutare le prestazioni di Cloud STT in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei workload.
Prova Cloud STT gratuitamenteRichieste vocali
Cloud STT prevede tre metodi principali per eseguire il riconoscimento vocale:
Il riconoscimento sincrono (REST e gRPC) invia i dati audio all'API Cloud Speech-to-Text, esegue il riconoscimento su questi dati e restituisce i risultati dopo che tutto l'audio è stato elaborato. Le richieste di riconoscimento sincrono sono limitate a dati audio di durata pari o inferiore a 1 minuto.
Il riconoscimento asincrono (REST e gRPC) invia i dati audio all'API Cloud Speech-to-Text e avvia un'operazione di lunga durata. Utilizzando questa operazione, puoi eseguire il polling periodico per i risultati del riconoscimento. Utilizza richieste asincrone per dati audio di qualsiasi durata fino a 480 minuti.
Streaming Recognition (solo gRPC) esegue il riconoscimento dei dati audio forniti all'interno di un flusso bidirezionale gRPC. Le richieste di streaming sono progettate per scopi di riconoscimento in tempo reale, ad esempio l'acquisizione di audio live da un microfono. Il riconoscimento in streaming fornisce risultati provvisori durante l'acquisizione dell'audio, consentendo la visualizzazione dei risultati, ad esempio, mentre un utente sta ancora parlando.
Le richieste contengono parametri di configurazione e dati audio. Le sezioni seguenti descrivono questi tipi di richieste di riconoscimento, le risposte che generano e come gestirle in modo più dettagliato.
Riconoscimento dell'API Cloud Speech-to-Text
Una richiesta di riconoscimento sincrono dell'API Cloud Speech-to-Text è il metodo più semplice per eseguire il riconoscimento dei dati audio del parlato. Cloud STT può elaborare fino a 1 minuto di dati audio vocali inviati in una richiesta sincrona. Dopo che Cloud STT elabora e riconosce tutto l'audio, restituisce una risposta.
Una richiesta sincrona è bloccante, il che significa che Cloud STT deve restituire una risposta prima di elaborare la richiesta successiva. Cloud STT in genere elabora l'audio più velocemente del tempo reale, elaborando 30 secondi di audio in 15 secondi in media. In caso di scarsa qualità audio, la richiesta di riconoscimento può richiedere molto più tempo.
Richieste di riconoscimento vocale sincrono
Una richiesta API Cloud Speech-to-Text sincrona è costituita da una configurazione di riconoscimento vocale e da dati audio. Ad esempio:
{ "config": { "encoding": "LINEAR16", "sampleRateHertz": 16000, "languageCode": "en-US", }, "audio": { "uri": "gs://bucket-name/path_to_audio_file" } }
Tutte le richieste di riconoscimento sincrono dell'API Cloud Speech-to-Text devono includere un campo di riconoscimento vocale
config (di tipo
RecognitionConfig). Un
RecognitionConfig contiene i seguenti campi secondari:
encoding: obbligatorio. Specifica lo schema di codifica dell'audio fornito (di tipoAudioEncoding). Se hai la possibilità di scegliere un codec, preferisci una codifica senza perdita di dati come FLAC oLINEAR16per ottenere prestazioni ottimali. Per saperne di più, vedi Codifiche audio. Il campoencodingè facoltativo per i file FLAC e WAV in cui la codifica è inclusa nell'intestazione del file.sampleRateHertz: obbligatorio. Specifica la frequenza di campionamento (in hertz) dell'audio fornito. Per saperne di più sulle frequenze di campionamento, vedi la sezione Frequenze di campionamento riportata di seguito. Il camposampleRateHertzè facoltativo per i file FLAC e WAV in cui la frequenza di campionamento è inclusa nell'intestazione del file.languageCode: obbligatorio. Contiene la lingua più la regione o le impostazioni internazionali da utilizzare per il riconoscimento vocale dell'audio fornito. Il codice lingua deve essere un identificatore BCP-47. Tieni presente che i codici di lingua in genere sono costituiti da tag di lingua principali e tag secondari di regione per indicare i dialetti (ad esempio, "en" per l'inglese e "US" per gli Stati Uniti nell'esempio precedente). Per un elenco delle lingue supportate, consulta la sezione Lingue supportate.maxAlternatives: (facoltativo) il valore predefinito è1. Indica il numero di trascrizioni alternative da fornire nella risposta. Per impostazione predefinita, l'API Cloud Speech-to-Text fornisce una trascrizione principale. Se vuoi valutare diverse alternative, impostamaxAlternativessu un valore più alto. Tieni presente che Cloud STT restituirà alternative solo se il sistema di riconoscimento determina che le alternative sono di qualità sufficiente. In generale, le alternative sono più appropriate per le richieste in tempo reale che richiedono il feedback dell'utente (ad esempio, i comandi vocali) e pertanto sono più adatte per le richieste di riconoscimento in streaming.profanityFilter: (Facoltativo) Indica se filtrare le parole o le frasi volgari. Al posto delle parole escluse, verrà visualizzata la prima lettera della parola e un asterisco per ogni carattere rimanente (ad esempio c****). Il filtro per il linguaggio volgare opera su singole parole e non rileva discorsi offensivi o violenti che sono una frase o una combinazione di parole.speechContext: (Facoltativo) Contiene informazioni contestuali aggiuntive per l'elaborazione di questo audio. Un contesto contiene i seguenti campi secondari:boost: contiene un valore che assegna un peso al riconoscimento di una determinata parola o frase.phrases: Contiene un elenco di parole e frasi che forniscono suggerimenti per l'attività di riconoscimento vocale. Per ulteriori informazioni, consulta la sezione sull'adattamento vocale.
L'audio viene fornito a Cloud STT tramite il parametro audio di tipo
RecognitionAudio. Il campo
audio contiene uno dei due seguenti campi secondari:
contentcontiene l'audio da valutare, incorporato nella richiesta. Per saperne di più, consulta la sezione Incorporamento di contenuti audio. L'audio trasmesso direttamente in questo campo è limitato a 1 minuto di durata.uricontiene un URI che rimanda ai contenuti audio. Il file non deve essere compresso (ad esempio, gzip). Questo campo deve contenere un URI Cloud Storage (nel formatogs://bucket-name/path_to_audio_file). Vedi Trasmettere il riferimento audio tramite un URI.
Frequenze di campionamento
Specifichi la frequenza di campionamento dell'audio nel campo sampleRateHertz
della configurazione della richiesta e deve corrispondere alla frequenza di campionamento dell'audio
o dello stream associato. Le frequenze di campionamento comprese tra 8000 Hz e 48000 Hz sono supportate
in Cloud STT. Puoi specificare la frequenza di campionamento per un file FLAC o WAV nell'intestazione del file anziché utilizzare il campo sampleRateHertz.
Un file FLAC deve contenere la frequenza di campionamento nell'intestazione FLAC per poter essere
inviato all'API Speech-to-Text.
Se hai la possibilità di scegliere la codifica del materiale sorgente, acquisisci l'audio utilizzando una frequenza di campionamento di 16000 Hz. Valori inferiori a questo potrebbero compromettere l'accuratezza del riconoscimento vocale, mentre livelli superiori non hanno un effetto apprezzabile sulla qualità del riconoscimento vocale.
Tuttavia, se i dati audio sono già stati registrati a una frequenza di campionamento esistente diversa da 16000 Hz, non ricampionare l'audio a 16000 Hz. La maggior parte dell'audio di telefonia legacy, ad esempio, utilizza frequenze di campionamento di 8000 Hz, che potrebbero fornire risultati meno accurati. Se devi utilizzare questo tipo di audio, fornisci l'audio all'API Speech alla sua frequenza di campionamento originale.
Lingue
Il motore di riconoscimento di Cloud STT supporta una vasta gamma di lingue e dialetti. Specifica la lingua (e il dialetto nazionale o regionale) dell'audio nel campo languageCode della configurazione della richiesta, utilizzando un identificatore BCP-47.
Un elenco completo delle lingue supportate per ogni funzionalità è disponibile nella pagina Supporto delle lingue.
Offset temporali (timestamp)
Cloud STT può includere valori di offset temporale (timestamp) per l'inizio e la fine di ogni parola pronunciata riconosciuta nell'audio fornito. Un valore di offset temporale rappresenta il tempo trascorso dall'inizio dell'audio, in incrementi di 100 ms.
Gli offset temporali sono particolarmente utili per analizzare file audio più lunghi, in cui
potresti dover cercare una parola specifica nel testo riconosciuto e
trovarla (cercarla) nell'audio originale. Gli offset temporali sono supportati per tutti i nostri metodi di riconoscimento: recognize, streamingrecognize e longrunningrecognize.
I valori di offset temporale sono inclusi solo per la prima alternativa fornita nella risposta di riconoscimento.
Per includere gli offset temporali nei risultati della richiesta, imposta il
parametro enableWordTimeOffsets su true nella configurazione della richiesta. Per
esempi di utilizzo dell'API REST o delle librerie client, consulta
Utilizzo degli offset temporali (timestamp).
Ad esempio, puoi includere il parametro enableWordTimeOffsets nella
configurazione della richiesta come mostrato qui:
{ "config": { "languageCode": "en-US", "enableWordTimeOffsets": true }, "audio":{ "uri":"gs://gcs-test-data/gettysburg.flac" } }
Il risultato restituito dall'API Cloud Speech-to-Text conterrà i valori di offset temporale per ogni parola riconosciuta, come mostrato di seguito:
{ "name": "6212202767953098955", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata", "progressPercent": 100, "startTime": "2017-07-24T10:21:22.013650Z", "lastUpdateTime": "2017-07-24T10:21:45.278630Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [ { "alternatives": [ { "transcript": "Four score and twenty...(etc)...", "confidence": 0.97186122, "words": [ { "startTime": "1.300s", "endTime": "1.400s", "word": "Four" }, { "startTime": "1.400s", "endTime": "1.600s", "word": "score" }, { "startTime": "1.600s", "endTime": "1.600s", "word": "and" }, { "startTime": "1.600s", "endTime": "1.900s", "word": "twenty" }, ... ] } ] }, { "alternatives": [ { "transcript": "for score and plenty...(etc)...", "confidence": 0.9041967, } ] } ] } }
Selezione del modello
Cloud STT può utilizzare uno dei diversi modelli di machine learning per trascrivere il file audio. Google ha addestrato questi modelli di riconoscimento vocale per tipi e sorgenti audio specifici.
Quando invii una richiesta di trascrizione audio a Cloud STT, puoi migliorare i risultati che ricevi specificando la fonte dell'audio originale. In questo modo, l'API Cloud Speech-to-Text può elaborare i file audio utilizzando un modello di machine learning addestrato per riconoscere l'audio vocale di quel particolare tipo di origine.
Per specificare un modello per il riconoscimento vocale, includi il campo model
nell'oggetto RecognitionConfig per la tua
richiesta, specificando il modello che vuoi utilizzare.
Consulta l'elenco dei modelli di trascrizione Cloud STT per i modelli di machine learning disponibili.
Contenuti audio incorporati
L'audio incorporato è incluso nella richiesta di riconoscimento vocale quando viene passato un
parametro content all'interno del campo audio della richiesta. Per l'audio incorporato
fornito come contenuto all'interno di una richiesta gRPC, l'audio deve essere compatibile con
la serializzazione Proto3
e fornito come dati binari. Per l'audio incorporato fornito come contenuto all'interno di una richiesta REST, l'audio deve essere compatibile con la serializzazione JSON e deve essere codificato in Base64. Per ulteriori informazioni, vedi
Codifica in Base64 dell'audio.
Quando crei una richiesta utilizzando una
libreria client Google Cloud,
in genere scrivi questi dati binari (o codificati in base 64)
direttamente nel campo content.
Trasmettere l'audio a cui fa riferimento un URI
In genere, passi un parametro uri all'interno del campo audio della richiesta Speech, che punta a un file audio (in formato binario, non base64) che si trova in Cloud Storage nel seguente formato:
gs://bucket-name/path_to_audio_file
Ad esempio, la seguente parte di una richiesta Speech fa riferimento al file audio di esempio utilizzato nella guida rapida:
... "audio": { "uri":"gs://cloud-samples-tests/speech/brooklyn.flac" } ...
Devi disporre delle autorizzazioni di accesso appropriate per leggere i file Cloud Storage, ad esempio una delle seguenti:
- Leggibili pubblicamente (come i nostri file audio di esempio)
- Leggibile dal account di servizio, se utilizzi l'autorizzazione del account di servizio.
- Leggibile da un account utente, se utilizzi OAuth a tre vie per l'autorizzazione dell'account utente.
Per ulteriori informazioni sulla gestione dell'accesso a Cloud Storage, consulta Creazione e gestione degli elenchi di controllo dell'accesso nella documentazione di Cloud Storage.
Risposte dell'API Cloud Speech-to-Text
Come indicato in precedenza, una risposta sincrona dell'API Cloud Speech-to-Text potrebbe richiedere del tempo per restituire i risultati, proporzionale alla durata dell'audio fornito. Una volta elaborata, l'API restituirà una risposta come mostrato nel seguente blocco di codice:
{ "results": [ { "alternatives": [ { "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" } ] } ] }
resultscontiene l'elenco dei risultati (di tipoSpeechRecognitionResult) in cui ogni risultato corrisponde a un segmento audio (i segmenti audio sono separati da pause). Ogni risultato sarà costituito da uno o più dei seguenti campi:alternativescontiene un elenco di possibili trascrizioni, di tipoSpeechRecognitionAlternatives. La visualizzazione di più di un'alternativa dipende sia dal fatto che tu abbia richiesto più di un'alternativa (impostandomaxAlternativessu un valore maggiore di1) sia dal fatto che Cloud STT abbia prodotto alternative di qualità sufficientemente elevata. Ogni alternativa sarà composta dai seguenti campi:transcriptcontiene il testo trascritto. Vedi Gestire le trascrizioni.confidencecontiene un valore compreso tra0e1che indica il livello di confidenza di Cloud STT nella trascrizione fornita. Consulta Interpretazione dei valori di confidenza.
I componenti di questa risposta sono spiegati nelle sezioni seguenti.
Seleziona alternative
Ogni risultato all'interno di una risposta di riconoscimento sincrono riuscita può contenere uno o più alternatives (se il valore maxAlternatives per la richiesta è maggiore di 1). Se Cloud STT determina che un'alternativa ha un valore di confidenza sufficiente, questa viene inclusa nella risposta. La prima alternativa nella risposta è sempre la
migliore (più probabile).
Se imposti maxAlternatives su un valore superiore a 1, non è detto che vengano restituite più alternative. In generale, più di un'alternativa è più appropriata per fornire opzioni in tempo reale agli utenti che ottengono risultati utilizzando una richiesta di riconoscimento dello streaming.
Gestione delle trascrizioni
Ogni alternativa fornita nella risposta conterrà un transcript
contenente il testo riconosciuto. Se vengono fornite alternative sequenziali,
devi concatenare queste trascrizioni.
Il seguente codice Python scorre un elenco di risultati e concatena le trascrizioni. Tieni presente che in tutti i casi prendiamo la prima alternativa (la zero).
response = service_request.execute() recognized_text = 'Transcribed Text: \n' for i in range(len(response['results'])): recognized_text += response['results'][i]['alternatives'][0]['transcript']
Valori di confidenza
Il valore di confidence è una stima compresa tra 0.0 e 1.0. Viene calcolato
aggregando i valori di "probabilità " assegnati a ogni parola dell'audio. Un numero più alto indica una maggiore probabilità stimata che le singole parole siano state riconosciute correttamente. Questo campo viene in genere
fornito solo per l'ipotesi principale e solo per i risultati in cui
is_final=true. Ad esempio, puoi utilizzare il valore confidence
per decidere se mostrare
risultati alternativi
all'utente o chiedere una conferma.
Tieni presente, tuttavia, che il modello determina il risultato "migliore" e con il ranking più alto in base
a più indicatori rispetto al solo punteggio confidence (ad esempio il contesto della frase).
Per questo motivo, a volte il risultato migliore non
ha il punteggio di confidenza più alto. Se non hai richiesto più risultati alternativi, il singolo risultato "migliore" restituito potrebbe avere un valore di affidabilità inferiore al previsto. Ciò può verificarsi, ad esempio, nei casi in cui vengono utilizzate parole rare. A una parola usata raramente può essere assegnato un valore di "probabilità" basso
anche se viene riconosciuta correttamente. Se il modello determina che la parola rara è
l'opzione più probabile in base al contesto, il risultato viene restituito in alto anche
se il valore confidence del risultato è inferiore alle opzioni alternative.
Richieste e risposte asincrone
Una richiesta API Cloud Speech-to-Text asincrona al metodo LongRunningRecognize è identica nella forma a una richiesta API Cloud Speech-to-Text sincrona. Tuttavia, anziché restituire una risposta, la richiesta asincrona avvierà un'operazione a lunga esecuzione (di tipo Operazione) e restituirà immediatamente questa operazione al chiamante. Puoi utilizzare il riconoscimento vocale asincrono con audio di qualsiasi durata fino a 480 minuti.
Ad esempio:
{ "name": "operation_name", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata" "progressPercent": 34, "startTime": "2016-08-30T23:26:29.579144Z", "lastUpdateTime": "2016-08-30T23:26:29.826903Z" } }
Tieni presente che non sono ancora presenti risultati. Cloud STT continuerà a elaborare l'audio e a utilizzare questa operazione per archiviare i risultati. I risultati
vengono visualizzati nel campo response dell'operazione restituita al termine della richiesta LongRunningRecognize.
Il seguente esempio è una risposta completa dopo il completamento della richiesta:
{ "name": "1268386125834704889", "metadata": { "lastUpdateTime": "2016-08-31T00:16:32.169Z", "@type": "type.googleapis.com/google.cloud.speech.v1.LongrunningRecognizeMetadata", "startTime": "2016-08-31T00:16:29.539820Z", "progressPercent": 100 } "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [{ "alternatives": [{ "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" }]}] }, "done": True, }
Tieni presente che done è stato impostato su True e che response dell'operazione
contiene un insieme di risultati di tipo
SpeechRecognitionResult,
che è lo stesso tipo restituito da una richiesta di riconoscimento sincrono dell'API Cloud Speech-to-Text.
Richieste di riconoscimento dell'API Streaming Cloud Speech-to-Text
Una chiamata di riconoscimento dell'API Cloud Speech-to-Text in streaming è progettata per l'acquisizione e il riconoscimento in tempo reale dell'audio all'interno di un flusso bidirezionale. La tua applicazione può inviare audio nel flusso di richieste e ricevere risultati di riconoscimento intermedi e finali nel flusso di risposte in tempo reale. I risultati provvisori rappresentano il risultato del riconoscimento corrente per una sezione audio, mentre il risultato del riconoscimento finale rappresenta l'ultima migliore ipotesi per quella sezione audio.
Richieste di streaming
A differenza delle chiamate sincrone e asincrone, in cui invii sia la configurazione che l'audio in un'unica richiesta, la chiamata all'API Speech streaming richiede l'invio di più richieste. Il primo StreamingRecognizeRequest
deve contenere una configurazione di tipo
StreamingRecognitionConfig
senza audio di accompagnamento. I successivi StreamingRecognizeRequest inviati
tramite lo stesso stream saranno costituiti da frame consecutivi di byte audio non elaborati.
Un StreamingRecognitionConfig è costituito dai seguenti campi:
config: obbligatorio. Contiene le informazioni di configurazione per l'audio, di tipo RecognitionConfig ed è uguale a quelle mostrate nelle richieste sincrone e asincrone.single_utterance: (facoltativo, il valore predefinito èfalse) indica se questa richiesta deve terminare automaticamente dopo che non viene più rilevato il parlato. Se impostato, Cloud STT rileva pause, silenzi o audio non vocale per determinare quando terminare il riconoscimento. Se non impostato, lo stream continuerà ad ascoltare e a elaborare l'audio finché non viene chiuso direttamente o finché non viene superata la durata limite dello stream. L'impostazionesingle_utterancesutrueè utile per l'elaborazione dei comandi vocali.interim_results: (facoltativo, il valore predefinito èfalse) indica che questa richiesta di flusso deve restituire risultati temporanei che potrebbero essere perfezionati in un secondo momento (dopo l'elaborazione di altro audio). I risultati provvisori verranno annotati nelle risposte impostandois_finalsufalse.
Risposte dinamiche
I risultati del riconoscimento vocale di audio in streaming vengono restituiti in una serie di risposte di tipo StreamingRecognitionResponse. Una risposta di questo tipo è costituita dai seguenti campi:
speechEventTypecontiene eventi di tipo SpeechEventType. Il valore di questi eventi indicherà quando una singola espressione è stata completata. Gli eventi vocali fungono da indicatori all'interno della risposta dello stream.resultscontiene l'elenco dei risultati, che possono essere intermedi o finali, di tipo StreamingRecognitionResult. L'elencoresultscontiene i seguenti sottocampi:alternativescontiene un elenco di trascrizioni alternative.isFinalindica se i risultati ottenuti all'interno di questa voce di elenco sono provvisori o definitivi. Google potrebbe restituire più risultatiisFinal=truein un singolo stream, ma il risultatoisFinal=trueè garantito solo dopo la chiusura (chiusura parziale) dello stream di scrittura.stabilityindica la volatilità dei risultati ottenuti finora, con0.0che indica un'instabilità completa, mentre1.0indica una stabilità completa. Tieni presente che, a differenza della confidenza, che stima se una trascrizione è corretta,stabilitystima se il risultato parziale fornito potrebbe cambiare. SeisFinalè impostato sutrue,stabilitynon verrà impostato.