Scopri di più sulle funzionalità di riconoscimento vocale

Speech-to-Text è una delle tre API preaddestrate di Vertex AI su Google Distributed Cloud (GDC) con air gap. Il servizio Speech-to-Text riconosce il parlato nei file audio e lo trascrive in testo. Speech-to-Text soddisfa i requisiti di residenza dei dati e conformità.

La tabella seguente descrive le funzionalità principali di Speech-to-Text:

Funzionalità chiave
Trascrizione Applica avanzati algoritmi di rete neurale di deep learning per il riconoscimento vocale automatico.
Modelli Esegui il deployment di modelli di riconoscimento di dimensioni inferiori a 1 GB e che consumano risorse minime.
Compatibilità con l'API Utilizza l'API Speech-to-Text e le relative librerie client per inviare audio e ricevere una trascrizione del testo dal servizio Speech-to-Text.

Codifiche audio supportate per Speech-to-Text

L'API Speech-to-Text supporta diverse codifiche. La tabella seguente elenca i codec audio supportati:

Codec Nome Lossless Note sull'utilizzo
FLAC Free Lossless Audio Codec Sì 16 bit o 24 bit richiesti per gli stream
LINEAR16 PCM lineare Sì Codifica PCM (Pulse-Code Modulation) lineare a 16 bit. L'intestazione deve contenere la frequenza di campionamento.
MULAW μ-law No Codifica PCM a 8 bit
OGG_OPUS Frame audio con codifica Opus in un container Ogg No La frequenza di campionamento deve essere 8000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz o 48.000 Hz

FLAC è sia un codec audio sia un formato file audio. Per trascrivere i file audio utilizzando la codifica FLAC, devi fornirli nel formato file .FLAC, che include un'intestazione contenente i metadati.

Speech-to-Text supporta i file WAV con audio codificato LINEAR16 o MULAW.

Per ulteriori informazioni sui codec audio di Speech-to-Text, consulta la documentazione di riferimento di AudioEncoding.

Se hai la possibilità di scegliere durante la codifica del materiale di origine, utilizza una codifica lossless come FLAC o LINEAR16 per un riconoscimento vocale migliore.

Funzionalità di Speech-to-Text

Speech-to-Text su Distributed Cloud prevede i seguenti tre metodi per eseguire il riconoscimento vocale:

  • Riconoscimento sincrono: invia i dati audio all'API Speech-to-Text, esegue il riconoscimento su questi dati e restituisce i risultati dopo l'elaborazione dell'audio. Le richieste di riconoscimento sincrono sono limitate a un minuto o meno di dati audio.

  • Riconoscimento asincrono: invia i dati audio all'API Speech-to-Text e avvia un'operazione a lunga esecuzione. Utilizzando questa operazione, puoi eseguire periodicamente il polling dei risultati del riconoscimento. Utilizza le richieste asincrone per i dati audio di qualsiasi durata fino a 480 minuti.

  • Riconoscimento in streaming: esegue il riconoscimento sui dati audio forniti all'interno di uno stream bidirezionale. Le richieste di streaming sono progettate per scopi di riconoscimento in tempo reale, ad esempio per acquisire l'audio in diretta 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 in modo più dettagliato queste richieste di riconoscimento, le risposte che generano e come gestirle.

Richieste e risposte sincrone

Una richiesta di riconoscimento sincrono di Speech-to-Text è il metodo più semplice per eseguire il riconoscimento dei dati audio vocali. Speech-to-Text può elaborare fino a un minuto di dati audio vocali inviati in una richiesta sincrona. Dopo che Speech-to-Text ha elaborato e riconosciuto tutto l'audio, restituisce una risposta.

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

Richieste di riconoscimento vocale

Una richiesta API Speech-to-Text sincrona è costituita da una configurazione del riconoscimento vocale e da dati audio.

I seguenti esempi mostrano come inviare una richiesta di riconoscimento vocale sincrono:

Python

import google.auth
from google.auth.transport import requests
from google.api_core.client_options import ClientOptions
from google.cloud import speech_v1p1beta1 as speech

audience = "https://ENDPOINT:443"
api_endpoint = "ENDPOINT:443"

try:
  creds, _ = google.auth.default()
  creds = creds.with_gdch_audience(audience)
  def_req = requests.Request()
  creds.refresh(def_req)
except Exception as e:
  print("Caught exception", e)
  raise e

client = speech.SpeechClient(
    credentials=creds,
    client_options=ClientOptions(api_endpoint=api_endpoint),
)

with open("SPEECH_FILE", "rb") as audio_file:
  content = audio_file.read()

audio = speech.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
    encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    audio_channel_count=1,
    language_code="en-US",
)

response = client.recognize(
    config=config,
    audio=audio,
    metadata=[("x-goog-user-project", "projects/PROJECT_ID")],
)
print(response)

Sostituisci quanto segue:

  • ENDPOINT: l'endpoint Speech-to-Text che utilizzi per la tua organizzazione. Per saperne di più, visualizza lo stato del servizio e gli endpoint.
  • SPEECH_FILE: il percorso del file audio che vuoi trascrivere.
  • PROJECT_ID: il tuo ID progetto.

