একটি মিথুন-চালিত YouTube সামারিজার তৈরি করুন৷

১. ভূমিকা

আজকের এই দ্রুতগতির ডিজিটাল বিশ্বে, সময় একটি মূল্যবান সম্পদ। ইউটিউব তথ্যের এক বিশাল ভান্ডার, কিন্তু দীর্ঘ ভিডিও দেখতে অনেক সময় লাগতে পারে। এখানেই ইউটিউব সামারাইজারগুলো অমূল্য হয়ে ওঠে। এই টুলগুলো দক্ষতার সাথে দীর্ঘ ভিডিওগুলোকে সংক্ষিপ্ত সারাংশে পরিণত করে, যা ব্যবহারকারীদের পুরো ভিডিওটি না দেখেই দ্রুত মূল বিষয়বস্তু বুঝতে সাহায্য করে। এটি বিশেষ করে শিক্ষার্থী, পেশাজীবী এবং যারা অনলাইন ভিডিও থেকে দক্ষতার সাথে মূল তথ্য বের করতে চান, তাদের জন্য খুবই উপযোগী। মূলত, ইউটিউব সামারাইজারগুলো ব্যবহারকারীদের ব্যয় করা সময় কমিয়ে তাদের শেখার এবং তথ্য গ্রহণের পরিমাণ বাড়াতে সক্ষম করে।

এই ল্যাবের শেষে, আপনি একটি কার্যকরী ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন যা ইউটিউব ভিডিও থেকে সারাংশ তৈরি করতে সক্ষম। এছাড়াও, আপনি জেমিনি এপিআই (Gemini API) ও গুগল জেন এআই এসডিকে (Google Gen AI SDK) কীভাবে ব্যবহার করতে হয় এবং একটি ওয়েব অ্যাপ্লিকেশন তৈরির জন্য সেগুলোকে কীভাবে একত্রিত করতে হয়, সে সম্পর্কে আরও ভালো ধারণা পাবেন।

আপনার ওয়েব অ্যাপ্লিকেশনটি দেখতে এইরকম হবে:

13a0825947f9892b.png

আপনাকে শুধু ইউটিউব ভিডিওটির লিঙ্ক দিতে হবে এবং বাকিটা জেমিনি করে দেবে।

২. শুরু করার আগে

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

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  2. আপনার গুগল ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জানুন।
  3. আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ। এটি অ্যাক্সেস করতে, গুগল ক্লাউড কনসোলের শীর্ষে থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন।

1829c3759227c19b.png

  1. ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে যাচাই করে নিন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে:
gcloud auth list
  1. gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে অবগত আছে কিনা, তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
  1. আপনার প্রজেক্টটি সেট করা না থাকলে, এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>

বিকল্পভাবে, আপনি কনসোলে PROJECT_ID আইডিটিও দেখতে পারেন।

4032c45803813f30.jpeg

এটিতে ক্লিক করলে আপনি ডানদিকে আপনার সম্পূর্ণ প্রজেক্ট এবং প্রজেক্ট আইডি দেখতে পাবেন।

2b4c041c426d8b29.jpeg

  1. নিম্নলিখিত API-গুলি সক্রিয় আছে কিনা তা নিশ্চিত করুন, এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
  • ভার্টেক্স এআই এপিআই
  • ক্লাউড রান অ্যাডমিন এপিআই
  • ক্লাউড বিল্ড এপিআই
  • ক্লাউড রিসোর্স ম্যানেজার এপিআই
gcloud services enable aiplatform.googleapis.com \
                           run.googleapis.com \
                           cloudbuild.googleapis.com \
                           cloudresourcemanager.googleapis.com

gcloud কমান্ড ব্যবহার করার বিকল্প হলো এই লিঙ্কের মাধ্যমে কনসোলে যাওয়া। gcloud কমান্ড এবং এর ব্যবহার সম্পর্কে জানতে ডকুমেন্টেশন দেখুন।

