Costruzione della richiesta di Speech-to-Text

Questo documento è una guida alle nozioni di base sull'utilizzo di Speech-to-Text. Questa guida concettuale illustra i tipi di richieste che puoi effettuare a Speech-to-Text, come creare queste richieste e come a gestire le sue risposte. Prima di iniziare a utilizzare l'API stessa, consigliamo a tutti gli utenti di Speech-to-Text di leggere questa guida e uno dei tutorial associati.

Provalo

Se non hai mai utilizzato Google Cloud, crea un account per valutare in che modo Speech-to-Text funziona nel mondo reale diversi scenari. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Prova Speech-to-Text gratuitamente

Richieste vocali

Speech-to-Text prevede tre metodi principali per eseguire il riconoscimento vocale. Si tratta di elencate di seguito:

  • Il riconoscimento sincrono (REST e gRPC) invia i dati audio all'API Speech-to-Text, esegue il riconoscimento sui dati e restituisce i risultati dopo tutto l'audio è stata elaborata. Le richieste di riconoscimento sincrono sono limitate ai dati audio di durata pari o inferiore a 1 minuto.

  • Il riconoscimento asincrono (REST e gRPC) invia i dati audio all'API Speech-to-Text e avvia un'operazione a lunga esecuzione. Utilizzando questa operazione, puoi con un sondaggio periodico per ottenere i risultati del riconoscimento. Utilizza richieste asincrone per dati audio di qualsiasi durata fino a 480 minuti.

  • Il riconoscimento in streaming (solo gRPC) esegue il riconoscimento dei dati audio forniti all'interno di uno stream bidirezionale gRPC. Le richieste di streaming sono progettate per scopi di riconoscimento in tempo reale, ad esempio per acquisire audio in tempo reale da un microfono. Il riconoscimento in streaming fornisce risultati intermedi durante l'acquisizione dell'audio, consentendo la visualizzazione del risultato, ad esempio, mentre un utente sta ancora parlando.

Le richieste contengono parametri di configurazione e dati audio. Le seguenti queste sezioni descrivono questo tipo di richieste di riconoscimento, le risposte che generate e come gestirle in modo più dettagliato.

Riconoscimento dell'API Speech-to-Text

Una richiesta di riconoscimento sincrono dell'API Speech-to-Text è il metodo più semplice per eseguire il riconoscimento sui dati audio vocali. Speech-to-Text può elaborare fino a 1 minuto di dati audio vocale inviati in una richiesta sincrona. Dopo Speech-to-Text elabora e riconosce tutto l'audio, restituisce una risposta.

Una richiesta sincrona sta bloccando, il che significa che Speech-to-Text deve e restituire una risposta prima di elaborare la successiva. Speech-to-Text in genere elabora l'audio più velocemente del tempo reale, con l'elaborazione di 30 secondi di audio in media in 15 secondi. In caso di scarsa qualità audio, la richiesta di riconoscimento può richiedere molto più tempo.

Speech-to-Text dispone di metodi sia REST che gRPC per chiamare le richieste sincrone e asincrone dell'API Speech-to-Text. Questo articolo illustra le API REST perché è più semplice mostrare e spiegare l'utilizzo di base dell'API. Tuttavia, la composizione di base di una richiesta REST o gRPC è molto simile. Le richieste di riconoscimento dello streaming sono disponibili solo supportate da gRPC.

Richieste di riconoscimento vocale sincrono

Una richiesta sincrona dell'API Speech-to-Text è composta da una configurazione di riconoscimento vocale e da dati audio. Di seguito è riportata una richiesta di esempio:

{
    "config": {
        "encoding": "LINEAR16",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
    },
    "audio": {
        "uri": "gs://bucket-name/path_to_audio_file"
    }
}