curl (JSON)

In Distributed Cloud, l'API Gateway Speech-to-Text gestisce gRPC utilizzando speech_v1p1beta1 e non abilita la transcodifica REST HTTP/JSON per impostazione predefinita. Utilizza il client gRPC Python speech_v1p1beta1 precedente su Distributed Cloud.

Se la transcodifica HTTP/JSON è abilitata, formatta la richiesta come segue:

curl -X POST \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -H "x-goog-user-project: projects/PROJECT_ID" \
  --data '{
    "config": {
      "encoding": "FLAC",
      "sampleRateHertz": 16000,
      "languageCode": "en-US",
      "audioChannelCount": 1
    },
    "audio": {
      "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
    }
  }' \
  "https://ENDPOINT:443/v1p1beta1/speech:recognize"

Sostituisci quanto segue:

Tutte le richieste di riconoscimento sincrono di Speech-to-Text devono includere un campo config di riconoscimento vocale di tipo RecognitionConfig. Un oggetto RecognitionConfig contiene i seguenti campi secondari obbligatori:

  • encoding: specifica lo schema di codifica dell'audio fornito. Questo campo è di tipo AudioEncoding. Se puoi scegliere un codec, preferisci una codifica lossless come FLAC o LINEAR16 per ottenere le migliori prestazioni. Per un elenco dei formati di codifica audio supportati, consulta Codifiche audio supportate per Speech-to-Text.
  • sample_rate_hertz: specifica la frequenza di campionamento dell'audio fornito in hertz (8000-48000). Per ulteriori informazioni sulle frequenze di campionamento, consulta Frequenze di campionamento. Il campo sample_rate_hertz è obbligatorio per le codifiche LINEAR16, FLAC e MULAW (inclusi i file WAV).
  • audio_channel_count: specifica il numero di canali nei dati audio di input (1-8, ad esempio 1 per l'audio mono). Il campo audio_channel_count è obbligatorio per l'audio LINEAR16, FLAC e MULAW.
  • language_code: contiene la lingua e la regione da utilizzare per il riconoscimento vocale dell'audio fornito. Il codice lingua deve essere un identificatore BCP-47. I codici lingua sono costituiti da tag di lingua principali e sottotag di regione secondari per indicare i dialetti. Nell'esempio, en indica l'inglese e US indica gli Stati Uniti. Per un elenco delle lingue supportate, consulta Lingue supportate.

Per ulteriori informazioni e una descrizione dei campi secondari facoltativi che puoi includere nel campo config, consulta RecognitionConfig.

Fornisci l'audio a Speech-to-Text tramite il parametro audio di tipo RecognitionAudio. Il campo audio contiene il seguente campo secondario:

  • content: contiene l'audio da valutare, incorporato nella richiesta. I byte dei dati audio sono codificati utilizzando una rappresentazione binaria pura. Le rappresentazioni JSON utilizzano Base64. Per saperne di più, consulta Contenuti audio incorporati. L'audio passato direttamente all'interno di questo campo è limitato a un minuto di durata.

Frequenze di campionamento

La frequenza di campionamento dell'audio viene specificata nel campo sample_rate_hertz della configurazione della richiesta e deve corrispondere alla frequenza di campionamento dei contenuti audio associati. Speech-to-Text supporta frequenze di campionamento comprese tra 8000 Hz e 48.000 Hz (8000-48000). Il campo sample_rate_hertz è obbligatorio per le codifiche LINEAR16, FLAC e MULAW (inclusi i file WAV).

Se hai la possibilità di scegliere durante la codifica del materiale di origine, acquisisci l'audio utilizzando una frequenza di campionamento di 16.000 Hz. Valori inferiori potrebbero compromettere l'accuratezza del riconoscimento vocale, mentre livelli superiori non hanno un effetto apprezzabile sulla qualità del riconoscimento vocale.

Tuttavia, se hai registrato i dati audio con una frequenza di campionamento diversa da 16.000 Hz, non ricampionare l'audio a 16.000 Hz. Ad esempio, la maggior parte dell'audio di telefonia legacy utilizza frequenze di campionamento di 8000 Hz, che potrebbero fornire risultati meno accurati. Se devi utilizzare questo tipo di audio, forniscilo all'API Speech-to-Text con la frequenza di campionamento originale.

Lingue

Il motore di riconoscimento di Speech-to-Text supporta una varietà di lingue e dialetti. Specifica la lingua dell'audio (e il dialetto nazionale o regionale) nel campo language_code della configurazione della richiesta utilizzando un identificatore BCP-47.

La pagina Lingue supportate contiene un elenco completo delle lingue supportate per ogni funzionalità.

Selezione del modello

Quando invii una richiesta di trascrizione audio a Speech-to-Text, puoi elaborare i tuoi file audio utilizzando un modello di machine learning addestrato per riconoscere l'audio vocale di quel particolare tipo di origine.

Per utilizzare il modello di riconoscimento vocale predefinito su Distributed Cloud, ometti il campo model nell'oggetto RecognitionConfig o imposta model su latest_long. Non impostare model su default.

Contenuti audio incorporati

L'audio incorporato viene 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 REST deve essere compatibile con la serializzazione JSON.

Puoi inviare i dati direttamente nel campo content per il riconoscimento sincrono solo se i dati audio hanno una durata massima di 60 secondi e una dimensione massima di 10 MB. I dati audio nel campo content devono essere in formato Base64.

Quando crei una richiesta utilizzando una libreria client, scrivi questi dati binari o con codifica Base64 direttamente nel campo content.

La maggior parte degli ambienti di sviluppo è dotata di un'utilità base64 per codificare un file binario in dati di testo ASCII, fornendoti gli strumenti e il supporto necessari. Inoltre, Python dispone di meccanismi integrati per la codifica dei contenuti in Base64. I seguenti esempi mostrano come codificare un file:

Linux

Codifica il file utilizzando lo strumento a riga di comando base64. Evita l'andata a capo automatica utilizzando il flag -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

In Python, codifica i file audio in Base64 come segue:

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Risposte del riconoscimento vocale

Una risposta sincrona dell'API Speech-to-Text potrebbe richiedere del tempo per restituire i risultati. Una volta elaborata, l'API restituisce una risposta come nell'esempio seguente:

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

Tutte le risposte di riconoscimento sincrono dell'API Speech-to-Text includono i risultati del riconoscimento vocale di tipo RecognizeResponse. Un oggetto RecognizeResponse contiene i seguenti campi:

  • results: contiene l'elenco dei risultati di tipo SpeechRecognitionResult, dove ogni risultato corrisponde a un segmento di audio. Ogni risultato è composto da uno o più dei seguenti campi secondari:

    • alternatives: contiene un elenco di possibili trascrizioni di tipo SpeechRecognitionAlternative. La prima alternativa nella risposta è sempre la più probabile. Ogni alternativa è composta dai seguenti campi secondari:

      • transcript: contiene il testo trascritto. Se ti vengono fornite alternative sequenziali, puoi concatenare queste trascrizioni.
      • words: contiene un elenco di informazioni specifiche per ogni parola riconosciuta.

Per saperne di più, consulta RecognizeResponse.

Richieste e risposte asincrone

Una richiesta API asincrona a Speech-to-Text ha la stessa forma di una richiesta sincrona. Tuttavia, anziché restituire una risposta, la richiesta asincrona avvia un'operazione a lunga esecuzione e la restituisce immediatamente. Puoi utilizzare il riconoscimento vocale asincrono con audio di qualsiasi durata fino a 480 minuti.

Di seguito è riportato un esempio di risposta di un'operazione:

{
  "name": "OPERATION_NAME",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata",
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

Tieni presente che i risultati non sono ancora presenti. Speech-to-Text continua a elaborare l'audio e utilizza questa operazione per archiviare i risultati. I risultati vengono visualizzati nel campo response dell'operazione restituita al termine della richiesta LongRunningRecognize.

Di seguito è riportato un esempio di risposta completa dopo il completamento della richiesta:

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  },
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "transcript": "how old is the Brooklyn Bridge",
        "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
      }]}]
  },
  "done": true
}

