একটি মৌলিক "Google অনুবাদ" পাইথন 2 অ্যাপ ইঞ্জিনে অ্যাপ

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

এই কোডল্যাব সিরিজটির (স্ব-গতিতে শেখার উপযোগী, হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হলো ডেভেলপারদের তাদের অ্যাপ্লিকেশন ডেপ্লয় করার সময় উপলব্ধ বিভিন্ন বিকল্পগুলো বুঝতে সাহায্য করা। এই কোডল্যাবে, আপনি শিখবেন কীভাবে পাইথনের সাথে গুগল ক্লাউড ট্রান্সলেশন এপিআই ব্যবহার করতে হয় এবং এটিকে স্থানীয়ভাবে রান করতে বা কোনো ক্লাউড সার্ভারলেস কম্পিউট প্ল্যাটফর্মে (অ্যাপ ইঞ্জিন, ক্লাউড ফাংশনস, বা ক্লাউড রান) ডেপ্লয় করতে হয়। এই টিউটোরিয়ালের রেপোতে থাকা নমুনা অ্যাপটি শুধুমাত্র সামান্য কনফিগারেশন পরিবর্তনের মাধ্যমে (অন্তত) আটটি ভিন্ন উপায়ে ডেপ্লয় করা যেতে পারে:

  1. স্থানীয় ফ্লাস্ক সার্ভার (পাইথন ২)
  2. স্থানীয় ফ্লাস্ক সার্ভার (পাইথন ৩)
  3. অ্যাপ ইঞ্জিন (পাইথন ২)
  4. অ্যাপ ইঞ্জিন (পাইথন ৩)
  5. ক্লাউড ফাংশন (পাইথন ৩)
  6. ক্লাউড রান (ডকারের মাধ্যমে পাইথন ২)
  7. ক্লাউড রান (ডকারের মাধ্যমে পাইথন ৩)
  8. ক্লাউড রান (ক্লাউড বিল্ডপ্যাকের মাধ্যমে পাইথন ৩)

এই কোডল্যাবটি উপরে বোল্ড করা প্ল্যাটফর্ম(গুলি)তে এই অ্যাপটি ডেপ্লয় করার উপর আলোকপাত করে।

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

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

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

জরিপ

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

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

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

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

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

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

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

৩. অনুবাদ এপিআই সক্রিয় করুন

আমাদের নমুনা অ্যাপটির জন্য, আপনি নিচে দেওয়া অনুরূপ নির্দেশাবলী অনুসরণ করে ক্লাউড ট্রান্সলেশন এপিআই এবং অ্যাপ ইঞ্জিন পরিষেবাটি সক্রিয় করবেন।

ক্লাউড এপিআই সক্ষম করা

ভূমিকা

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

বিকল্প ১: ক্লাউড শেল বা আপনার কমান্ড-লাইন ইন্টারফেস থেকে

যদিও ক্লাউড কনসোল থেকে এপিআই (API) সক্রিয় করা বেশি প্রচলিত, কিছু ডেভেলপার কমান্ড লাইন থেকে সবকিছু করতে পছন্দ করেন। এটি করার জন্য, আপনাকে একটি এপিআই-এর "সার্ভিস নেম" খুঁজে বের করতে হবে। এটি একটি ইউআরএল (URL)-এর মতো দেখতে: SERVICE_NAME । আপনি এগুলো সাপোর্টেড প্রোডাক্টস চার্টে খুঁজে পেতে পারেন, অথবা গুগল ডিসকভারি এপিআই (Google Discovery API) .googleapis.com করে প্রোগ্রাম্যাটিকভাবে এগুলোর জন্য কোয়েরি করতে পারেন।

এই তথ্যের সাহায্যে, ক্লাউড শেল (অথবা আপনার স্থানীয় ডেভেলপমেন্ট এনভায়রনমেন্টে যেখানে gcloud কমান্ড-লাইন টুল ইনস্টল করা আছে ) ব্যবহার করে, আপনি নিম্নলিখিতভাবে একটি API সক্রিয় করতে পারেন:

gcloud services enable SERVICE_NAME.googleapis.com

উদাহরণস্বরূপ, এই কমান্ডটি ক্লাউড ভিশন এপিআই সক্রিয় করে:

gcloud services enable vision.googleapis.com

এই কমান্ডটি অ্যাপ ইঞ্জিন সক্রিয় করে:

gcloud services enable appengine.googleapis.com

আপনি একটি অনুরোধের মাধ্যমে একাধিক API সক্রিয় করতে পারেন। উদাহরণস্বরূপ, এই কমান্ড লাইনটি ক্লাউড রান, ক্লাউড আর্টিফ্যাক্ট রেজিস্ট্রি এবং ক্লাউড ট্রান্সলেশন API সক্রিয় করে:

gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

বিকল্প ২: ক্লাউড কনসোল থেকে

আপনি এপিআই ম্যানেজার-এও ভিশন এপিআই সক্রিয় করতে পারেন। ক্লাউড কনসোল থেকে, এপিআই ম্যানেজার- এ যান এবং লাইব্রেরি নির্বাচন করুন।

fb0f1d315f122d4a.png

আপনি যদি ক্লাউড ভিশন এপিআই (Cloud Vision API) সক্রিয় করতে চান, তাহলে সার্চ বারে 'vision' টাইপ করা শুরু করুন, এবং আপনি এখন পর্যন্ত যা লিখেছেন তার সাথে মেলে এমন যেকোনো কিছু প্রদর্শিত হবে:

2275786a24f8f204.png

আপনি যে API-টি সক্রিয় করতে চান তা নির্বাচন করুন এবং 'সক্রিয় করুন' বোতামে ক্লিক করুন।

2556f923b628e31.png

খরচ

যদিও অনেক গুগল এপিআই বিনামূল্যে ব্যবহার করা যায়, গুগল ক্লাউড প্রোডাক্ট ও এপিআই-এর ব্যবহার বিনামূল্যে নয় । ক্লাউড এপিআই সক্রিয় করার সময়, আপনার কাছে একটি সক্রিয় বিলিং অ্যাকাউন্ট চাওয়া হতে পারে। তবে, এটি মনে রাখা গুরুত্বপূর্ণ যে কিছু গুগল ক্লাউড প্রোডাক্টে একটি "সর্বদা বিনামূল্যে" স্তর (দৈনিক/মাসিক) রয়েছে, যা অতিক্রম করলেই বিলিং চার্জ প্রযোজ্য হবে; অন্যথায়, আপনার ক্রেডিট কার্ড (বা নির্দিষ্ট বিলিং মাধ্যম) থেকে কোনো চার্জ কাটা হবে না।

যেকোনো এপিআই (API) চালু করার আগে ব্যবহারকারীদের এর মূল্য সংক্রান্ত তথ্য দেখে নেওয়া উচিত, বিশেষ করে এটির কোনো ফ্রি টিয়ার (free tier) আছে কিনা এবং থাকলে, সেটি কী তা লক্ষ্য করা উচিত। আপনি যদি ক্লাউড ভিশন এপিআই (Cloud Vision API) চালু করেন, তাহলে আপনাকে এর মূল্য সংক্রান্ত তথ্যের পেজটি দেখতে হবে। ক্লাউড ভিশনের একটি ফ্রি কোটা (free quota) আছে, এবং যতক্ষণ আপনি সামগ্রিকভাবে (প্রতি মাসে) এর সীমার মধ্যে থাকবেন, ততক্ষণ আপনার কোনো চার্জ লাগার কথা নয়।

গুগল এপিআই ভেদে মূল্য এবং বিনামূল্যের স্তর ভিন্ন হয়ে থাকে। উদাহরণস্বরূপ:

গুগলের বিভিন্ন পণ্যের বিলিং পদ্ধতি ভিন্ন, তাই এই তথ্যের জন্য আপনার এপিআই (API)-এর ডকুমেন্টেশন দেখে নিতে ভুলবেন না।

সারসংক্ষেপ

এখন যেহেতু আপনি সাধারণভাবে গুগল এপিআই (Google API) কীভাবে সক্রিয় করতে হয় তা জানেন, অনুগ্রহ করে এপিআই ম্যানেজারে (API Manager) যান এবং ক্লাউড ট্রান্সলেশন এপিআই (Cloud Translation API) ও অ্যাপ ইঞ্জিন সার্ভিস (App Engine service) উভয়ই সক্রিয় করুন (যদি আগে থেকে না করে থাকেন)। প্রথমটি সক্রিয় করবেন কারণ আমাদের অ্যাপ্লিকেশনটি এটি ব্যবহার করবে, এবং দ্বিতীয়টি সক্রিয় করবেন কারণ আপনি একটি অ্যাপ ইঞ্জিন অ্যাপ ডেপ্লয় (deploy) করছেন। আপনি যদি কমান্ড-লাইন থেকে এটি করতে পছন্দ করেন, তাহলে এর পরিবর্তে এই কমান্ডটি দিন:

gcloud services enable appengine.googleapis.com translate.googleapis.com

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

৪. নমুনা অ্যাপ কোডটি সংগ্রহ করুন।

রিপো থেকে কোডটি আপনার কম্পিউটারে অথবা ক্লাউড শেলে ( git clone কমান্ড ব্যবহার করে) ক্লোন করুন, অথবা নিচের স্ক্রিনশটে দেখানো অনুযায়ী এর সবুজ 'Code' বাটন থেকে ZIP ফাইলটি ডাউনলোড করুন:

5cd6110c4414cf65.png

এখন যেহেতু আপনার কাছে সবকিছু আছে, এই নির্দিষ্ট টিউটোরিয়ালটি করার জন্য ফোল্ডারটির একটি সম্পূর্ণ কপি তৈরি করুন, কারণ এতে সম্ভবত ফাইল ডিলিট বা পরিবর্তন করার প্রয়োজন হবে। আপনি যদি অন্য কোনো ডেপ্লয়মেন্ট করতে চান, তাহলে আসল ফাইলটি কপি করে আবার নতুন করে শুরু করতে পারেন, যাতে আপনাকে এটি পুনরায় ক্লোন বা ডাউনলোড করতে না হয়।

৫. নমুনা অ্যাপের পরিভ্রমণ

নমুনা অ্যাপটি গুগল ট্রান্সলেটের একটি সাধারণ সংস্করণ, যা ব্যবহারকারীদের ইংরেজিতে টেক্সট লিখতে বলে এবং সেই টেক্সটের সমতুল্য স্প্যানিশ অনুবাদ প্রদান করে। এখন main.py ফাইলটি খুলুন, যাতে আমরা দেখতে পারি এটি কীভাবে কাজ করে। লাইসেন্সিং সম্পর্কিত কমেন্ট করা লাইনগুলো বাদ দিলে, এর উপরের এবং নিচের অংশটি দেখতে এইরকম:

from flask import Flask, render_template, request
import google.auth
from google.cloud import translate

app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')

# . . . [translate() function definition] . . .

if __name__ == '__main__':
    import os
    app.run(debug=True, threaded=True, host='0.0.0.0',
            port=int(os.environ.get('PORT', 8080)))
  1. এই ইম্পোর্টগুলোর মাধ্যমে ফ্লাস্কের কার্যকারিতা, google.auth মডিউল এবং ক্লাউড ট্রান্সলেশন এপিআই ক্লায়েন্ট লাইব্রেরি যুক্ত হয়।
  2. গ্লোবাল ভেরিয়েবলগুলো ফ্লাস্ক অ্যাপ, ক্লাউড প্রজেক্ট আইডি, ট্রান্সলেশন এপিআই ক্লায়েন্ট, ট্রান্সলেশন এপিআই কলের জন্য প্যারেন্ট "লোকেশন পাথ" এবং সোর্স ও টার্গেট ল্যাঙ্গুয়েজকে নির্দেশ করে। এক্ষেত্রে, এগুলো হলো ইংরেজি ( en ) এবং স্প্যানিশ ( es ), কিন্তু ক্লাউড ট্রান্সলেশন এপিআই দ্বারা সমর্থিত অন্যান্য ল্যাঙ্গুয়েজ কোডে এই মানগুলো পরিবর্তন করতে পারেন।
  3. নিচের বড় if ব্লকটি এই অ্যাপটি স্থানীয়ভাবে চালানোর টিউটোরিয়ালে ব্যবহৃত হয় — এটি আমাদের অ্যাপটি পরিবেশন করার জন্য ফ্লাস্ক ডেভেলপমেন্ট সার্ভার ব্যবহার করে। ক্লাউড রান ডেপ্লয়মেন্ট টিউটোরিয়ালের জন্যও এই অংশটি রয়েছে, যদি ওয়েব সার্ভারটি কন্টেইনারের সাথে বান্ডল করা না থাকে। আপনাকে কন্টেইনারে সার্ভার বান্ডলিং সক্ষম করতে বলা হয়, কিন্তু যদি আপনি এটি উপেক্ষা করেন, তাহলে অ্যাপ কোডটি ফ্লাস্ক ডেভেলপমেন্ট সার্ভার ব্যবহার করার জন্য ফলব্যাক করে। (এটি অ্যাপ ইঞ্জিন বা ক্লাউড ফাংশনের কোনো সমস্যা নয়, কারণ সেগুলো সোর্স-ভিত্তিক প্ল্যাটফর্ম, অর্থাৎ গুগল ক্লাউড একটি ডিফল্ট ওয়েব সার্ভার সরবরাহ করে এবং চালায়।)

অবশেষে, main.py ফাইলের মাঝখানে রয়েছে অ্যাপ্লিকেশনটির মূল অংশ, translate() ফাংশনটি:

@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
    """
    main handler - show form and possibly previous translation
    """

    # Flask Request object passed in for Cloud Functions
    # (use gcf_request for GCF but flask.request otherwise)
    local_request = gcf_request if gcf_request else request

    # reset all variables (GET)
    text = translated = None

    # if there is data to process (POST)
    if local_request.method == 'POST':
        text = local_request.form['text']
        data = {
            'contents': [text],
            'parent': PARENT,
            'target_language_code': TARGET[0],
        }
        # handle older call for backwards-compatibility
        try:
            rsp = TRANSLATE.translate_text(request=data)
        except TypeError:
            rsp = TRANSLATE.translate_text(**data)
        translated = rsp.translations[0].translated_text

    # create context & render template
    context = {
        'orig':  {'text': text, 'lc': SOURCE},
        'trans': {'text': translated, 'lc': TARGET},
    }
    return render_template('index.html', **context)

মূল ফাংশনটি ব্যবহারকারীর ইনপুট গ্রহণ করে এবং বাকি জটিল কাজগুলো করার জন্য ট্রান্সলেশন এপিআই-কে কল করে। চলুন বিষয়টি ভেঙে দেখি:

  1. local_request ভেরিয়েবলটি ব্যবহার করে দেখুন অনুরোধগুলি ক্লাউড ফাংশন থেকে আসছে কিনা। ক্লাউড ফাংশন তার নিজস্ব ফ্লাস্ক রিকোয়েস্ট অবজেক্ট পাঠায়, যেখানে অন্য সবাই (যারা স্থানীয়ভাবে চলছে অথবা অ্যাপ ইঞ্জিন বা ক্লাউড রানে ডেপ্লয় করছে) সরাসরি ফ্লাস্ক থেকে রিকোয়েস্ট অবজেক্টটি পায়।
  2. ফর্মের মৌলিক ভেরিয়েবলগুলো রিসেট করুন। এটি মূলত GET রিকোয়েস্টের জন্য, কারণ POST রিকোয়েস্টের ডেটা এগুলোকে প্রতিস্থাপন করে।
  3. যদি এটি একটি POST অনুরোধ হয়, তাহলে অনুবাদ করার জন্য টেক্সটটি নিন এবং API মেটাডেটার প্রয়োজনীয়তা প্রতিনিধিত্বকারী একটি JSON কাঠামো তৈরি করুন। এরপর API-টি কল করুন; যদি ব্যবহারকারী কোনো পুরোনো লাইব্রেরি ব্যবহার করেন, তবে API-এর পূর্ববর্তী সংস্করণে ফিরে যান।
  4. যাই হোক না কেন, প্রকৃত ফলাফল (POST) অথবা কোনো ডেটা না থাকা (GET) অবস্থাকে টেমপ্লেট কনটেক্সটে ফরম্যাট করুন এবং রেন্ডার করুন।

অ্যাপ্লিকেশনটির ভিজ্যুয়াল অংশটি টেমপ্লেট index.html ফাইলে রয়েছে। এটি পূর্বে অনুবাদ করা ফলাফলগুলো দেখায় (অন্যথায় ফাঁকা থাকে) এবং তারপরে অনুবাদ করার জন্য কিছু জানতে চেয়ে একটি ফর্ম আসে:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
    <h4>Previous translation</h4>
    <li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
    <li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

৬. স্থানীয় প্যাকেজ/নির্ভরতাগুলি (lib-এ) ইনস্টল করুন।

পূর্বেই যেমন উল্লেখ করা হয়েছে, নমুনা অ্যাপটি পাইথনের জন্য ফ্লাস্ক মাইক্রো ওয়েব ফ্রেমওয়ার্ক এবং গুগল ক্লাউড ট্রান্সলেশন এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করে। এই pip (বা pip3 ) কমান্ডটি ব্যবহার করে pip এবং এই জোড়া প্যাকেজ ইনস্টল ও আপডেট করুন:

pip install -t lib -r requirements.txt

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

$ pip install -t lib -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting flask>=1.1.2
  Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB)