পূর্বশর্ত

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

  • Flask API লাইব্রেরি ব্যবহার করে কীভাবে একটি Gemini-চালিত ব্যাক-এন্ড API তৈরি করবেন
  • কীভাবে একটি GenAI অ্যাপ তৈরি করবেন: ফ্রন্ট-এন্ড এবং ব্যাক-এন্ড একসাথে সংযুক্ত করুন
  • ক্লাউড রানে তৈরি করা GenAI অ্যাপ্লিকেশনটি কীভাবে স্থাপন করবেন

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

  • একটি সচল কম্পিউটার এবং নির্ভরযোগ্য ওয়াইফাই
  • একটি কৌতূহলী মন

৩. ক্লাউড রানে একটি পাইথন ফ্লাস্ক অ্যাপ তৈরি করুন

আমরা প্রথমে ক্লাউড শেল থেকে স্বয়ংক্রিয়ভাবে তৈরি টেমপ্লেট ব্যবহার করে ক্লাউড রান -এ পাইথন ফ্লাস্ক অ্যাপটি তৈরি করব।

ক্লাউড শেল টার্মিনালে যান এবং ওপেন এডিটর বোতামে ক্লিক করুন। b16d56e4979ec951.png

নিশ্চিত করুন যে ক্লাউড শেল এডিটরের নিচের বাম কোণে (স্ট্যাটাস বারে) ক্লাউড কোড প্রজেক্টটি সেট করা আছে, যেমনটি নিচের ছবিতে হাইলাইট করা হয়েছে, এবং এটি সেই সক্রিয় গুগল ক্লাউড প্রজেক্টে সেট করা আছে যেখানে আপনার বিলিং চালু করা আছে। অনুরোধ করা হলে অনুমোদন করুন

দ্রষ্টব্য: ক্লাউড শেল এডিটর চালু হতে এবং সমস্ত প্রয়োজনীয় প্লাগইন লোড হতে কিছুটা সময় লাগতে পারে, যাতে

Cloud Code - Sign In

বাটনটি দেখা যাবে, অনুগ্রহ করে ধৈর্য ধরুন।

f5003b9c38b43262.png

স্ট্যাটাস বারে থাকা সক্রিয় প্রজেক্টটিতে ক্লিক করুন এবং ক্লাউড কোড পপ-আপটি খোলার জন্য অপেক্ষা করুন। পপ-আপটিতে "নতুন অ্যাপ্লিকেশন" নির্বাচন করুন। 70f80078e01a02d8.png

অ্যাপ্লিকেশনগুলির তালিকা থেকে ক্লাউড রান অ্যাপ্লিকেশন নির্বাচন করুন:

39abad102a72ae74.png

পৃষ্ঠা ২/২-এর জন্য, পাইথন ফ্লাস্ক টেমপ্লেট নির্বাচন করুন:

a78b3a0311403ad.png

আপনার ইচ্ছামতো প্রজেক্টের নাম দিন (যেমন 'amazing-gemini-app') এবং OK-তে ক্লিক করুন।

4d8f77279d9509cb.png

এটি আপনার এইমাত্র তৈরি করা নতুন প্রজেক্টটির টেমপ্লেটটি খুলে দেবে।

e85a020a20d38e17.png

গুগল ক্লাউড শেল ব্যবহার করে ক্লাউড রানে একটি পাইথন ফ্লাস্ক অ্যাপ তৈরি করা এতটাই সহজ।

৪. ফ্রন্ট-এন্ড তৈরি করুন

পূর্বেই বলা হয়েছে, চূড়ান্ত ওয়েব অ্যাপ্লিকেশনটি দেখতে এইরকম হবে:

13a0825947f9892b.png

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

আপনি যদি এই চ্যালেঞ্জটি পছন্দ করেন, তবে নির্দ্বিধায় নিজের ফর্ম ডিজাইন করতে পারেন অথবা CSS প্রোপার্টিগুলো সম্পাদনা করতে পারেন। এছাড়া, আপনি নিচের কোডটি কপি করে টেমপ্লেটস ফোল্ডারে থাকা আপনার index.html ফাইলের কন্টেন্টের জায়গায় প্রতিস্থাপন করতে পারেন।