Tutte le richieste di riconoscimento sincrona dell'API Speech-to-Text devono includere un riconoscimento vocale Campo config (di tipo RecognitionConfig). R RecognitionConfig contiene i seguenti campi secondari:

  • encoding (obbligatorio) specifica lo schema di codifica del token fornito (di tipo AudioEncoding). Se puoi scegliere il codec, preferisci una codifica senza perdita di dati come FLAC o LINEAR16 per le migliori prestazioni. Per ulteriori informazioni, consulta la sezione Codifiche audio. Il campo encoding è facoltativo per i file FLAC e WAV in cui il valore la codifica è inclusa nell'intestazione del file.
  • sampleRateHertz - (obbligatorio) specifica la frequenza di campionamento (in Hertz) del fornito l'audio. Per ulteriori informazioni sulle frequenze di campionamento, consulta la sezione Frequenze di campionamento di seguito. Il campo sampleRateHertz è facoltativo per i file FLAC e WAV in cui la frequenza di campionamento è inclusa nell'intestazione del file.
  • languageCode - (obbligatorio) contiene la lingua + la regione/regione da utilizzare per il riconoscimento vocale dell'audio fornito. Il codice lingua deve essere un Identificatore BCP-47. Tieni presente che i codici lingua generalmente consistono di tag lingua principali e di sottotag regione secondari per indicare i dialetti (ad esempio, "it" per l'italiano e "US" per gli Stati Uniti nel l'esempio precedente). Per un elenco delle lingue supportate, consulta Lingue supportate.
  • maxAlternatives (facoltativo, il valore predefinito è 1) indica il numero di trascrizioni alternative da fornire nella risposta. Per impostazione predefinita, L'API Speech-to-Text fornisce una trascrizione principale. Per valutare diverse alternative, imposta maxAlternatives su un valore più alto. Tieni presente che Text-to-Speech restituirà le alternative solo se il sistema di riconoscimento ritiene che siano 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 sono quindi più adatte per le richieste di riconoscimento in streaming.
  • profanityFilter - (facoltativo) indica se escludere le parole o le frasi profane. 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 agisce su singole parole e non rileva il linguaggio offensivo o illecito che si presenta sotto forma di frase o combinazione di parole.
  • speechContext - (facoltativo) contiene informazioni contestuali aggiuntive per l'elaborazione dell'audio. Un contesto contiene i seguenti campi secondari:
    • boost: contiene un valore che assegna un peso per riconoscere un determinato una parola o una frase.
    • phrases: contiene un elenco di parole e frasi che forniscono suggerimenti all'attività di riconoscimento vocale. Per ulteriori informazioni, consulta informazioni su adattamento vocale.

L'audio viene fornito a Speech-to-Text tramite il parametro audio del tipo RecognitionAudio. La Il campo audio contiene uno dei seguenti campi secondari:

  • content contiene l'audio da valutare, incorporato nella richiesta. Per saperne di più, consulta la sezione Incorporare contenuti audio di seguito. L'audio trasmesso direttamente all'interno di questo campo ha una durata massima di 1 minuto.
  • uri contiene un URI che rimanda ai contenuti audio. Il file non deve essere compresso (ad esempio gzip). Al momento, deve contenere un URI Google Cloud Storage (di formato gs://bucket-name/path_to_audio_file). Consulta: Passaggio del riferimento audio tramite un URI di seguito.

Di seguito sono riportate ulteriori informazioni su questi parametri di richiesta e risposta.

Frequenze di campionamento

La frequenza di campionamento dell'audio deve essere specificata nel campo sampleRateHertz della configurazione della richiesta e deve corrispondere a quella dei contenuti o dello stream audio associati. Sono supportate frequenze di campionamento comprese tra 8000 Hz e 48.000 Hz all'interno di Speech-to-Text. 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 puoi scegliere di codificare il materiale di origine, acquisisci l'audio utilizzando una di campionamento a 16000 Hz. Valori inferiori a questo valore potrebbero compromettere il riconoscimento vocale precisione e livelli più alti non influiscono in modo significativo sul riconoscimento vocale qualità.

Tuttavia, se i dati audio sono già stati registrati a una frequenza di campionamento esistente diversa da 16000 Hz, non eseguire il campionamento dell'audio a 16000 Hz. La maggior parte dell'audio di telefonia legacy, ad esempio, utilizza frequenze di campionamento di 8000 Hz, il che potrebbe dare risultati meno accurati. Se devi utilizzare audio di questo tipo, fornisci l'audio al sistema vocale all'API alla sua frequenza di campionamento nativa.

Linguaggi

Il motore di riconoscimento di Speech-to-Text supporta una varietà 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)

