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. Consigliamo a tutti gli utenti di Speech-to-Text leggi questa guida e uno dei tutorial associati prima di approfondire l'API stessa.

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 senza costi

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 sincrone sono limitate all'audio con una durata massima di 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 del flusso di dati (solo gRPC) esegue il riconoscimento sui dati audio forniti all'interno di un flusso bidirezionale gRPC. Le richieste di flusso sono progettate per scopi di riconoscimento in tempo reale, come acquisire l'audio in diretta da un microfono. Il riconoscimento streaming offre risultati provvisori durante l'acquisizione dell'audio, che consentono 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 sincrona dell'API Speech-to-Text è il metodo più semplice per l'esecuzione del riconoscimento con i 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, il riconoscimento potrebbe richiedere molto più tempo.

Speech-to-Text ha metodi REST e gRPC per le chiamate 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 sincrona

Una richiesta API Speech-to-Text sincrona è composta da una configurazione del riconoscimento vocale, audio e video. 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 vuoi scegliere il codec, una codifica senza perdita di dati come FLAC o LINEAR16 per le migliori prestazioni. Per ulteriori informazioni, vedi Codifica 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 Frequenza di campionamento riportata di seguito. Il campo sampleRateHertz è facoltativo per i file FLAC e WAV in cui il valore 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 in genere i codici lingua è composta da tag per la lingua principale e da sottotag per le regioni secondarie per indicare dialetti (ad es. "en" per l'inglese e "US" per gli Stati Uniti in nell'esempio precedente. (Per un elenco delle lingue supportate, vedi 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 Speech-to-Text restituirà alternative solo se il riconoscimento determina le alternative siano di qualità sufficiente; in generale, le alternative sono più appropriati per le richieste in tempo reale che richiedono il feedback degli utenti (ad ad esempio i comandi vocali) e quindi sono più adatti per lo streaming richieste di riconoscimento.
  • profanityFilter: (facoltativo) indica se filtrare ed escludere contenuti volgari parole o frasi. Le parole escluse contengono la prima lettera e asterischi per i caratteri rimanenti (ad es. f***). Linguaggio volgare il filtro opera su singole parole e non rileva contenuti illeciti o offensivi e parlato, ovvero una frase o una combinazione di parole.
  • speechContext - (Facoltativo) contiene ulteriori informazioni contestuali per elaborare questo 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 ulteriori informazioni, consulta la sezione Incorporare contenuti audio di seguito. L'audio trasmesso direttamente all'interno di questo campo ha una durata limitata a 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

Puoi specificare la frequenza di campionamento del tuo audio nel campo sampleRateHertz della configurazione della richiesta e deve corrispondere alla frequenza di campionamento dell'audio associato contenuti o lo stream. 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 valore FLAC 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 inviate all'API Speech-to-Text.

Se hai la possibilità di scegliere quando codifichi il materiale di origine, acquisisci l'audio usando 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 su un campione esistente diversa da 16000 Hz, non ricampionare l'audio a 16000 Hz. Più legacy l'audio della telefonia, ad esempio, utilizza frequenze di campionamento di 8000 Hz, che potrebbero fornire la precisione dei risultati. 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. Sei tu a specificare la lingua (e il dialetto nazionale o regionale) 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 Lingue supportate.

Compensazioni temporali (timestamp)

Speech-to-Text può includere valori di offset temporale (timestamp) per l'inizio e alla fine di ogni parlato riconosciuto dall'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 individuarla (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 scostamenti temporali nei risultati della richiesta, imposta il valore Parametro enableWordTimeOffsets 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à l'offset temporale per ogni parola riconosciuta, come illustrato 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 dei numerosi modelli models per trascrivere il tuo 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 ricevuti specificando la fonte dell'audio originale. Ciò consente API Speech-to-Text per elaborare i file audio utilizzando un addestrato per riconoscere l'audio vocale da quel particolare tipo di origine.

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

Consulta l'elenco dei modelli di trascrizione Speech-to-Text per i modelli di machine learning disponibili.

Contenuti audio incorporati

L'audio incorporato è incluso nella richiesta di riconoscimento vocale durante la trasmissione di un Parametro content all'interno del campo audio della richiesta. Per audio incorporato fornito come contenuto all'interno di una richiesta gRPC, l'audio deve essere compatibile Proto3 serializzati e forniti come dati binari. Per l'audio incorporato fornito come contenuti in una richiesta REST, l'audio deve essere compatibile con JSON la serializzazione e la codifica 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.

Trasmetti 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 su 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, come 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 si utilizza OAuth a tre vie per l'account utente autorizzazione.

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 sincrona dell'API Speech-to-Text potrebbe richiedere del tempo per restituire risultati, proporzionali 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 di risultati (di tipo SpeechRecognitionResult) in cui ogni risultato corrisponde a un segmento di audio (segmenti sono separate 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. Ciascuna sarà costituita dai seguenti campi:

Se l'audio fornito non viene riconosciuto, 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 alternative

Ciascun risultato all'interno di una risposta al riconoscimento sincrona con successo può contenere uno o più alternatives (se il valore maxAlternatives per la richiesta è maggiore di 1). Se Speech-to-Text determina che un'alternativa ha un numero sufficiente di Valore di confidenza, la soluzione alternativa è inclusa nel la 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 le trascrizioni.

Il seguente codice Python esegue l'iterazione su un elenco di risultati e concatena la delle trascrizioni insieme. Tieni presente che prendiamo la prima alternativa (lo zero) per tutti i casi.

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 la "probabilità" assegnati a ogni parola audio. Un numero più alto indica una maggiore probabilità stimata che le singole parole sono state riconosciute correttamente. Questo campo è in genere fornito solo per l'ipotesi superiore 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.

Tuttavia, tieni presente che il modello determina il "migliore" risultato con la posizione più alta in più indicatori rispetto al solo punteggio confidence (come il contesto della frase). Per questo motivo, si verificano casi sporadici in cui il risultato principale che hanno 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ò accadere, ad esempio, nei casi in cui le parole rare in uso. 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à elaborare l'audio e 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, viene impostata una risposta REST asincrona Da done a False, il valore predefinito; ma poiché JSON non richiede la presenza di valori predefiniti all'interno di un campo durante il test al completamento di un'operazione, devi verificare sia la Il campo done è presente ed è impostato su True.

Richieste di riconoscimento API Streaming Speech-to-Text

Una chiamata di riconoscimento API Speech-to-Text in modalità flusso è progettata per l'acquisizione e il riconoscimento audio all'interno di uno stream bidirezionale. La tua applicazione può inviare audio nello stream della richiesta e ricevere il riconoscimento temporaneo e finale sul flusso di risposte in tempo reale. I risultati provvisori rappresentano risultato corrente del riconoscimento per una sezione di audio, mentre Il risultato del riconoscimento rappresenta l'ultima ipotesi per quella sezione di audio.

Richieste di flussi di dati

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 alcun audio aggiuntivo. Invio di StreamingRecognizeRequest s successivi sullo stesso stream saranno quindi frame consecutivi di byte audio non elaborati.

Un StreamingRecognitionConfig è costituito dai seguenti campi:

  • config: (obbligatorio) contiene le informazioni di configurazione per l'audio, del tipo RecognitionConfig ed è uguale a quello mostrato all'interno delle richieste sincrone e asincrone.
  • single_utterance - (Facoltativo, il valore predefinito è false) indica se questo dovrebbe terminare automaticamente quando non verrà più rilevata la voce. Se impostato, Speech-to-Text rileva pause, silenzio o audio non vocale per determinare quando interrompere il riconoscimento. Se non viene configurato, lo streaming 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 del tipo StreamingRecognitionResponse. Questa risposta è composta dai seguenti campi:

  • speechEventType contiene eventi di tipo SpeechEventType. Il valore di questi eventi indicherà quando si è stabilito che una singola frase completata. Gli eventi vocali fungono da indicatori all'interno dello stream risposta.
  • results contiene l'elenco dei risultati, che possono essere provvisori o definitivi risultati, 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ù isFinal=true risultati per un singolo stream, ma il risultato isFinal=true è solo garantito dopo la chiusura dello stream di scrittura (mezza chiusura).
    • stability indica la volatilità dei risultati ottenuti finora, con 0.0 indica completa instabilità mentre 1.0 indica completato la stabilità. A differenza della confidenza, che stima se un la trascrizione è corretta, stability stima se la data il risultato parziale potrebbe cambiare. Se il criterio isFinal viene impostato su true, stability non verrà impostato.