<!DOCTYPE html>
<html>
 <head>
   <title>YouTube Summarizer</title>
   <style>
     body {
       font-family: sans-serif;
       display: flex;
       justify-content: center;
       align-items: center;
       min-height: 100vh;
       background-color: #f4f4f4;
     }
     .container {
       background-color: white;
       padding: 30px;
       border-radius: 8px;
       box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
       text-align: center;
     }
     h2 {
       text-align: center;
       margin-bottom: 20px;
     }
     input[type="text"], textarea, select {
       width: 100%;
       padding: 10px;
       margin-bottom: 15px;
       border: 1px solid #ccc;
       border-radius: 4px;
       box-sizing: border-box;
     }
     button {
       background-color: #4CAF50;
       color: white;
       padding: 12px 20px;
       border: none;
       border-radius: 4px;
       cursor: pointer;
     }
   </style>
 </head>
 <body>
   <div class="container">
     <h2>YouTube Summarizer</h2>
     <form action="/summarize" target="_blank" method="post">
       <input type="text" name="youtube_link" placeholder="Enter YouTube Link">
       <select name="model">
         <option value="gemini-2.0-flash-001">Gemini 2.0 Flash</option>
       </select>
       <textarea name="additional_prompt" placeholder="Write your additional prompt here. For example: 'explain to me like I am five years old'"></textarea>
       <button type="submit">Summarize</button>
     </form>
   </div>
 </body>
</html>

আপনি এই ধাপটি সঠিকভাবে করেছেন কিনা তা পরীক্ষা করতে, app.py-এর উপর রাইট ক্লিক করুন এবং ‘Run Python File in Terminal’ বিকল্পটি বেছে নিন।

690765473f94db9c.png

সবকিছু ঠিকঠাক থাকলে, আপনি ক্লাউড এডিটরের উপরের ডানদিকে থাকা Web Preview বোতামে ক্লিক করে এবং Preview on port 8080 নির্বাচন করে আপনার ওয়েব অ্যাপ্লিকেশনটি অ্যাক্সেস করতে পারবেন।

49cbdfdf77964065.jpeg

৫. ব্যাক-এন্ড তৈরি করুন

ফ্রন্ট-এন্ড সেট আপ হয়ে গেলে, আপনাকে একটি ব্যাক-এন্ড সার্ভিস তৈরি করতে হবে যা ব্যবহারকারীর দেওয়া ইউটিউব ভিডিওর সারসংক্ষেপ করার জন্য জেমিনি মডেল ব্যবহার করবে। মনে রাখবেন, এই কাজটি সম্পন্ন করার জন্য আপনাকে app.py ফাইলটি ওভাররাইট করতে হবে।

কোড পরিবর্তন করার আগে, আপনাকে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করতে হবে এবং জেমিনি কম্পোনেন্টগুলো চালানোর জন্য প্রয়োজনীয় লাইব্রেরিগুলো ইনস্টল করতে হবে।

প্রথমত, আপনাকে requirements.txt ফাইলে Google Gen AI SDK লাইব্রেরিটি যোগ করতে হবে। ফাইলটি দেখতে এইরকম হবে:

Flask==2.3.3
requests==2.31.0
debugpy # Required for debugging.
google-genai==1.2.0

দ্বিতীয়ত, আপনাকে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করতে হবে এবং requirements.txt থেকে প্যাকেজগুলো ইনস্টল করতে হবে, যাতে আপনি ব্যাক-এন্ড কোডটি সফলভাবে চালাতে পারেন।

  1. উপরের বাম কোণার বারগুলিতে ক্লিক করুন এবং টার্মিনাল > নতুন টার্মিনাল বেছে নিন (বিকল্পভাবে, নতুন টার্মিনাল খুলতে আপনি Ctrl + Shift + C চাপতে পারেন)।

2cda225f0cd71e7e.png ২. টার্মিনালে টাইপ করে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন এবং এটি সফলভাবে ইনস্টল হওয়া পর্যন্ত অপেক্ষা করুন।

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

আবারও নির্দ্বিধায় নিজেকে চ্যালেঞ্জ করুন এবং ফ্লাস্ক এপিআই (Flask API) ব্যবহার করে নিজেই একটি জেমিনি (Gemini) এন্ডপয়েন্ট তৈরি করুন। আপনার app.py ফাইলের কোডটি নিচে দেওয়া কোডের অনুরূপ হওয়া উচিত।

