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

১. সংক্ষিপ্ত বিবরণ

1215f38908082356.png

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

এই টিউটোরিয়ালে, আপনারা পাইথনের সাথে টেক্সট-টু-স্পিচ এপিআই (Text-to-Speech API) ব্যবহারের উপর মনোযোগ দেবেন।

আপনি যা শিখবেন

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

আপনার যা যা লাগবে

জরিপ

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

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

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

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

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। 853e55310c205094.png .

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

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

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

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

টেক্সট-টু-স্পিচ এপিআই ব্যবহার শুরু করার আগে, এপিআইটি সক্রিয় করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

gcloud services enable texttospeech.googleapis.com

আপনার এইরকম কিছু দেখা উচিত:

Operation "operations/..." finished successfully.

এখন আপনি টেক্সট-টু-স্পিচ এপিআই ব্যবহার করতে পারবেন!

আপনার হোম ডিরেক্টরিতে যান:

cd ~

নির্ভরতাগুলিকে বিচ্ছিন্ন করতে একটি পাইথন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:

virtualenv venv-texttospeech

ভার্চুয়াল পরিবেশ সক্রিয় করুন:

source venv-texttospeech/bin/activate

IPython এবং টেক্সট-টু-স্পিচ এপিআই ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন:

pip install ipython google-cloud-texttospeech

আপনার এইরকম কিছু দেখা উচিত:

...
Installing collected packages: ..., ipython, google-cloud-texttospeech
Successfully installed ... google-cloud-texttospeech-2.16.3 ...

এখন, আপনি টেক্সট-টু-স্পিচ এপিআই ক্লায়েন্ট লাইব্রেরিটি ব্যবহার করার জন্য প্রস্তুত!

পরবর্তী ধাপগুলোতে, আপনি 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]:

আপনি আপনার প্রথম অনুরোধটি করতে এবং সমর্থিত ভাষাগুলোর তালিকা তৈরি করতে প্রস্তুত...

৪. সমর্থিত ভাষাগুলোর তালিকা দিন

এই বিভাগে আপনি সকল সমর্থিত ভাষার তালিকা পাবেন।

নিম্নলিখিত কোডটি আপনার 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

তালিকাটিতে ৫৮টি ভাষা ও তার প্রকারভেদ দেখানো হয়েছে, যেমন:

  • চীনা এবং তাইওয়ানি ম্যান্ডারিন,
  • অস্ট্রেলিয়ান, ব্রিটিশ, ভারতীয় এবং আমেরিকান ইংরেজি,
  • কানাডা এবং ফ্রান্সের ফরাসিরা,
  • ব্রাজিল ও পর্তুগালের পর্তুগিজ।

এই তালিকাটি স্থির নয় এবং নতুন কণ্ঠস্বর যুক্ত হওয়ার সাথে সাথে এটি প্রসারিত হয়।

সারসংক্ষেপ

এই ধাপে আপনি সমর্থিত ভাষাগুলোর তালিকা দেখতে পারবেন।

৫. উপলব্ধ কণ্ঠস্বরগুলির তালিকা করুন

এই বিভাগে আপনি বিভিন্ন ভাষায় উপলব্ধ ভয়েসগুলির তালিকা পাবেন।

নিম্নলিখিত কোডটি আপনার 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 voices হলো মেশিন লার্নিং মডেল দ্বারা সংশ্লেষিত উচ্চ মানের কণ্ঠস্বর, যা শুনতে আরও বেশি স্বাভাবিক।

এখন, উপলব্ধ ইংরেজি ভয়েসগুলোর তালিকা দেখে নিন:

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()

সারসংক্ষেপ

এই ধাপে আপনি উপলব্ধ কণ্ঠস্বরগুলোর তালিকা দেখতে পারবেন। আপনি সমর্থিত কণ্ঠস্বর ও ভাষাগুলো সম্পর্কে আরও পড়তে পারেন।

৬. টেক্সট থেকে অডিও সংশ্লেষণ করুন

আপনি টেক্সট-টু-স্পিচ এপিআই ব্যবহার করে একটি স্ট্রিংকে অডিও ডেটাতে রূপান্তর করতে পারেন। আপনি স্পিচ সিন্থেসিসের আউটপুট বিভিন্ন উপায়ে কনফিগার করতে পারেন, যার মধ্যে রয়েছে একটি স্বতন্ত্র কণ্ঠস্বর নির্বাচন করা অথবা পিচ, ভলিউম, কথা বলার গতি এবং স্যাম্পল রেটের মাধ্যমে আউটপুটকে নিয়ন্ত্রণ করা

নিম্নলিখিত কোডটি আপনার 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 ফাইলে রূপান্তর করতে পেরেছেন। ভয়েস অডিও ফাইল তৈরি করার বিষয়ে আরও পড়ুন।

৭. অভিনন্দন!

1215f38908082356.png

আপনি পাইথন ব্যবহার করে টেক্সট-টু-স্পিচ এপিআই (Text-to-Speech API) দিয়ে মানুষের মতো কথা বলার পদ্ধতি শিখেছেন!

পরিষ্কার করা

আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট পরিষ্কার করতে, ক্লাউড শেল থেকে:

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

ক্লাউড শেল থেকে আপনার গুগল ক্লাউড প্রজেক্ট ডিলিট করতে:

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

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।