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

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

1215f38908082356.png

Text-to-Speech API की मदद से डेवलपर, इंसानों की तरह बोली जनरेट कर सकते हैं. यह एपीआई, टेक्स्ट को 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 में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell शुरू करना

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

Cloud Shell चालू करें

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

3c1dabeca90e44e5.png

अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

9c92662c6a846a5c.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह 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. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. एनवायरमेंट का सेटअप

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

किसी स्ट्रिंग को ऑडियो डेटा में बदलने के लिए, लिखाई को बोली में बदलने वाले एपीआई का इस्तेमाल किया जा सकता है. स्पीच सिंथेसिस के आउटपुट को कई तरीकों से कॉन्फ़िगर किया जा सकता है. इनमें यूनीक आवाज़ चुनना या पिच, वॉल्यूम, बोलने की दर, और सैंपल रेट में आउटपुट में बदलाव करना शामिल है.

यहां दिए गए कोड को अपने 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}"')
        

कुछ समय निकालकर, कोड को अच्छी तरह समझें और देखें कि यह ऑडियो डेटा जनरेट करने और उसे wav फ़ाइल के तौर पर सेव करने के लिए, synthesize_speech क्लाइंट लाइब्रेरी वाले तरीके का इस्तेमाल कैसे करता है.

अब, अलग-अलग लहजे में वाक्य जनरेट करें:

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 एनवायरमेंट से इस क्लाउड शेल कमांड का इस्तेमाल किया जा सकता है:

!cloudshell download *.wav

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

44382e3b7a3314b0.png 4dbccf007cd73b91.png

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

खास जानकारी

इस चरण में, वाक्यों को ऑडियो wav फ़ाइलों में बदलने के लिए, लिखाई को बोली में बदलने की सुविधा वाले एपीआई का इस्तेमाल किया जा सकता था. ऑडियो फ़ाइलें बनाने के बारे में और पढ़ें.

7. बधाई हो!

1215f38908082356.png

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

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

Cloud Shell की मदद से, अपने डेवलपमेंट एनवायरमेंट को खाली करने के लिए:

  • अगर आप अब भी अपने IPython सेशन में हैं, तो शेल पर वापस जाएं: exit
  • Python वर्चुअल एनवायरमेंट का इस्तेमाल बंद करें: deactivate
  • अपना वर्चुअल एनवायरमेंट फ़ोल्डर मिटाएं: cd ~ ; rm -rf ./venv-texttospeech

Cloud Shell से अपना Google Cloud प्रोजेक्ट मिटाने के लिए:

  • अपना मौजूदा प्रोजेक्ट आईडी वापस पाएं: PROJECT_ID=$(gcloud config get-value core/project)
  • पक्का करें कि यह वही प्रोजेक्ट है जिसे आपको मिटाना है: echo $PROJECT_ID
  • प्रोजेक्ट मिटाएं: gcloud projects delete $PROJECT_ID

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

लाइसेंस

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