import os

from flask import Flask, render_template, request
from google import genai
from google.genai import types

app = Flask(__name__)

PROJECT_ID = "REPLACE_WITH_YOUR_PROJECT_ID"

client = genai.Client(
   vertexai=True,
   project=PROJECT_ID,
   location="us-central1",
)

# Define the home page route.
@app.route('/', methods=['GET'])
def index():
   '''
   Renders the home page.
   Returns:The rendered template.
   '''
   return render_template('index.html')


def generate(youtube_link, model, additional_prompt):

   # Prepare youtube video using the provided link
   youtube_video = types.Part.from_uri(
       file_uri=youtube_link,
       mime_type="video/*",
   )

   # If addtional prompt is not provided, just append a space
   if not additional_prompt:
       additional_prompt = " "

   # Prepare content to send to the model
   contents = [
       youtube_video,
       types.Part.from_text(text="""Provide a summary of the video."""),
       additional_prompt,
   ]

   # Define content configuration
   generate_content_config = types.GenerateContentConfig(
       temperature = 1,
       top_p = 0.95,
       max_output_tokens = 8192,
       response_modalities = ["TEXT"],
   )

   return client.models.generate_content(
       model = model,
       contents = contents,
       config = generate_content_config,
   ).text

@app.route('/summarize', methods=['GET', 'POST'])
def summarize():
   '''
   Summarize the user provided YouTube video.
   Returns: Summary.
   '''

   # If the request is a POST request, process the form data.
   if request.method == 'POST':
       youtube_link = request.form['youtube_link']
       model = request.form['model']
       additional_prompt = request.form['additional_prompt']
     
       # Generate the summary.
       try:
           summary = generate(youtube_link, model, additional_prompt)
           return summary

       except ValueError as e:
           raise e
 
   # If the request is a GET request, redirect to the home page.
   else:
       return redirect('/')


if __name__ == '__main__':
   server_port = os.environ.get('PORT', '8080')
   app.run(debug=False, port=server_port, host='0.0.0.0')

মূলত, কোডটি নিম্নলিখিত কাজগুলো করে:

প্রয়োজনীয় লাইব্রেরিগুলো ইম্পোর্ট করুন:

  • ফ্লাস্ক: ওয়েব অ্যাপ্লিকেশন তৈরির জন্য।
  • os: এনভায়রনমেন্ট ভেরিয়েবল অ্যাক্সেস করার জন্য।
  • google.genai: গুগলের জেমিনি এআই-এর সাথে যোগাযোগ করার জন্য।
  • google.genai.types: জেমিনির জন্য ডেটা স্ট্রাকচার নির্ধারণ করতে ব্যবহৃত হয়।

জেমিনি ক্লায়েন্ট চালু করা হচ্ছে:

  • এটি গুগলের ভার্টেক্স এআই-এর সাথে একটি সংযোগ স্থাপন করে, যা অ্যাপটিকে জেমিনি এআই মডেল ব্যবহার করতে সক্ষম করে। " REPLACE_WITH_YOUR_PROJECT_ID " এর জায়গায় আপনার প্রজেক্ট আইডি বসাতে ভুলবেন না।

generate ফাংশনের সংজ্ঞা:

  • এই ফাংশনটি ইনপুট হিসেবে একটি ইউটিউব ভিডিও লিঙ্ক, একটি জেমিনি মডেল আইডি এবং একটি অতিরিক্ত প্রম্পট গ্রহণ করে। এরপর এটি ভিডিও এবং প্রম্পটটি জেমিনিতে পাঠিয়ে দেয় এবং তৈরি হওয়া সারসংক্ষেপ টেক্সটটি ফেরত পাঠায়।

হোম পেজ রুট (/) নির্ধারণ করা:

  • এই ফাংশনটি index.html টেমপ্লেটটি রেন্ডার করে, যেখানে ব্যবহারকারীর জন্য একটি ইউটিউব লিঙ্ক প্রবেশ করানোর ফর্ম থাকে।