Collecting google-cloud-translate>=2.0.1
  Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB)
Collecting click<8.0,>=5.1
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Jinja2<3.0,>=2.10.1
  Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting Werkzeug<2.0,>=0.15
  Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous<2.0,>=0.24
  Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0
  Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB)
     |████████████████████████████████| 93 kB 2.1 MB/s
Collecting google-cloud-core<2.0dev,>=1.1.0
  Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB)
Collecting MarkupSafe>=0.23
  Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB)
Collecting protobuf>=3.12.0
  Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB)
     |████████████████████████████████| 958 kB 21.6 MB/s
Collecting futures>=3.2.0; python_version < "3.2"
  Using cached futures-3.3.0-py2-none-any.whl (16 kB)
Collecting six>=1.13.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting packaging>=14.3
  Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting googleapis-common-protos<2.0dev,>=1.6.0
  Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB)
Collecting requests<3.0.0dev,>=2.18.0
  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2.0dev,>=1.25.0
  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Collecting setuptools>=40.3.0
  Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
  Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB)
Collecting pyparsing>=2.0.2
  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting chardet<5,>=3.0.2
  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
     |████████████████████████████████| 145 kB 61.1 MB/s
Collecting pyasn1-modules>=0.2.1
  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting rsa<4.6; python_version < "3.6"
  Using cached rsa-4.5-py2.py3-none-any.whl (36 kB)
