1. Panoramica
L'API Text-to-Speech consente agli sviluppatori di generare una sintesi vocale simile a quella umana. L'API converte il testo in formati audio come WAV, MP3 o Ogg Opus. Supporta inoltre gli input SSML (Speech Synthesis Markup Language) per specificare pause, numeri, formattazione di data e ora e altre istruzioni relative alla pronuncia.
In questo tutorial, ti concentrerai sull'utilizzo dell'API Text-to-Speech con Python.
Cosa imparerai a fare
- Come configurare l'ambiente
- Come elencare le lingue supportate
- Come elencare le voci disponibili
- Come sintetizzare l'audio dal testo
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?
Come valuteresti la tua esperienza con Python?
Come giudichi la tua esperienza con i servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- 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.
- 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.
- 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
- Dalla console Cloud, fai clic su Attiva Cloud Shell .
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.
Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.
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.
- 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`
- 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 Text-to-Speech, esegui questo comando in Cloud Shell per abilitare l'API:
gcloud services enable texttospeech.googleapis.com
Il risultato dovrebbe essere simile a questo:
Operation "operations/..." finished successfully.
Ora puoi utilizzare l'API Text-to-Speech.
Passa alla tua home directory:
cd ~
Crea un ambiente virtuale Python per isolare le dipendenze:
virtualenv venv-texttospeech
Attiva l'ambiente virtuale:
source venv-texttospeech/bin/activate
Installa IPython e la libreria client dell'API Text-to-Speech:
pip install ipython google-cloud-texttospeech
Il risultato dovrebbe essere simile a questo:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
A questo punto puoi utilizzare la libreria client dell'API Text-to-Speech.
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]:
Puoi effettuare la tua prima richiesta ed elencare le lingue supportate...
4. Elenca le lingue supportate
In questa sezione troverai l'elenco di tutte le lingue supportate.
Copia il seguente codice nella tua sessione IPython:
from typing import Sequence
import google.cloud.texttospeech as tts
def unique_languages_from_voices(voices: Sequence[tts.Voice]):
language_set = set()
for voice in voices:
for language_code in voice.language_codes:
language_set.add(language_code)
return language_set
def list_languages():
client = tts.TextToSpeechClient()
response = client.list_voices()
languages = unique_languages_from_voices(response.voices)
print(f" Languages: {len(languages)} ".center(60, "-"))
for i, language in enumerate(sorted(languages)):
print(f"{language:>10}", end="\n" if i % 5 == 4 else "")
Dedica un momento a studiare il codice e vedere come utilizza il metodo della libreria client list_voices
per creare l'elenco dei linguaggi supportati.
Richiama la funzione:
list_languages()
Dovresti visualizzare il seguente elenco (o un elenco più ampio):
---------------------- Languages: 58 ----------------------- af-ZA am-ET ar-XA bg-BG bn-IN ca-ES cmn-CN cmn-TW cs-CZ da-DK de-DE el-GR en-AU en-GB en-IN en-US es-ES es-US eu-ES fi-FI fil-PH fr-CA fr-FR gl-ES gu-IN he-IL hi-IN hu-HU id-ID is-IS it-IT ja-JP kn-IN ko-KR lt-LT lv-LV ml-IN mr-IN ms-MY nb-NO nl-BE nl-NL pa-IN pl-PL pt-BR pt-PT ro-RO ru-RU sk-SK sr-RS sv-SE ta-IN te-IN th-TH tr-TR uk-UA vi-VN yue-HK
L'elenco mostra 58 lingue e varianti come:
- Cinese e mandarino taiwanese,
- inglese australiano, britannico, indiano e americano,
- Francese da Canada e Francia,
- Portoghese dal Brasile e dal Portogallo.
Questo elenco non è fisso e cresce man mano che sono disponibili nuove voci.
Riepilogo
Questo passaggio ti ha consentito di elencare le lingue supportate.
5. Elenco voci disponibili
In questa sezione viene visualizzato l'elenco delle voci disponibili in diverse lingue.
Copia il seguente codice nella tua sessione IPython:
import google.cloud.texttospeech as tts
def list_voices(language_code=None):
client = tts.TextToSpeechClient()
response = client.list_voices(language_code=language_code)
voices = sorted(response.voices, key=lambda voice: voice.name)
print(f" Voices: {len(voices)} ".center(60, "-"))
for voice in voices:
languages = ", ".join(voice.language_codes)
name = voice.name
gender = tts.SsmlVoiceGender(voice.ssml_gender).name
rate = voice.natural_sample_rate_hertz
print(f"{languages:<8} | {name:<24} | {gender:<8} | {rate:,} Hz")
Dedica un momento allo studio del codice e scopri come utilizza il metodo della libreria client list_voices(language_code)
per elencare le voci disponibili per una determinata lingua.
Ora, recupera l'elenco delle voci tedesche disponibili:
list_voices("de")
Il risultato dovrebbe essere simile a questo:
------------------------ Voices: 20 ------------------------ de-DE | de-DE-Neural2-A | FEMALE | 24,000 Hz de-DE | de-DE-Neural2-B | MALE | 24,000 Hz ... de-DE | de-DE-Standard-A | FEMALE | 24,000 Hz de-DE | de-DE-Standard-B | MALE | 24,000 Hz ... de-DE | de-DE-Studio-B | MALE | 24,000 Hz de-DE | de-DE-Studio-C | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-A | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-B | MALE | 24,000 Hz ...
Sono disponibili più voci femminili e maschili, oltre a voci standard, WaveNet, Neural2 e Studio:
- Le voci standard vengono generate da algoritmi di elaborazione degli indicatori.
- Le voci WaveNet, Neural2 e Studio sono voci di qualità superiore sintetizzate da modelli di machine learning e dal suono più naturale.
Ora, recupera l'elenco delle voci inglesi disponibili:
list_voices("en")
Dovresti ottenere qualcosa del genere:
------------------------ Voices: 90 ------------------------ en-AU | en-AU-Neural2-A | FEMALE | 24,000 Hz ... en-AU | en-AU-Wavenet-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Neural2-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Wavenet-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Standard-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Wavenet-A | FEMALE | 24,000 Hz ... en-US | en-US-Neural2-A | MALE | 24,000 Hz ... en-US | en-US-News-K | FEMALE | 24,000 Hz ... en-US | en-US-Standard-A | MALE | 24,000 Hz ... en-US | en-US-Studio-M | MALE | 24,000 Hz ... en-US | en-US-Wavenet-A | MALE | 24,000 Hz ...
Oltre a una selezione di più voci di genere e qualità diversi, sono disponibili diversi accenti: inglese australiano, britannico, indiano e americano.
Dedica un momento ad elencare le voci disponibili per le tue lingue preferite e le tue varianti (o anche per tutte):
list_voices("fr")
list_voices("pt")
list_voices()
Riepilogo
Questo passaggio ti ha consentito di elencare le voci disponibili. Scopri di più sulle voci e sulle lingue supportate.
6. Sintetizza audio dal testo
Puoi utilizzare l'API Text-to-Speech per convertire una stringa in dati audio. Puoi configurare l'output della sintesi vocale in diversi modi, ad esempio selezionando una voce univoca o modulando l'output in termini di tonalità, volume, velocità del parlato e frequenza di campionamento.
Copia il seguente codice nella tua sessione IPython:
import google.cloud.texttospeech as tts
def text_to_wav(voice_name: str, text: str):
language_code = "-".join(voice_name.split("-")[:2])
text_input = tts.SynthesisInput(text=text)
voice_params = tts.VoiceSelectionParams(
language_code=language_code, name=voice_name
)
audio_config = tts.AudioConfig(audio_encoding=tts.AudioEncoding.LINEAR16)
client = tts.TextToSpeechClient()
response = client.synthesize_speech(
input=text_input,
voice=voice_params,
audio_config=audio_config,
)
filename = f"{voice_name}.wav"
with open(filename, "wb") as out:
out.write(response.audio_content)
print(f'Generated speech saved to "{filename}"')
Dedica un momento a studiare il codice e scopri in che modo utilizza il metodo della libreria client synthesize_speech
per generare i dati audio e salvarli come file wav
.
Ora genera frasi con diversi accenti:
text_to_wav("en-AU-Neural2-A", "What is the temperature in Sydney?")
text_to_wav("en-GB-Neural2-B", "What is the temperature in London?")
text_to_wav("en-IN-Wavenet-C", "What is the temperature in Delhi?")
text_to_wav("en-US-Studio-O", "What is the temperature in New York?")
text_to_wav("fr-FR-Neural2-A", "Quelle est la température à Paris ?")
text_to_wav("fr-CA-Neural2-B", "Quelle est la température à Montréal ?")
Il risultato dovrebbe essere simile a questo:
Generated speech saved to "en-AU-Neural2-A.wav" Generated speech saved to "en-GB-Neural2-B.wav" Generated speech saved to "en-IN-Wavenet-C.wav" Generated speech saved to "en-US-Studio-O.wav" Generated speech saved to "fr-FR-Neural2-A.wav" Generated speech saved to "fr-CA-Neural2-B.wav"
Per scaricare tutti i file generati contemporaneamente, puoi utilizzare questo comando di Cloud Shell dal tuo ambiente Python:
!cloudshell download *.wav
Convalida i file nel browser:
Apri ciascun file e ascolta il risultato.
Riepilogo
In questo passaggio hai potuto utilizzare l'API Text-to-Speech per convertire frasi in file audio wav
. Scopri di più sulla creazione di file audio vocali.
7. Complimenti
Hai imparato a utilizzare l'API Text-to-Speech usando Python per generare una sintesi vocale simile a quella umana.
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-texttospeech
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ù
- Testa la demo nel tuo browser: https://cloud.google.com/text-to-speech
- Documentazione di Text-to-Speech: https://cloud.google.com/text-to-speech/docs
- Python su Google Cloud: https://cloud.google.com/python
- Librerie client di Cloud per Python: https://github.com/googleapis/google-cloud-python
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.