সারাংশ তৈরির পথ (/summarize) নির্ধারণ করা:

  • এই ফাংশনটি ফর্ম সাবমিশন পরিচালনা করে। এটি ফর্ম থেকে ইউটিউব লিঙ্ক, মডেল এবং প্রম্পট সংগ্রহ করে, সামারি পাওয়ার জন্য generate ফাংশনটিকে কল করে এবং তারপর result.html টেমপ্লেটে সামারিটি প্রদর্শন করে।

অ্যাপ্লিকেশনটি চালানো:

  • এটি এনভায়রনমেন্ট ভেরিয়েবল থেকে সার্ভার পোর্টটি সংগ্রহ করে ফ্লাস্ক ওয়েব সার্ভারটি চালু করে।

আপনি টার্মিনাল থেকে app.py ফাইলটি রান করে কোডটি পরীক্ষা করতে পারেন। ফ্রন্ট-এন্ড পরীক্ষার পদ্ধতিটিই এখানেও প্রযোজ্য। app.py ফাইলের উপর রাইট-ক্লিক করে 'Run Python File in Terminal' অপশনটি বেছে নিন।

আপনার অ্যাপ্লিকেশনটি পরীক্ষা করে দেখুন। এটি প্রত্যাশা অনুযায়ী কাজ করার কথা।

৬. ওয়েব অ্যাপ্লিকেশনটি স্থাপন করুন

এখন যেহেতু আপনার কাছে কার্যকরী GenAI অ্যাপ্লিকেশনটি আছে, চলুন অ্যাপটি ক্লাউড রান-এ ডেপ্লয় করি, যাতে আপনি এটি আপনার বন্ধু ও সহকর্মীদের সাথে শেয়ার করে চেষ্টা করে দেখতে পারেন।

ক্লাউড শেল টার্মিনালে যান এবং নিশ্চিত করুন যে বর্তমান প্রজেক্টটি আপনার সক্রিয় প্রজেক্ট হিসাবে কনফিগার করা আছে, যদি না থাকে তবে প্রজেক্ট আইডি সেট করার জন্য আপনাকে gcloud configure কমান্ডটি ব্যবহার করতে হবে:

gcloud config set project [PROJECT_ID]

[PROJECT_ID]- এর জায়গায় আপনার নিজের প্রজেক্ট আইডি বসাতে ভুলবেন না। নিশ্চিত করুন যে টার্মিনালে আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি হলো **amazing-gemini-app** তারপর নিচের কমান্ডগুলো ক্রমানুসারে এক এক করে প্রবেশ করান:

gcloud run deploy --source .

এটি আপনাকে আপনার সার্ভিসের জন্য একটি নাম লিখতে বলবে, ধরা যাক " youtube-summarizer "। অঞ্চলের জন্য সংশ্লিষ্ট নম্বর " us-central1 " বেছে নিন। যখন এটি জিজ্ঞাসা করবে যে আপনি প্রমাণীকরণবিহীন ইনভোকেশন অনুমোদন করতে চান কিনা, তখন " y " বলুন। উল্লেখ্য যে, আমরা এখানে প্রমাণীকরণবিহীন অ্যাক্সেসের অনুমতি দিচ্ছি কারণ এটি একটি ডেমো অ্যাপ্লিকেশন। আপনার এন্টারপ্রাইজ এবং প্রোডাকশন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত প্রমাণীকরণ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।

ডেপ্লয়মেন্ট সম্পন্ন হলে, আপনি নীচের মতো একটি লিঙ্ক পাবেন:

https://amazing-gemini-app-*******.a.run.app/

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

৭. চ্যালেঞ্জ

এখনই আপনার উজ্জ্বল হওয়ার সময়। কোডটি পরিবর্তন করে সরাসরি আপনার কম্পিউটার থেকে ভিডিও আপলোড করার মতো দক্ষতা কি আপনার আছে?

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

এই কোডল্যাবে ব্যবহৃত রিসোর্সগুলির জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলি অনুসরণ করুন:

  1. গুগল ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
  2. প্রজেক্ট তালিকা থেকে, আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট বোতামে ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।
  4. বিকল্পভাবে, আপনি কনসোলে Cloud Run- এ গিয়ে, এইমাত্র ডেপ্লয় করা সার্ভিসটি নির্বাচন করে ডিলিট করে দিতে পারেন।