Speech-to-Text può includere valori di offset temporale (timestamp) per l'inizio e la fine di ogni parola pronunciata riconosciuta nell'audio fornito. Un orario rappresenta la quantità di tempo trascorso dall'inizio dell'audio in incrementi di 100 ms.

Gli offset temporali sono particolarmente utili per analizzare i file audio più lunghi, in cui potrebbe essere necessario cercare una parola particolare nel testo riconosciuto localizzala (cerca) nell'audio originale. Gli offset temporali sono supportati i nostri metodi di riconoscimento: recognize, streamingrecognize e longrunningrecognize.

I valori di offset temporale sono inclusi solo per la prima alternativa fornita in risposta al riconoscimento.

Per includere gli offset di tempo nei risultati della richiesta, imposta il parametroenableWordTimeOffsets su true nella configurazione della richiesta. Per di esempio utilizzando l'API REST o le librerie client, consulta Utilizzo degli scarti temporali (timestamp). Ad esempio, puoi includere il parametro enableWordTimeOffsets nella come mostrato qui:

{
"config": {
  "languageCode": "en-US",
  "enableWordTimeOffsets": true
  },
"audio":{
  "uri":"gs://gcs-test-data/gettysburg.flac"
  }
}

Il risultato restituito dall'API 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

Speech-to-Text può utilizzare uno di diversi modelli di machine learning per trascrivere il file audio. Google ha addestrato questi modelli di riconoscimento vocale per sorgenti e tipi di audio specifici.

Quando invii una richiesta di trascrizione audio a Speech-to-Text, puoi migliorare i risultati che ricevi specificando la sorgente dell'audio originale. Ciò consente API Speech-to-Text per elaborare i file audio utilizzando un addestrato per riconoscere l'audio vocale da quel modello particolare tipo di origine.

Per specificare un modello per il riconoscimento vocale, includi il campo model nell'oggetto RecognitionConfig per la richiesta, specificando il modello che vuoi utilizzare.

Consulta l'elenco dei modelli di trascrizione di Speech-to-Text 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. L'audio incorporato fornito come contenuto all'interno di una richiesta gRPC deve essere compatibile con la serializzazione Proto3 e fornito come dati binari. L'audio incorporato fornito come contenuto all'interno di una richiesta REST deve essere compatibile con la serializzazione JSON e deve essere prima codificato in Base64. Consulta: Codifica Base64 dell'audio per ulteriori informazioni.

Quando crei una richiesta utilizzando libreria client di Google Cloud, di solito scriverai questi dati binari (o con codifica Base64) direttamente nel campo content.

Passare l'audio a cui fa riferimento un URI

Più in genere, passerai un parametro uri all'interno del campo Campo audio, che punta a un file audio (in formato binario, non in base64) che si trovano in Google Cloud Storage con il seguente modulo:

gs://bucket-name/path_to_audio_file

Ad esempio, la parte seguente di una richiesta vocale fa riferimento all'audio di esempio file utilizzato nella Guida rapida:

...
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
    }
...

Devi disporre delle autorizzazioni di accesso appropriate per leggere i file di Google Cloud Storage, in uno dei seguenti modi:

  • Leggibili pubblicamente (come i nostri file audio di esempio)
  • Leggibile dal tuo account di servizio, se utilizzi l'autorizzazione dell'account di servizio.
  • Leggibile da un account utente, se utilizzi OAuth a tre vie per l'autorizzazione dell'account utente.

Ulteriori informazioni sulla gestione dell'accesso a Google Cloud Storage sono disponibili all'indirizzo Creazione e gestione degli elenchi di controllo dell'accesso nella documentazione di Google Cloud Storage.

Risposte dell'API Speech-to-Text

Come indicato in precedenza, una risposta dell'API Speech-to-Text sincrona potrebbe richiedere del tempo per restituire i risultati, in proporzione alla durata dell'audio fornito. Una volta elaborati, l'API restituirà una risposta come mostrato di seguito:

