یک "Google Translate" برنامه در Python 2 Cloud Run (Docker)

1. بررسی اجمالی

هدف این سری از نرم‌افزارهای کد (آموزش‌های عملی و خودکار) به توسعه‌دهندگان کمک می‌کند تا گزینه‌های مختلفی را که هنگام استقرار برنامه‌های خود دارند، درک کنند. در این کد لبه، یاد خواهید گرفت که چگونه از Google Cloud Translation API با پایتون استفاده کنید و به صورت محلی اجرا کنید یا در یک پلت فرم محاسباتی بدون سرور Cloud (App Engine، Cloud Functions یا Cloud Run) مستقر کنید. برنامه نمونه موجود در مخزن این آموزش را می توان (حداقل) در هشت روش مختلف با تغییرات جزئی پیکربندی اجرا کرد:

  1. سرور محلی فلاسک (Python 2)
  2. سرور محلی فلاسک (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. توابع ابری (Python 3)
  6. Cloud Run (Python 2 از طریق Docker)
  7. Cloud Run (Python 3 از طریق Docker)
  8. Cloud Run (Python 3 از طریق Cloud Buildpacks)

این کد لبه روی استقرار این برنامه در پلتفرم(های) برجسته بالا تمرکز دارد.

شما یاد خواهید گرفت که چگونه

آنچه شما نیاز دارید

  • یک پروژه Google Cloud با حساب فعال Cloud Billing
  • فلاسک نصب شده برای اجرای محلی، یا یک پلت فرم محاسباتی بدون سرور Cloud فعال برای استقرار مبتنی بر ابر
  • مهارت های پایه پایتون
  • دانش کاری دستورات اولیه سیستم عامل

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

آن را بخوانید و تمرینات را کامل کنید فقط آن را بخوانید

تجربه خود را با پایتون چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
  • شناسه پروژه باید در تمام پروژه‌های Google Cloud منحصربه‌فرد باشد و تغییرناپذیر باشد (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان PROJECT_ID شناخته می‌شود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا می‌توانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود.
  • یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعمل‌های «پاک‌سازی» را که در انتهای Codelab یافت می‌شود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

3. Translation API را فعال کنید

فعال کردن Cloud API

در این بخش، نحوه فعال کردن API های گوگل را به طور کلی می آموزید. برای برنامه نمونه ما، Cloud Translation API ، Cloud Run و Cloud Artifact Registry را فعال می‌کنید.

مقدمه

صرف نظر از اینکه از کدام API Google می خواهید در برنامه خود استفاده کنید، آنها باید فعال باشند. مثال زیر دو روش برای فعال کردن Cloud Vision API را نشان می دهد. بعد از اینکه نحوه فعال کردن یک Cloud API را یاد گرفتید، می‌توانید APIهای دیگر را فعال کنید زیرا فرآیند مشابه است.

گزینه 1: از Cloud Shell یا رابط خط فرمان شما

در حالی که فعال کردن API ها از کنسول Cloud رایج تر است، برخی از توسعه دهندگان ترجیح می دهند همه چیز را از طریق خط فرمان انجام دهند. برای انجام این کار، باید «نام سرویس» یک API را جستجو کنید. به نظر می رسد یک URL: SERVICE_NAME .googleapis.com . می‌توانید اینها را در نمودار محصولات پشتیبانی شده بیابید یا می‌توانید با برنامه Google Discovery API آنها را جستجو کنید.

با استفاده از این اطلاعات، با استفاده از Cloud Shell (یا محیط توسعه محلی خود با ابزار خط فرمان gcloud نصب شده )، می توانید یک API را به شرح زیر فعال کنید:

gcloud services enable SERVICE_NAME.googleapis.com

به عنوان مثال، این دستور Cloud Vision API را فعال می کند:

gcloud services enable vision.googleapis.com

این دستور App Engine را فعال می کند:

gcloud services enable appengine.googleapis.com

همچنین می توانید چندین API را با یک درخواست فعال کنید. به عنوان مثال، این خط فرمان Cloud Run، Cloud Artifact Registry و Cloud Translation API را فعال می کند:

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

گزینه 2: از کنسول Cloud

همچنین می توانید Vision API را در API Manager فعال کنید. از Cloud Console، به API Manager بروید و Library را انتخاب کنید.

fb0f1d315f122d4a.png

اگر می‌خواهید Cloud Vision API را فعال کنید، «vision» را در نوار جستجو وارد کنید و هر چیزی که با آنچه تاکنون وارد کرده‌اید مطابقت داشته باشد ظاهر می‌شود:

2275786a24f8f204.png

API مورد نظر برای فعال کردن را انتخاب کنید و روی Enable کلیک کنید:

2556f923b628e31.png

هزینه

در حالی که بسیاری از APIهای Google را می توان بدون هزینه استفاده کرد، استفاده از محصولات و APIهای Google Cloud رایگان نیست . هنگام فعال کردن Cloud API، ممکن است از شما یک حساب صورتحساب فعال خواسته شود. با این حال، توجه به این نکته مهم است که برخی از محصولات Google Cloud دارای یک ردیف «همیشه رایگان» (روزانه/ماهانه) هستند، که برای متحمل شدن هزینه‌های صورت‌حساب باید از آن فراتر بروید. در غیر این صورت، کارت اعتباری شما (یا ابزار صورت‌حساب مشخص) هزینه‌ای دریافت نخواهد کرد.

کاربران باید قبل از فعال کردن، به اطلاعات قیمت گذاری هر API مراجعه کنند، به ویژه توجه داشته باشند که آیا سطح رایگان دارد یا خیر، و اگر چنین است، چیست. اگر API Cloud Vision را فعال می‌کردید، صفحه اطلاعات قیمت آن را بررسی می‌کردید. Cloud Vision یک سهمیه رایگان دارد و تا زمانی که در مجموع در محدوده آن بمانید (در هر ماه)، نباید هیچ هزینه ای متحمل شوید.

قیمت و ردیف های رایگان بین API های Google متفاوت است. مثال ها:

صورت‌حساب محصولات مختلف Google متفاوت است، بنابراین حتماً برای این اطلاعات به اسناد API خود مراجعه کنید.

خلاصه

اکنون که می دانید چگونه API های Google را به طور کلی فعال کنید، به مدیر API بروید و Cloud Translation API، Cloud Run و Cloud Artifact Registry را فعال کنید (اگر قبلاً این کار را نکرده اید). شما اولی را فعال می کنید زیرا برنامه ما از آن استفاده می کند. شما دومی را فعال می‌کنید زیرا در آنجا تصاویر کانتینر ما قبل از استقرار برای راه‌اندازی سرویس Cloud Run ذخیره می‌شوند، به همین دلیل است که باید آن را فعال کنید. اگر ترجیح می دهید همه آنها را با ابزار gcloud فعال کنید، به جای آن دستور زیر را از ترمینال خود صادر کنید:

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

در حالی که سهمیه ماهانه آن در صفحه خلاصه رده کلی «همیشه رایگان» فهرست نشده است، صفحه قیمت گذاری Translation API بیان می کند که همه کاربران مقدار ثابتی از نویسه های ترجمه شده را ماهیانه دریافت می کنند. اگر زیر این آستانه بمانید، نباید از API هزینه ای متحمل شوید. اگر هزینه‌های دیگری مربوط به Google Cloud وجود دارد، در پایان در بخش «پاک‌سازی» مورد بحث قرار خواهد گرفت.

4. نمونه کد برنامه را دریافت کنید

کد موجود در مخزن را به صورت محلی یا در Cloud Shell (با استفاده از دستور git clone ) کلون کنید، یا فایل ZIP را از دکمه سبز کد آن دانلود کنید، همانطور که در تصویر زیر نشان داده شده است:

5cd6110c4414cf65.png

اکنون که همه چیز را دارید، برای انجام این آموزش خاص یک کپی کامل از پوشه ایجاد کنید، زیرا احتمالاً شامل حذف یا تغییر فایل ها می شود. اگر می‌خواهید استقرار متفاوتی انجام دهید، می‌توانید با کپی کردن نسخه اصلی از نو شروع کنید تا مجبور نباشید دوباره آن را شبیه‌سازی یا دانلود کنید.

5. تور نمونه برنامه

برنامه نمونه یک مشتق ساده Google Translate است که از کاربران می خواهد متنی را به زبان انگلیسی وارد کنند و ترجمه معادل آن متن را به زبان اسپانیایی دریافت کنند. حالا فایل 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. واردات، عملکرد Flask، ماژول google.auth و کتابخانه سرویس گیرنده Cloud Translation API را به ارمغان می آورد.
  2. متغیرهای سراسری برنامه Flask، شناسه پروژه Cloud، سرویس گیرنده API ترجمه، "مسیر موقعیت مکانی" والد برای فراخوانی های Translation API و زبان های مبدأ و مقصد را نشان می دهند. در این مورد، انگلیسی ( en ) و اسپانیایی ( es ) است، اما با خیال راحت این مقادیر را به کدهای زبان دیگری که توسط Cloud Translation API پشتیبانی می‌شوند تغییر دهید.
  3. بلوک if بزرگ در پایین در آموزش برای اجرای این برنامه به صورت محلی استفاده می شود — از سرور توسعه Flask برای ارائه برنامه ما استفاده می کند. این بخش همچنین برای آموزش‌های استقرار Cloud Run در صورتی است که سرور وب در کانتینر بسته نشده باشد. از شما خواسته می‌شود که بسته‌بندی سرور را در ظرف فعال کنید، اما اگر این موضوع را نادیده بگیرید، کد برنامه به استفاده از سرور توسعه Flask برمی‌گردد. (این مشکل با App Engine یا توابع Cloud نیست، زیرا آنها پلتفرم های مبتنی بر منبع هستند، به این معنی که Google Cloud یک وب سرور پیش فرض را ارائه و اجرا می کند.)

در نهایت، در وسط 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)

عملکرد اصلی کار دریافت ورودی کاربر و فراخوانی API ترجمه برای انجام کارهای سنگین را انجام می دهد. بیایید آن را تجزیه کنیم:

  1. بررسی کنید که آیا درخواست‌ها از توابع Cloud با استفاده از متغیر local_request ارسال می‌شوند یا خیر. Cloud Functions شی درخواست Flask خود را ارسال می کند، در حالی که همه موارد دیگر (که به صورت محلی اجرا می شوند یا در App Engine یا Cloud Run اجرا می شوند) شی درخواست را مستقیماً از Flask دریافت می کنند.
  2. متغیرهای اصلی فرم را بازنشانی کنید. این در درجه اول برای درخواست های GET است زیرا درخواست های POST داده هایی دارند که جایگزین آنها می شوند.
  3. اگر یک POST است، متن را برای ترجمه بردارید و یک ساختار JSON ایجاد کنید که نشان دهنده نیاز فراداده API است. سپس 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>

6. سرویس را مستقر کنید

اکنون با اجرای این دستور آماده هستید تا سرویس ترجمه خود را در Cloud Run اجرا کنید:

gcloud run deploy translate --source . --allow-unauthenticated --platform managed

خروجی باید به شکل زیر باشد و برخی از دستورات را برای مراحل بعدی ارائه دهد:

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed
Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

اکنون که برنامه شما به صورت جهانی در سراسر جهان در دسترس است، باید بتوانید در URL حاوی شناسه پروژه خود همانطور که در خروجی استقرار نشان داده شده است به آن دسترسی پیدا کنید:

169f6edf5f7d2068.png

چیزی را ترجمه کنید تا ببینید کار می کند!

31554e71cb80f1b4.png

7. نتیجه گیری

تبریک می گویم! شما یاد گرفتید که چگونه Cloud Translation API را فعال کنید، اعتبار لازم را دریافت کنید و یک برنامه وب ساده را در Python 2 Cloud Run اجرا کنید! می توانید از این جدول در مخزن اطلاعات بیشتری در مورد این استقرار کسب کنید.

تمیز کردن

Cloud Translation API به شما امکان می دهد مقدار ثابتی از کاراکترهای ترجمه شده را در ماه به صورت رایگان انجام دهید. App Engine همچنین دارای سهمیه رایگان است و همین امر در مورد Cloud Functions و Cloud Run نیز صدق می کند. در صورت تجاوز از هر کدام، هزینه‌هایی به شما تحمیل می‌شود. اگر قصد دارید به نسخه کد بعدی ادامه دهید، لازم نیست برنامه خود را ببندید.

با این حال، اگر هنوز برای رفتن به آموزش بعدی آماده نیستید یا نگران هستید که اینترنت برنامه‌ای را که به تازگی راه‌اندازی کرده‌اید کشف کند، برنامه App Engine خود را غیرفعال کنید ، عملکرد Cloud خود را حذف کنید یا سرویس Cloud Run خود را غیرفعال کنید. تحمیل هزینه هنگامی که برای رفتن به کد بعدی آماده شدید، می توانید آن را دوباره فعال کنید. از طرف دیگر، اگر نمی‌خواهید با این برنامه یا سایر کد لبه‌ها ادامه دهید و می‌خواهید همه چیز را به طور کامل حذف کنید، می‌توانید پروژه خود را خاموش کنید .

همچنین، استقرار در یک پلت فرم محاسباتی بدون سرور Google Cloud هزینه‌های ساخت و ذخیره‌سازی جزئی را متحمل می‌شود. Cloud Build سهمیه رایگان خودش را دارد و Cloud Storage هم دارد. برای شفافیت بیشتر، Cloud Build تصویر برنامه شما را می سازد، که سپس در Cloud Container Registry یا Artifact Registry ، جانشین آن ذخیره می شود. ذخیره سازی آن تصویر مقداری از آن سهمیه را مصرف می کند، همانطور که شبکه هنگام انتقال آن تصویر به سرویس خارج می شود. با این حال، ممکن است در منطقه‌ای زندگی کنید که چنین سطح رایگانی ندارد، بنابراین برای به حداقل رساندن هزینه‌های احتمالی از میزان استفاده از فضای ذخیره‌سازی خود آگاه باشید.

8. منابع اضافی

در بخش‌های بعدی، می‌توانید مطالب خواندنی اضافی و همچنین تمرین‌های توصیه‌شده برای افزایش دانش خود را که از تکمیل این آموزش کسب کرده‌اید، بیابید.

مطالعه تکمیلی

اکنون که تجربه ای در زمینه Translation API دارید، بیایید چند تمرین اضافی برای توسعه بیشتر مهارت های خود انجام دهیم. برای ادامه مسیر یادگیری خود، برنامه نمونه ما را برای انجام موارد زیر تغییر دهید:

  1. تمام نسخه‌های دیگر این آزمایشگاه کد را برای اجرای محلی یا استقرار در پلت‌فرم‌های محاسباتی بدون سرور Google Cloud تکمیل کنید (به repo README مراجعه کنید).
  2. این آموزش را با استفاده از یک زبان برنامه نویسی دیگر کامل کنید.
  3. این برنامه را برای پشتیبانی از زبان های مبدأ یا مقصد مختلف تغییر دهید.
  4. این برنامه را ارتقا دهید تا بتوانید متن را به بیش از یک زبان ترجمه کنید. فایل الگو را تغییر دهید تا زبان‌های هدف پشتیبانی شده را به صورت کشویی داشته باشید.

بیشتر بدانید

موتور برنامه گوگل

توابع Google Cloud

Google Cloud Run

Google Cloud Buildpacks، Container Registry، Artifact Registry

Google Cloud Translation و Google ML Kit

سایر محصولات/صفحات Google Cloud

پایتون و فلاسک

مجوز

این آموزش تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد در حالی که کد منبع موجود در مخزن تحت مجوز Apache 2 است.