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

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

9e7124a578332fed.png

স্পিচ-টু-টেক্সট এপিআই ডেভেলপারদেরকে একটি সহজে ব্যবহারযোগ্য এপিআই-এর মাধ্যমে শক্তিশালী নিউরাল নেটওয়ার্ক মডেল প্রয়োগ করে ১২৫টিরও বেশি ভাষা ও উপভাষায় অডিওকে টেক্সটে রূপান্তর করতে সক্ষম করে।

এই টিউটোরিয়ালে, আপনি পাইথনের সাথে স্পিচ-টু-টেক্সট এপিআই (Speech-to-Text 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 speech.googleapis.com

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

Operation "operations/..." finished successfully.

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

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

cd ~

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

virtualenv venv-speech

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

source venv-speech/bin/activate

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

pip install ipython google-cloud-speech

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

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

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

পরবর্তী ধাপগুলোতে, আপনি 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 google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

এক মুহূর্ত সময় নিয়ে কোডটি মনোযোগ দিয়ে দেখুন, কীভাবে এটি একটি অডিও ফাইল ট্রান্সক্রাইব করার জন্য recognize ক্লায়েন্ট লাইব্রেরি মেথডটি ব্যবহার করে। ` config প্যারামিটারটি নির্দেশ করে যে অনুরোধটি কীভাবে প্রসেস করতে হবে এবং audio প্যারামিটারটি শনাক্ত করার জন্য অডিও ডেটা নির্দিষ্ট করে।

একটি অনুরোধ পাঠান:

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

স্বয়ংক্রিয় বিরামচিহ্ন সক্রিয় করতে কনফিগারেশন আপডেট করুন এবং একটি নতুন অনুরোধ পাঠান:

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

সারসংক্ষেপ

এই ধাপে, আপনি বিভিন্ন প্যারামিটার ব্যবহার করে একটি অডিও ফাইল ইংরেজিতে ট্রান্সক্রাইব করতে এবং ফলাফলটি প্রিন্ট করতে সক্ষম হয়েছেন। আপনি অডিও ফাইল ট্রান্সক্রাইব করা সম্পর্কে আরও পড়তে পারেন।

৫. শব্দের সময়চিহ্ন সংগ্রহ করুন

স্পিচ-টু-টেক্সট ট্রান্সক্রাইব করা অডিওর জন্য টাইম অফসেট (টাইমস্ট্যাম্প) শনাক্ত করতে পারে। টাইম অফসেট প্রদত্ত অডিওতে বলা প্রতিটি শব্দের শুরু এবং শেষ দেখায়। একটি টাইম অফসেট মান অডিওর শুরু থেকে অতিবাহিত সময়ের পরিমাণকে বোঝায়, যা ১০০ মিলিসেকেন্ডের ধাপে ধাপে পরিমাপ করা হয়।

শব্দের টাইমস্ট্যাম্প সহ একটি অডিও ফাইল ট্রান্সক্রাইব করতে, নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করে আপডেট করুন:

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

এক মুহূর্ত সময় নিয়ে কোডটি দেখুন এবং খেয়াল করুন এটি কীভাবে শব্দের টাইমস্ট্যাম্পসহ একটি অডিও ফাইল ট্রান্সক্রাইব করে। enable_word_time_offsets প্যারামিটারটি এপিআই-কে প্রতিটি শব্দের জন্য টাইম অফসেট ফেরত দিতে নির্দেশ দেয় (আরও বিস্তারিত জানতে ডকুমেন্টেশন দেখুন)।

একটি অনুরোধ পাঠান:

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

সারসংক্ষেপ

এই ধাপে, আপনি শব্দের টাইমস্ট্যাম্প সহ একটি ইংরেজি অডিও ফাইল প্রতিলিপি করতে এবং ফলাফলটি প্রিন্ট করতে সক্ষম হয়েছেন। শব্দের টাইমস্ট্যাম্প পাওয়া সম্পর্কে আরও পড়ুন।

৬. বিভিন্ন ভাষার প্রতিলিপি তৈরি করুন

স্পিচ-টু-টেক্সট এপিআই ১২৫টিরও বেশি ভাষা ও তার বিভিন্ন রূপ শনাক্ত করতে পারে! সমর্থিত ভাষাগুলোর তালিকা আপনি এখানে খুঁজে পাবেন।

এই অংশে, আপনি একটি ফরাসি অডিও ফাইল প্রতিলিপি করবেন।

ফরাসি অডিও ফাইলটি প্রতিলিপি করতে, নিম্নলিখিত কোডটি আপনার IPython সেশনে কপি করে আপডেট করুন:

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

সারসংক্ষেপ

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

৭. অভিনন্দন!

9e7124a578332fed.png

আপনি শিখেছেন কীভাবে পাইথন ব্যবহার করে স্পিচ-টু-টেক্সট এপিআই (Speech-to-Text API) দিয়ে অডিও ফাইলের বিভিন্ন ধরনের ট্রান্সক্রিপশন করতে হয়!

পরিষ্কার করা

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

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

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

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

আরও জানুন

লাইসেন্স

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