{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.98267895,
          "transcript": "how old is the Brooklyn Bridge"
        }
      ]
    }
  ]
}

Questi campi sono descritti di seguito:

  • results contiene l'elenco dei risultati (di tipo SpeechRecognitionResult) dove ogni risultato corrisponde a un segmento di audio (i segmenti di audio sono separati da pause). Ogni risultato sarà costituito da uno o più dei seguenti campi:
    • alternatives contiene un elenco di possibili trascrizioni di tipo SpeechRecognitionAlternatives. Se più alternative dipende dalla richiesta di più alternative (impostando maxAlternatives su un valore maggiore di 1) e a seconda se Speech-to-Text ha prodotto alternative di qualità sufficientemente elevata. Ogni alternativa sarà composta dai seguenti campi:

Se non è stato possibile riconoscere alcun parlato dall'audio fornito, l'elenco results restituito non conterrà elementi. Le parole non riconosciute sono spesso il risultato di un audio di pessima qualità. oppure da valori di codice lingua, codifica o frequenza di campionamento che non corrispondono l'audio fornito.

I componenti di questa risposta sono descritti nelle sezioni seguenti.

Ogni risposta sincrona dell'API Speech-to-Text restituisce un elenco di risultati. anziché un singolo risultato contenente tutto l'audio riconosciuto. L'elenco di l'audio riconosciuto (entro gli elementi transcript) verrà visualizzato in un ordine contiguo.

Seleziona le 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 è superiore a 1). Se Speech-to-Text determina che un'alternativa ha un valore di confidenza sufficiente, questa viene inclusa nella risposta. La prima alternativa nella risposta è sempre la migliore (molto probabilmente) alternativa.

L'impostazione di maxAlternatives su un valore superiore a 1 non implica né garantisce che verranno restituite più alternative. In generale, più di una un'alternativa è più appropriata per offrire opzioni in tempo reale agli utenti risultati tramite una richiesta di riconoscimento dello streaming.

Gestione delle trascrizioni

Ogni alternativa fornita nella risposta conterrà un transcript contenente il testo riconosciuto. Quando vengono fornite alternative sequenziali, devi concatenare queste trascrizioni.

Il seguente codice Python esegue l'iterazione su un elenco di risultati e concatena le trascrizioni. Tieni presente che in tutti i casi scegliamo 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 confidence è una stima compresa tra 0,0 e 1,0. Viene calcolato aggregando la "probabilità" assegnati a ogni parola audio. Un numero più alto indica una maggiore probabilità stimata che le singole parole sono state riconosciute correttamente. In genere, questo campo viene 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 conferma all'utente.

Tieni presente, però, che il modello determina il risultato "migliore" con il ranking più alto in base a più indicatori rispetto al solo punteggio confidence (ad esempio il contesto della frase). Per questo motivo, si verificano casi sporadici in cui il risultato principale con il punteggio di confidenza più alto. Se non hai richiesto più alternative risultati, il singolo "migliore" il risultato restituito può avere un valore di affidabilità più basso del previsto. Questo può verificarsi, ad esempio, nei casi in cui vengono utilizzate parole rare. A una parola usata raramente può essere assegnata una bassa "probabilità" valore anche se viene riconosciuto correttamente. Se il modello determina che la parola rara l'opzione più probabile in base al contesto, il risultato viene restituito se il valore confidence del risultato è inferiore a quello delle opzioni alternative.

Richieste e risposte asincrone

Una richiesta dell'API Speech-to-Text asincrona al metodo LongRunningRecognize. ha la forma identica a quella sincrona Richiesta API Speech-to-Text. Tuttavia, invece di restituire una risposta, la richiesta asincrona avvierà una Operazione a lunga esecuzione (di tipo Operazione) e restituire immediatamente questa operazione al destinatario. Puoi usare la modalità riconoscimento vocale con audio di qualsiasi durata fino a 480 minuti.

Di seguito è riportata una tipica risposta di un'operazione:

{
  "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"
  }
}

