استفاده از API Text-to-Speech با پایتون

1. بررسی اجمالی

1215f38908082356.png

Text-to-Speech API توسعه دهندگان را قادر می سازد تا گفتار انسان گونه تولید کنند. API متن را به فرمت های صوتی مانند WAV، MP3 یا Ogg Opus تبدیل می کند. همچنین از ورودی های Speech Synthesis Markup Language (SSML) برای تعیین مکث ها، اعداد، قالب بندی تاریخ و زمان و سایر دستورالعمل های تلفظ پشتیبانی می کند.

در این آموزش، شما بر روی استفاده از Text-to-Speech API با پایتون تمرکز خواهید کرد.

چیزی که یاد خواهید گرفت

  • چگونه محیط خود را تنظیم کنیم
  • نحوه فهرست کردن زبان های پشتیبانی شده
  • نحوه فهرست کردن صداهای موجود
  • چگونه صدا را از متن ترکیب کنیم

آنچه شما نیاز دارید

  • یک پروژه Google Cloud
  • مرورگری مانند کروم یا فایرفاکس
  • آشنایی با استفاده از پایتون

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه خود را با پایتون چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

تجربه خود را با خدمات Google Cloud چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید 853e55310c205094.png .

3c1dabeca90e44e5.png

اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.

9c92662c6a846a5c.png

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

9f0e51b578fecce5.png

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی ارائه می‌کند و در Google Cloud اجرا می‌شود، که عملکرد و احراز هویت شبکه را بسیار افزایش می‌دهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.

پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در 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`
  1. دستور زیر را در 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.

اکنون، می توانید از Text-to-Speech API استفاده کنید!

به فهرست اصلی خود بروید:

cd ~

یک محیط مجازی پایتون برای جداسازی وابستگی ها ایجاد کنید:

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 هستید!

در مراحل بعدی، از یک مفسر تعاملی پایتون به نام 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. ترکیب صدا از متن

می توانید از Text-to-Speech API برای تبدیل یک رشته به داده های صوتی استفاده کنید. می‌توانید خروجی ترکیب گفتار را به روش‌های مختلفی پیکربندی کنید، از جمله انتخاب یک صدای منحصربه‌فرد یا تعدیل خروجی در زیر و بم، صدا، سرعت گفتار و سرعت نمونه .

کد زیر را در جلسه 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 از محیط پایتون خود استفاده کنید:

!cloudshell download *.wav

اعتبار سنجی کنید و مرورگر شما فایل ها را دانلود می کند:

44382e3b7a3314b0.png4dbccf007cd73b91.png

هر فایل را باز کنید و نتیجه را بشنوید.

خلاصه

در این مرحله، شما قادر به استفاده از Text-to-Speech API برای تبدیل جملات به فایل های صوتی wav هستید. درباره ایجاد فایل های صوتی صوتی بیشتر بخوانید.

7. تبریک می گویم!

1215f38908082356.png

شما یاد گرفتید که چگونه از Text-to-Speech API با استفاده از Python برای تولید گفتار انسان مانند استفاده کنید!

پاک کن

برای پاکسازی محیط توسعه خود، از Cloud Shell:

  • اگر هنوز در جلسه IPython خود هستید، به پوسته برگردید: exit
  • استفاده از محیط مجازی پایتون را متوقف کنید: 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

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.