1. סקירה כללית
Text-to-Speech API מאפשר למפתחים ליצור דיבור דמוי-אדם. ה-API ממיר טקסט לפורמטים של אודיו כמו WAV , MP3 או Ogg Opus. הוא גם תומך בקלט SSML (Speech Synthesis Markup Language) כדי לציין השהיות, מספרים, פורמט של תאריך ושעה והוראות אחרות להגייה.
במדריך הזה תלמדו להשתמש ב-API להמרת טקסט לדיבור (TTS) ב-Python.
מה תלמדו
- איך מגדירים את הסביבה
- איך מציגים את רשימת השפות הנתמכות
- איך מציינים את הקולות הזמינים
- איך לסנתז אודיו מטקסט
מה צריך להכין
סקר
איך תשתמשו במדריך הזה?
איזה דירוג מגיע לדעתך לחוויה שלך עם Python?
איזה דירוג מגיע לחוויה שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט. - לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
הפעלת Cloud Shell
- במסוף Cloud, לוחצים על Activate Cloud Shell
.
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים שמתוארת בו. אם הוצג לכם מסך ביניים, לוחצים על המשך.
ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.
במכונה הווירטואלית הזו נמצאים כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן.
אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שהפרויקט מאומת ושהפרויקט מוגדר לפי מזהה הפרויקט שלכם.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהאימות בוצע:
gcloud auth list
פלט הפקודה
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה ב-gcloud יודעת על הפרויקט שלכם:
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם היא לא נמצאת שם, תוכלו להגדיר אותה באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. הגדרת סביבה
כדי להתחיל להשתמש ב-Text-to-Speech API, מריצים את הפקודה הבאה ב-Cloud Shell כדי להפעיל את ה-API:
gcloud services enable texttospeech.googleapis.com
אתם אמורים לראות משהו כזה:
Operation "operations/..." finished successfully.
עכשיו אפשר להשתמש ב-API של המרת טקסט לדיבור (TTS)!
מנווטים לספריית הבית:
cd ~
יוצרים סביבה וירטואלית של Python כדי לבודד את יחסי התלות:
virtualenv venv-texttospeech
מפעילים את הסביבה הווירטואלית:
source venv-texttospeech/bin/activate
מתקינים את IPython ואת ספריית הלקוח של Text-to-Speech API:
pip install ipython google-cloud-texttospeech
אתם אמורים לראות משהו כזה:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
עכשיו אפשר להשתמש בספריית הלקוח של Text-to-Speech API.
בשלבים הבאים תשתמשו במפענח אינטראקטיבי של Python בשם IPython, שהתקנתם בשלב הקודם. כדי להתחיל סשן מריצים את ipython
ב-Cloud Shell:
ipython
אתם אמורים לראות משהו כזה:
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]:
עכשיו אפשר לשלוח את הבקשה הראשונה ולפרט את השפות הנתמכות...
4. הצגת רשימת השפות הנתמכות
בקטע הזה תוצג רשימה של כל השפות הנתמכות.
מעתיקים את הקוד הבא לסשן 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 "")
כדאי להקדיש כמה דקות כדי ללמוד את הקוד ולראות איך הוא משתמש בשיטת ספריית הלקוח list_voices
כדי ליצור את רשימת השפות הנתמכות.
קוראים לפונקציה:
list_languages()
אתם אמורים לקבל את הרשימה הבאה (או גדולה יותר):
---------------------- 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
ברשימה מוצגות 58 שפות וריאנטים, כמו:
- סינית וטיוואנית מנדרינית,
- אנגלית אוסטרלית, בריטית, הודית ואמריקאית,
- צרפתית מקנדה ומצרפת,
- פורטוגזית מברזיל ומפורטוגל.
הרשימה לא משתנה והיא מתפתחת ככל שיש עוד קולות חדשים זמינים.
סיכום
השלב הזה אפשר לך להציג את רשימת השפות הנתמכות.
5. הצגת רשימת הקולות הזמינים
בקטע הזה תוצג רשימת הקולות שזמינים בשפות שונות.
מעתיקים את הקוד הבא לסשן 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")
כדאי להקדיש רגע כדי ללמוד את הקוד ולראות איך הוא משתמש בשיטת ספריית הלקוח list_voices(language_code)
כדי להציג קולות שזמינים לשפה מסוימת.
עכשיו, מורידים את רשימת הקולות הזמינים בגרמנית:
list_voices("de")
אתם אמורים לראות משהו כזה:
------------------------ 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 ...
יש כמה קולות של נשים וגברים, והקולות הרגילים, WaveNet, Neural2 ו-Studio:
- הקולות הרגילים נוצרים על ידי אלגוריתמים לעיבוד אותות.
- הקולות של WaveNet, Neural2 ו-Studio הם קולות באיכות גבוהה יותר שמסונתזות באמצעות מודלים של למידת מכונה ונשמעים טבעיים יותר.
עכשיו, מורידים את רשימת הקולות הזמינים באנגלית:
list_voices("en")
אתם אמורים לקבל משהו כזה:
------------------------ 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 ...
בנוסף למבחר של קולות במגדרים ובאיכויות שונים, יש מגוון מבטאים: אוסטרליה, בריטית, הודית ואנגלית אמריקאית.
הקדישו כמה רגעים כדי לציין את הקולות הזמינים בשפות והווריאציות המועדפות עליכם (או אפילו בכולם):
list_voices("fr")
list_voices("pt")
list_voices()
סיכום
השלב הזה אפשר לך להציג את רשימת הקולות הזמינים. מידע נוסף על הקולות והשפות הנתמכים
6. סינתוז אודיו מטקסט
אפשר להשתמש ב-API של המרת טקסט לדיבור (TTS) כדי להמיר מחרוזת לנתוני אודיו. אפשר להגדיר את הפלט של סינתזת הדיבור במגוון דרכים, כולל בחירת קול ייחודי או שינוי הפלט בגובה הגובה, עוצמת הקול, קצב הדיבור וקצב הדגימה.
מעתיקים את הקוד הבא לסשן 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}"')
כדאי להקדיש רגע כדי ללמוד את הקוד ולראות איך הוא משתמש בשיטת ספריית הלקוח synthesize_speech
כדי ליצור את נתוני האודיו ולשמור אותם כקובץ wav
.
עכשיו, צרו משפטים בכמה הטעמות שונות:
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 ?")
אתם אמורים לראות משהו כזה:
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"
כדי להוריד בבת אחת את כל הקבצים שנוצרו, משתמשים בפקודה הבאה של Cloud Shell מסביבת Python:
!cloudshell download *.wav
אשר והדפדפן יוריד את הקבצים:
פותחים כל קובץ ושומעים את התוצאה.
סיכום
בשלב הזה הייתה לך אפשרות להשתמש ב-API של המרת טקסט לדיבור (TTS) כדי להמיר משפטים לקובצי wav
של אודיו. למידע נוסף על יצירת קובצי אודיו קולי.
7. מעולה!
למדת איך להשתמש ב-API של המרת טקסט לדיבור (Text-to-Speech API) באמצעות Python כדי ליצור דיבור דמוי-אדם!
הסרת המשאבים
כדי לנקות את סביבת הפיתוח, מבצעים את הפעולות הבאות ב-Cloud Shell:
- אם אתם עדיין נמצאים בסשן של IPython, עליכם לחזור למעטפת:
exit
- מפסיקים להשתמש בסביבה הווירטואלית של Python:
deactivate
- מוחקים את התיקייה של הסביבה הווירטואלית:
cd ~ ; rm -rf ./venv-texttospeech
כדי למחוק את הפרויקט ב-Google Cloud, צריך לבצע מתוך Cloud Shell:
- אחזור של מזהה הפרויקט הנוכחי:
PROJECT_ID=$(gcloud config get-value core/project)
- צריך לוודא שזה הפרויקט שרוצים למחוק:
echo $PROJECT_ID
- מוחקים את הפרויקט:
gcloud projects delete $PROJECT_ID
מידע נוסף
- בודקים את ההדגמה בדפדפן: https://cloud.google.com/text-to-speech
- תיעוד של המרת טקסט לדיבור (TTS): https://cloud.google.com/text-to-speech/docs
- Python ב-Google Cloud: https://cloud.google.com/python
- ספריות לקוח של Cloud ל-Python: https://github.com/googleapis/google-cloud-python
רישיון
היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.