Tieni presente che done è impostato su true e che response dell'operazione contiene un insieme di risultati di tipo SpeechRecognitionResult, lo stesso tipo restituito da una richiesta di riconoscimento sincrono.

Flussi di dati per richieste e risposte

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 nello stream di richiesta e ricevere risultati di riconoscimento provvisori e finali in tempo reale nello stream di risposta. I risultati provvisori rappresentano il risultato del riconoscimento corrente per una sezione dell'audio, mentre il risultato del riconoscimento finale rappresenta l'ultima e migliore ipotesi per quella sezione dell'audio.

Richieste di riconoscimento in streaming

A differenza delle chiamate sincrone e asincrone, in cui invii sia la configurazione che l'audio all'interno di una singola richiesta, la chiamata all'API Speech-to-Text in modalità flusso di dati richiede l'invio di più richieste. Il primo StreamingRecognizeRequest deve contenere una configurazione di tipo StreamingRecognitionConfig.

Un StreamingRecognitionConfig è costituito dal campo config, che contiene le informazioni di configurazione per l'audio di tipo RecognitionConfig ed è uguale a quello mostrato nelle richieste sincrone e asincrone.

Risposte di riconoscimento in streaming

I risultati del riconoscimento vocale di audio in streaming restituiscono una serie di risposte di tipo StreamingRecognizeResponse. Una risposta di questo tipo è costituita dai seguenti campi:

  • speech_event_type: contiene eventi di tipo SpeechEventType. Il valore di questi eventi indica quando è stata completata una singola espressione. Gli eventi vocali fungono da indicatori all'interno della risposta dello stream.
  • results: contiene l'elenco dei risultati, che possono essere provvisori o finali, di tipo StreamingRecognitionResult. L'elenco results include i seguenti campi secondari:
    • alternatives: contiene un elenco di trascrizioni alternative.
    • is_final: indica se i risultati ottenuti all'interno di questa voce dell'elenco sono provvisori o definitivi.
    • result_end_time: indica l'offset temporale della fine di questo risultato rispetto all'inizio dell'audio.