Collecting cachetools<5.0,>=2.0.0
  Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB)
Collecting enum34>=1.0.4; python_version < "3.4"
  Using cached enum34-1.1.10-py2-none-any.whl (11 kB)
Collecting pyasn1<0.5.0,>=0.4.6
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5

৭. পরিষেবাটি স্থাপন করুন

আপনার অনুবাদ পরিষেবাটি পাইথন ২ অ্যাপ ইঞ্জিনে স্থাপন করতে, এই কমান্ডটি চালান:

gcloud app deploy

আউটপুটটি নিম্নরূপ হওয়া উচিত এবং পরবর্তী পদক্ষেপের জন্য কিছু নির্দেশনা প্রদান করবে:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/nebulous-serverless-python/app.yaml]
source:          [/private/tmp/nebulous-serverless-python]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20210422t161025]
target url:      [https://PROJECT_ID.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1290 files to Google Cloud Storage                       ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

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

da28f951c33a2c3d.png

কোনো কিছু অনুবাদ করে দেখুন তা কীভাবে কাজ করে!

d911984d15dd5ef9.png

৮. উপসংহার

অভিনন্দন! আপনি শিখেছেন কীভাবে ক্লাউড ট্রান্সলেশন এপিআই (Cloud Translation API) সক্রিয় করতে হয়, প্রয়োজনীয় ক্রেডেনশিয়াল (credentials) সংগ্রহ করতে হয় এবং পাইথন ২ অ্যাপ ইঞ্জিনে (Python 2 App Engine) একটি সাধারণ ওয়েব অ্যাপ ডেপ্লয় (deploy) করতে হয়! আপনি রিপো-তে থাকা এই টেবিলটি থেকে এই ডেপ্লয়মেন্ট সম্পর্কে আরও জানতে পারবেন।

পরিষ্কার করা

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

তবে, আপনি যদি এখনও পরবর্তী টিউটোরিয়ালে যাওয়ার জন্য প্রস্তুত না হন অথবা আপনার সদ্য ডেপ্লয় করা অ্যাপটি ইন্টারনেট খুঁজে পাবে বলে চিন্তিত হন, তাহলে চার্জ এড়ানোর জন্য আপনার App Engine অ্যাপটি নিষ্ক্রিয় করুন , আপনার Cloud Function মুছে ফেলুন , অথবা আপনার Cloud Run পরিষেবাটি নিষ্ক্রিয় করুন । যখন আপনি পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হবেন, তখন আপনি এটি পুনরায় সক্রিয় করতে পারবেন। অন্যদিকে, আপনি যদি এই অ্যাপ্লিকেশন বা অন্যান্য কোডল্যাব নিয়ে আর কাজ চালিয়ে যেতে না চান এবং সবকিছু পুরোপুরি মুছে ফেলতে চান, তাহলে আপনি আপনার প্রজেক্টটি শাট ডাউন করতে পারেন।

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

৯. অতিরিক্ত সম্পদ

পরবর্তী বিভাগগুলিতে, এই টিউটোরিয়ালটি সম্পন্ন করে অর্জিত জ্ঞানকে আরও সমৃদ্ধ করার জন্য প্রস্তাবিত অনুশীলনী খুঁজে পাবেন।

অতিরিক্ত অধ্যয়ন

এখন যেহেতু ট্রান্সলেশন এপিআই (Translation API) নিয়ে আপনার কিছুটা অভিজ্ঞতা হয়েছে, চলুন আপনার দক্ষতা আরও বাড়ানোর জন্য কিছু অতিরিক্ত অনুশীলন করা যাক। আপনার শেখার পথ অব্যাহত রাখতে, আমাদের নমুনা অ্যাপটিকে নিম্নলিখিত কাজগুলো করার জন্য পরিবর্তন করুন:

  1. স্থানীয়ভাবে চালানোর জন্য অথবা গুগল ক্লাউড সার্ভারলেস কম্পিউট প্ল্যাটফর্মে স্থাপন করার জন্য এই কোডল্যাবের বাকি সমস্ত সংস্করণ সম্পূর্ণ করুন ( রিপো README দেখুন)।
  2. অন্য একটি প্রোগ্রামিং ভাষা ব্যবহার করে এই টিউটোরিয়ালটি সম্পূর্ণ করুন।
  3. বিভিন্ন উৎস বা লক্ষ্য ভাষা সমর্থন করার জন্য এই অ্যাপ্লিকেশনটি পরিবর্তন করুন।
  4. একাধিক ভাষায় পাঠ্য অনুবাদ করতে সক্ষম হওয়ার জন্য এই অ্যাপ্লিকেশনটি আপগ্রেড করুন; সমর্থিত লক্ষ্য ভাষাগুলোর একটি পুলডাউন তালিকা যুক্ত করতে টেমপ্লেট ফাইলটি পরিবর্তন করুন।

আরও জানুন

গুগল অ্যাপ ইঞ্জিন

গুগল ক্লাউড ফাংশন

গুগল ক্লাউড রান

গুগল ক্লাউড বিল্ডপ্যাকস, কন্টেইনার রেজিস্ট্রি, আর্টিফ্যাক্ট রেজিস্ট্রি

গুগল ক্লাউড ট্রান্সলেশন এবং গুগল এমএল কিট

অন্যান্য গুগল ক্লাউড পণ্য/পৃষ্ঠা

পাইথন এবং ফ্লাস্ক

লাইসেন্স

এই টিউটোরিয়ালটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত, অপরদিকে রিপোজিটরিতে থাকা সোর্স কোডটি অ্যাপাচি ২ লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।