Python के साथ Text-to-Speech API का इस्तेमाल करना

1. खास जानकारी

1215f38908082356.png

बोले जा रहे शब्दों को टेक्स्ट में बदलने वाले एपीआई की मदद से, डेवलपर इंसानों की तरह आवाज़ जनरेट कर सकते हैं. यह एपीआई, टेक्स्ट को WAV, MP3 या Ogg Opus जैसे ऑडियो फ़ॉर्मैट में बदलता है. यह स्पीच सिंथेसिस मार्कअप लैंग्वेज (एसएसएमएल) के इनपुट को भी सपोर्ट करता है. इससे पॉज़, संख्याओं, तारीख और समय के फ़ॉर्मैट, और उच्चारण से जुड़े अन्य निर्देशों के बारे में बताया जा सकता है.

इस ट्यूटोरियल में, Python के साथ Text-to-Speech API का इस्तेमाल करने पर फ़ोकस किया जाएगा.

आपको क्या सीखने को मिलेगा

  • अपना एनवायरमेंट सेट अप करने का तरीका
  • इस्तेमाल की जा सकने वाली भाषाओं की सूची कैसे बनाएं
  • उपलब्ध आवाज़ों की सूची बनाने का तरीका
  • टेक्स्ट से ऑडियो बनाने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • Python का इस्तेमाल करने की जानकारी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें

Python के साथ अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

Google Cloud की सेवाओं को इस्तेमाल करने का आपका अनुभव कैसा रहा?

शुरुआती सामान्य एडवांस

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग को अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मिलेगा. वे इसे मुफ़्त में आज़मा सकते हैं.

Cloud Shell शुरू करें

Google Cloud को अपने लैपटॉप से रिमोटली ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें 853e55310c205094.png पर क्लिक करें.

3c1dabeca90e44e5.png

अगर आपने Cloud Shell को पहली बार शुरू किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर आपको इंटरमीडिएट स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

9c92662c6a846a5c.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है, जो हमेशा बनी रहती है. साथ ही, यह Google Cloud में काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि हो गई है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट कर दिया गया है.

  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. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
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 में यहां दिया गया निर्देश चलाकर एपीआई को चालू करें:

gcloud services enable texttospeech.googleapis.com

आपको कुछ ऐसा दिखेगा:

Operation "operations/..." finished successfully.

अब, लिखाई को बोली में बदलने वाले एपीआई का इस्तेमाल किया जा सकता है!

अपनी होम डायरेक्ट्री पर जाएं:

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 क्लाइंट लाइब्रेरी का इस्तेमाल करने का विकल्प है!

अगले चरणों में, आपको IPython नाम के इंटरैक्टिव Python इंटरप्रेटर का इस्तेमाल करना होगा. इसे आपने पिछले चरण में इंस्टॉल किया था. Cloud Shell में ipython चलाकर सेशन शुरू करें:

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, और स्टूडियो की आवाज़ें, मशीन लर्निंग मॉडल से सिंथेसाइज़ की गई बेहतर क्वालिटी वाली आवाज़ें हैं. ये ज़्यादा नैचुरल लगती हैं.

अब, अंग्रेज़ी में उपलब्ध आवाज़ों की सूची पाएं:

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"

जनरेट की गई सभी फ़ाइलों को एक साथ डाउनलोड करने के लिए, Python एनवायरमेंट में इस Cloud Shell कमांड का इस्तेमाल किया जा सकता है:

!cloudshell download *.wav

पुष्टि करें. इसके बाद, आपका ब्राउज़र फ़ाइलें डाउनलोड करेगा:

44382e3b7a3314b0.png 4dbccf007cd73b91.png

हर फ़ाइल खोलें और नतीजे सुनें.

खास जानकारी

इस चरण में, आपने वाक्यों को ऑडियो wav फ़ाइलों में बदलने के लिए, Text-to-Speech API का इस्तेमाल किया. आवाज़ वाली ऑडियो फ़ाइलें बनाने के बारे में ज़्यादा जानें.

7. बधाई हो!

1215f38908082356.png

आपने Python का इस्तेमाल करके, Text-to-Speech API को इस्तेमाल करने का तरीका सीखा. इससे इंसानों जैसी आवाज़ जनरेट की जा सकती है!

व्यवस्थित करें

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

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.