পাইথনের সাথে টেক্সট-টু-স্পিচ API ব্যবহার করা

1. ওভারভিউ

1215f38908082356.png

টেক্সট-টু-স্পিচ এপিআই ডেভেলপারদের মানুষের মতো বক্তৃতা তৈরি করতে সক্ষম করে। API পাঠ্যকে WAV, MP3 বা Ogg Opus-এর মতো অডিও ফরম্যাটে রূপান্তর করে। এটি বিরতি, সংখ্যা, তারিখ এবং সময় বিন্যাস এবং অন্যান্য উচ্চারণ নির্দেশাবলী নির্দিষ্ট করতে স্পিচ সিন্থেসিস মার্কআপ ল্যাঙ্গুয়েজ (SSML) ইনপুটগুলিকে সমর্থন করে।

এই টিউটোরিয়ালে, আপনি Python এর সাথে Text-to-Speech API ব্যবহার করার উপর ফোকাস করবেন।

আপনি কি শিখবেন

  • আপনার পরিবেশ কিভাবে সেট আপ করবেন
  • কিভাবে সমর্থিত ভাষা তালিকাভুক্ত
  • উপলব্ধ ভয়েস তালিকা কিভাবে
  • কিভাবে পাঠ্য থেকে অডিও সংশ্লেষিত করা যায়

আপনি কি প্রয়োজন হবে

  • একটি Google ক্লাউড প্রকল্প
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • পাইথন ব্যবহার করে পরিচিতি

সমীক্ষা

আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

পাইথনের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

আপনি Google ক্লাউড পরিষেবাগুলির সাথে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত PROJECT_ID হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি ক্লাউড শেল ব্যবহার করবেন, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 853e55310c205094.png .

3c1dabeca90e44e5.png

যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।

9c92662c6a846a5c.png

ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷

9f0e51b578fecce5.png

এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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 কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

3. পরিবেশ সেটআপ

আপনি টেক্সট-টু-স্পিচ API ব্যবহার শুরু করার আগে, 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 চালিয়ে একটি সেশন শুরু করুন:

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
...

একাধিক মহিলা এবং পুরুষ ভয়েস পাওয়া যায়, পাশাপাশি স্ট্যান্ডার্ড, ওয়েভনেট, নিউরাল2 এবং স্টুডিও ভয়েস:

  • স্ট্যান্ডার্ড ভয়েস সিগন্যাল প্রসেসিং অ্যালগরিদম দ্বারা উত্পন্ন হয়।
  • 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. পাঠ্য থেকে অডিও সংশ্লেষণ করুন

আপনি একটি স্ট্রিংকে অডিও ডেটাতে রূপান্তর করতে টেক্সট-টু-স্পিচ 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}"')
        

কোডটি অধ্যয়ন করার জন্য একটি মুহূর্ত নিন এবং দেখুন কিভাবে এটি অডিও ডেটা তৈরি করতে এবং একটি 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"

সমস্ত উত্পন্ন ফাইল একবারে ডাউনলোড করতে, আপনি আপনার পাইথন পরিবেশ থেকে এই ক্লাউড শেল কমান্ডটি ব্যবহার করতে পারেন:

!cloudshell download *.wav

যাচাই করুন এবং আপনার ব্রাউজার ফাইলগুলি ডাউনলোড করবে:

44382e3b7a3314b0.png4dbccf007cd73b91.png

প্রতিটি ফাইল খুলুন এবং ফলাফল শুনুন।

সারাংশ

এই ধাপে, আপনি বাক্যকে অডিও wav ফাইলে রূপান্তর করতে Text-to-Speech API ব্যবহার করতে সক্ষম হয়েছেন। ভয়েস অডিও ফাইল তৈরি সম্পর্কে আরও পড়ুন।

7. অভিনন্দন!

1215f38908082356.png

আপনি শিখেছেন কিভাবে মানুষের মত বক্তৃতা তৈরি করতে পাইথন ব্যবহার করে টেক্সট-টু-স্পিচ API ব্যবহার করতে হয়!

পরিষ্কার করুন

ক্লাউড শেল থেকে আপনার উন্নয়ন পরিবেশ পরিষ্কার করতে:

  • আপনি যদি এখনও আপনার IPython সেশনে থাকেন, তাহলে শেল এ ফিরে যান: exit
  • পাইথন ভার্চুয়াল পরিবেশ ব্যবহার বন্ধ করুন: deactivate
  • আপনার ভার্চুয়াল পরিবেশ ফোল্ডার মুছুন: cd ~ ; rm -rf ./venv-texttospeech

ক্লাউড শেল থেকে আপনার Google ক্লাউড প্রকল্প মুছে ফেলতে:

  • আপনার বর্তমান প্রকল্প আইডি পুনরুদ্ধার করুন: PROJECT_ID=$(gcloud config get-value core/project)
  • নিশ্চিত করুন যে এই প্রকল্পটি আপনি মুছতে চান: echo $PROJECT_ID
  • প্রকল্পটি মুছুন: gcloud projects delete $PROJECT_ID

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।