Utilizzo dell'API Speech-to-Text con Python

1. Panoramica

9e7124a578332fed.png

L'API Speech-to-Text consente agli sviluppatori di convertire l'audio in testo in oltre 125 lingue e varianti, applicando efficaci modelli di rete neurale in un'API facile da usare.

In questo tutorial, ti concentrerai sull'utilizzo dell'API Speech-to-Text con Python.

Cosa imparerai a fare

  • Come configurare l'ambiente
  • Come trascrivere file audio in inglese
  • Come trascrivere i file audio con timestamp delle parole
  • Come trascrivere file audio in diverse lingue

Che cosa ti serve

  • Un progetto Google Cloud
  • Un browser, ad esempio Chrome o Firefox
  • Dimestichezza nell'utilizzo di Python

Sondaggio

Come utilizzerai questo tutorial?

Solo lettura Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con Python?

Principiante Livello intermedio Eccellente

Come giudichi la tua esperienza con i servizi Google Cloud?

Principiante Livello intermedio Eccellente

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarla.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti soddisfa, potresti generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. L'esecuzione di questo codelab non ha alcun costo. Per arrestare le risorse ed evitare di incorrere in fatturazione dopo questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Mentre Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Attiva Cloud Shell

  1. Dalla console Cloud, fai clic su Attiva Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

Se è la prima volta che avvii Cloud Shell, ti verrà mostrata una schermata intermedia che descrive di cosa si tratta. Se ti è stata presentata una schermata intermedia, fai clic su Continua.

9c92662c6a846a5c.png

Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.

9f0e51b578fecce5.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto con un browser.

Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai eseguito l'autenticazione e che il progetto è impostato sul tuo ID progetto.

  1. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list

Output comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto:
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].

3. Configurazione dell'ambiente

Prima di poter iniziare a utilizzare l'API Speech-to-Text, esegui questo comando in Cloud Shell per abilitare l'API:

gcloud services enable speech.googleapis.com

Il risultato dovrebbe essere simile a questo:

Operation "operations/..." finished successfully.

Ora puoi utilizzare l'API Speech-to-Text.

Passa alla tua home directory:

cd ~

Crea un ambiente virtuale Python per isolare le dipendenze:

virtualenv venv-speech

Attiva l'ambiente virtuale:

source venv-speech/bin/activate

Installa IPython e la libreria client dell'API Speech-to-Text:

pip install ipython google-cloud-speech

Il risultato dovrebbe essere simile a questo:

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

A questo punto puoi utilizzare la libreria client dell'API Speech-to-Text.

Nei passaggi successivi, utilizzerai un interprete Python interattivo chiamato IPython, che hai installato nel passaggio precedente. Avvia una sessione eseguendo ipython in Cloud Shell:

ipython

Il risultato dovrebbe essere simile a questo:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Sei pronto per effettuare la tua prima richiesta...

4. Trascrivere file audio

In questa sezione trascriverai un file audio in inglese.

Copia il seguente codice nella tua sessione IPython:

from google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

Dedica un momento a studiare il codice e scopri in che modo utilizza il metodo della libreria client recognize per trascrivere un file audio*.* Il parametro config indica come elaborare la richiesta e il parametro audio specifica i dati audio da riconoscere.

Invia una richiesta:

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

Dovresti vedere l'output seguente:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

Aggiorna la configurazione per attivare la punteggiatura automatica e inviare una nuova richiesta:

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

Dovresti vedere l'output seguente:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

Riepilogo

In questo passaggio sei riuscito a trascrivere un file audio in inglese utilizzando parametri diversi e a stampare il risultato. Leggi ulteriori informazioni sulla trascrizione di file audio.

5. Recupero dei timestamp a livello di parola

Speech-to-Text è in grado di rilevare gli scarti temporali (timestamp) per l'audio trascritto. Gli offset temporali mostrano l'inizio e la fine di ogni parlato nell'audio fornito. Il valore di offset di tempo rappresenta la quantità di tempo trascorso dall'inizio dell'audio, in incrementi di 100 ms.

Per trascrivere un file audio con timestamp, aggiorna il codice copiando quanto segue nella sessione Python:

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

Prenditi un momento per studiare il codice e scoprire come trascrive un file audio con timestamp*.* Il parametro enable_word_time_offsets indica all'API di restituire gli offset temporali per ogni parola (per ulteriori dettagli, consulta il documento).

Invia una richiesta:

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

Dovresti vedere l'output seguente:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

Riepilogo

In questo passaggio, sei stato in grado di trascrivere un file audio in inglese con timestamp delle parole e stampare il risultato. Scopri di più su come ottenere i timestamp delle parole.

6. Trascrivere lingue diverse

L'API Speech-to-Text riconosce oltre 125 lingue e varianti. Puoi trovare un elenco delle lingue supportate qui.

In questa sezione trascriverai un file audio in francese.

Per trascrivere il file audio in francese, aggiorna il codice copiando quanto segue nella sessione IPython:

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

Dovresti vedere l'output seguente:

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

Riepilogo

In questo passaggio hai trascritto un file audio in francese e stampato il risultato. Scopri di più sulle lingue supportate.

7. Complimenti!

9e7124a578332fed.png

Hai imparato a utilizzare l'API Speech-to-Text utilizzando Python per eseguire diversi tipi di trascrizione sui file audio.

Esegui la pulizia

Per ripulire il tuo ambiente di sviluppo, da Cloud Shell:

  • Se sei ancora nella sessione Python, torna alla shell: exit
  • Interrompi l'utilizzo dell'ambiente virtuale Python: deactivate
  • Elimina la cartella dell'ambiente virtuale: cd ~ ; rm -rf ./venv-speech

Per eliminare il tuo progetto Google Cloud, da Cloud Shell:

  • Recupera il tuo ID progetto attuale: PROJECT_ID=$(gcloud config get-value core/project)
  • Assicurati che questo sia il progetto che vuoi eliminare: echo $PROJECT_ID
  • Elimina il progetto: gcloud projects delete $PROJECT_ID

Scopri di più

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.