Nota che non sono ancora presenti risultati. Speech-to-Text continuerà a elaborare l'audio e a utilizzare questa operazione per memorizzare i risultati. I risultati compaiono nel campo response della operazione restituito quando LongRunningRecognize completata.

Di seguito è riportata una risposta completa al termine 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 l'elemento response dell'operazione contiene un insieme di risultati di tipo SpeechRecognitionResult dello stesso tipo restituito da una richiesta di riconoscimento sincrona dell'API Speech-to-Text.

Per impostazione predefinita, una risposta REST asincrona imposta done su False, il relativo valore predefinito. Tuttavia, poiché JSON non richiede che i valori predefiniti siano presenti in un campo, quando testi se un'operazione è stata completata, devi verificare sia che il campo done sia presente sia che sia impostato su True.

Richieste di riconoscimento dell'API Speech-to-Text in streaming

Una chiamata di riconoscimento dell'API Speech-to-Text in streaming è progettata per l'acquisizione e il riconoscimento in tempo reale dell'audio all'interno di uno stream bidirezionale. La tua applicazione può inviare audio sullo stream di richiesta e ricevere risultati di riconoscimento provvisori e finali sullo stream di risposta in tempo reale. I risultati intermedi rappresentano il risultato di riconoscimento corrente per una sezione di audio, mentre il risultato di riconoscimento finale rappresenta l'ultima e migliore supposizione per quella sezione di audio.

Richieste di streaming

A differenza delle chiamate sincrone e asincrone, in cui invii sia il comando configurazione e audio all'interno di una singola richiesta, chiamando lo streaming di Speech L'API richiede l'invio di più richieste. Il primo StreamingRecognizeRequest deve contenere una configurazione di tipo StreamingRecognitionConfig senza audio aggiuntivo. I StreamingRecognizeRequest successivi inviati sullo 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 quello mostrato nelle richieste sincrone e asincrone.
  • single_utterance - (facoltativo, il valore predefinito è false) indica se questa richiesta deve terminare automaticamente quando non viene più rilevato alcun parlato. Se impostato, Text-to-Speech rileva le interruzioni, i silenzi o l'audio non vocale per determinare quando terminare il riconoscimento. Se non viene configurato, lo stream continuerà ad ascoltare e elaborare l'audio finché lo stream non viene chiuso direttamente o la lunghezza limite è stata superata. L'impostazione di single_utterance su true è è utile per elaborare i comandi vocali.
  • interim_results (facoltativo, il valore predefinito è false) indica che questo la richiesta di streaming deve restituire risultati temporanei che possono essere perfezionati a in un secondo momento (dopo aver elaborato più audio). I risultati temporanei verranno annotati nelle risposte mediante l'impostazione di is_final su false.

Risposte dinamiche

I risultati del riconoscimento vocale in streaming vengono restituiti all'interno di una serie di risposte di tipo StreamingRecognitionResponse. Questa risposta è composta dai seguenti campi:

  • speechEventType contiene eventi di tipo SpeechEventType. Il valore di questi eventi indicherà quando è stato stabilito che un singolo enunciato è stato completato. Gli eventi vocali fungono da indicatori all'interno della risposta sviluppata dallo stream.
  • results contiene l'elenco dei risultati, che possono essere risultati intermedi o finali, di tipo StreamingRecognitionResult. L'elenco results contiene i seguenti campi secondari:
    • alternatives contiene un elenco di trascrizioni alternative.
    • isFinal indica se i risultati ottenuti in questa voce dell'elenco sono provvisori o definitivi. Google potrebbe restituire più risultati isFinal=true in un singolo stream, ma il risultato isFinal=true è garantito solo dopo la chiusura dello stream di scrittura (chiusura parziale).
    • stability indica la volatilità dei risultati ottenuti finora, con 0.0 indica completa instabilità mentre 1.0 indica completato la stabilità. Tieni presente che, a differenza dell'affidabilità, che stima se una trascrizione è corretta, stability stima se il risultato parziale dato può cambiare. Se il criterio isFinal viene impostato su true, stability non verrà impostato.