1. بررسی اجمالی
هدف این سری از نرمافزارهای کد (آموزشهای عملی و خودکار) به توسعهدهندگان کمک میکند تا گزینههای مختلفی را که هنگام استقرار برنامههای خود دارند، درک کنند. در این کد لبه، یاد خواهید گرفت که چگونه از Google Cloud Translation API با پایتون استفاده کنید و به صورت محلی اجرا کنید یا در یک پلت فرم محاسباتی بدون سرور Cloud (App Engine، Cloud Functions یا Cloud Run) مستقر کنید. برنامه نمونه موجود در مخزن این آموزش را می توان (حداقل) در هشت روش مختلف با تغییرات جزئی پیکربندی اجرا کرد:
- سرور محلی فلاسک (Python 2)
- سرور محلی فلاسک (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- توابع ابری (Python 3)
- Cloud Run (Python 2 از طریق Docker)
- Cloud Run (Python 3 از طریق Docker)
- Cloud Run (Python 3 از طریق Cloud Buildpacks)
این کد لبه روی استقرار این برنامه در پلتفرم(های) برجسته بالا تمرکز دارد.
شما یاد خواهید گرفت که چگونه
- استفاده از Google Cloud API، به ویژه Cloud Translation API (پیشرفته/نسخه 3)
- یک برنامه وب پایه را به صورت محلی اجرا کنید یا در یک پلت فرم محاسباتی بدون سرور Cloud مستقر کنید
آنچه شما نیاز دارید
- یک پروژه Google Cloud با حساب فعال Cloud Billing
- فلاسک نصب شده برای اجرای محلی، یا یک پلت فرم محاسباتی بدون سرور Cloud فعال برای استقرار مبتنی بر ابر
- مهارت های پایه پایتون
- دانش کاری دستورات اولیه سیستم عامل
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با پایتون چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان
PROJECT_ID
شناخته میشود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود. - یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع 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 را انتخاب کنید.
اگر میخواهید Cloud Vision API را فعال کنید، «vision» را در نوار جستجو وارد کنید و هر چیزی که با آنچه تاکنون وارد کردهاید مطابقت داشته باشد ظاهر میشود:
API مورد نظر برای فعال کردن را انتخاب کنید و روی Enable کلیک کنید:
هزینه
در حالی که بسیاری از APIهای Google را می توان بدون هزینه استفاده کرد، استفاده از محصولات و APIهای Google Cloud رایگان نیست . هنگام فعال کردن Cloud API، ممکن است از شما یک حساب صورتحساب فعال خواسته شود. با این حال، توجه به این نکته مهم است که برخی از محصولات Google Cloud دارای یک ردیف «همیشه رایگان» (روزانه/ماهانه) هستند، که برای متحمل شدن هزینههای صورتحساب باید از آن فراتر بروید. در غیر این صورت، کارت اعتباری شما (یا ابزار صورتحساب مشخص) هزینهای دریافت نخواهد کرد.
کاربران باید قبل از فعال کردن، به اطلاعات قیمت گذاری هر API مراجعه کنند، به ویژه توجه داشته باشند که آیا سطح رایگان دارد یا خیر، و اگر چنین است، چیست. اگر API Cloud Vision را فعال میکردید، صفحه اطلاعات قیمت آن را بررسی میکردید. Cloud Vision یک سهمیه رایگان دارد و تا زمانی که در مجموع در محدوده آن بمانید (در هر ماه)، نباید هیچ هزینه ای متحمل شوید.
قیمت و ردیف های رایگان بین API های Google متفاوت است. مثال ها:
- Google Cloud/GCP — برای هر محصول صورتحساب متفاوتی دریافت میشود و معمولاً به ازای هر چرخه vCPU، مصرفکننده فضای ذخیرهسازی، استفاده از حافظه یا پرداخت به ازای استفاده پرداخت میشود. اطلاعات لایه رایگان را در بالا ببینید.
- Google Maps - دارای مجموعه ای از API ها است و به کاربران یک اعتبار ماهانه رایگان 200 دلاری ارائه می دهد.
- APIهای Google Workspace (که قبلاً G Suite نامیده می شد) — استفاده رایگان (تا سقف معین) تحت پوشش هزینه اشتراک ماهانه Workspace را فراهم می کند، بنابراین هیچ صورتحساب مستقیمی برای استفاده از Gmail، Google Drive، Calendar، Docs، Sheets، و APIهای اسلایدها وجود ندارد.
صورتحساب محصولات مختلف 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 را از دکمه سبز کد آن دانلود کنید، همانطور که در تصویر زیر نشان داده شده است:
اکنون که همه چیز را دارید، برای انجام این آموزش خاص یک کپی کامل از پوشه ایجاد کنید، زیرا احتمالاً شامل حذف یا تغییر فایل ها می شود. اگر میخواهید استقرار متفاوتی انجام دهید، میتوانید با کپی کردن نسخه اصلی از نو شروع کنید تا مجبور نباشید دوباره آن را شبیهسازی یا دانلود کنید.
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)))
- واردات، عملکرد Flask، ماژول
google.auth
و کتابخانه سرویس گیرنده Cloud Translation API را به ارمغان می آورد. - متغیرهای سراسری برنامه Flask، شناسه پروژه Cloud، سرویس گیرنده API ترجمه، "مسیر موقعیت مکانی" والد برای فراخوانی های Translation API و زبان های مبدأ و مقصد را نشان می دهند. در این مورد، انگلیسی (
en
) و اسپانیایی (es
) است، اما با خیال راحت این مقادیر را به کدهای زبان دیگری که توسط Cloud Translation API پشتیبانی میشوند تغییر دهید. - بلوک
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 ترجمه برای انجام کارهای سنگین را انجام می دهد. بیایید آن را تجزیه کنیم:
- بررسی کنید که آیا درخواستها از توابع Cloud با استفاده از متغیر
local_request
ارسال میشوند یا خیر. Cloud Functions شی درخواست Flask خود را ارسال می کند، در حالی که همه موارد دیگر (که به صورت محلی اجرا می شوند یا در App Engine یا Cloud Run اجرا می شوند) شی درخواست را مستقیماً از Flask دریافت می کنند. - متغیرهای اصلی فرم را بازنشانی کنید. این در درجه اول برای درخواست های GET است زیرا درخواست های POST داده هایی دارند که جایگزین آنها می شوند.
- اگر یک POST است، متن را برای ترجمه بردارید و یک ساختار JSON ایجاد کنید که نشان دهنده نیاز فراداده API است. سپس API را فراخوانی کنید، اگر کاربر از کتابخانه قدیمیتری استفاده میکند، به نسخه قبلی API بازمیگردید.
- صرف نظر از این، نتایج واقعی (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. Docker را برای ساخت تصویر پایتون 3 تنظیم کنید
اکنون فایل Dockerfile
را باز کنید که بدون اطلاعات مجوز به شکل زیر است:
#FROM python:3-slim
FROM python:2-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
همانطور که می توانید بگویید، به طور پیش فرض برای Python 2 تنظیم شده است، بنابراین بیایید آن را با ویرایش خط FROM
از python:2-slim
به python:3-slim
تغییر دهیم یا خط بالایی را حذف کرده و خط FROM
قدیمی را حذف کنیم. وقتی کارتان تمام شد، Dockerfile
باید به شکل زیر باشد:
FROM python:3-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
7. سرویس را مستقر کنید
اکنون با اجرای این دستور آماده هستید تا سرویس ترجمه خود را در 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 حاوی شناسه پروژه خود همانطور که در خروجی استقرار نشان داده شده است به آن دسترسی پیدا کنید:
چیزی را ترجمه کنید تا ببینید کار می کند!
8. نتیجه گیری
تبریک می گویم! شما یاد گرفتید که چگونه Cloud Translation API را فعال کنید، اعتبار لازم را دریافت کنید و یک برنامه وب ساده را در Python 3 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 ، جانشین آن ذخیره می شود. ذخیره سازی آن تصویر مقداری از آن سهمیه را مصرف می کند، همانطور که شبکه هنگام انتقال آن تصویر به سرویس خارج می شود. با این حال، ممکن است در منطقهای زندگی کنید که چنین سطح رایگانی ندارد، بنابراین برای به حداقل رساندن هزینههای احتمالی از میزان استفاده از فضای ذخیرهسازی خود آگاه باشید.
9. منابع اضافی
در بخشهای بعدی، میتوانید مطالب خواندنی اضافی و همچنین تمرینهای توصیهشده برای افزایش دانش خود را که از تکمیل این آموزش کسب کردهاید، بیابید.
مطالعه تکمیلی
اکنون که تجربه ای در زمینه Translation API دارید، بیایید چند تمرین اضافی برای توسعه بیشتر مهارت های خود انجام دهیم. برای ادامه مسیر یادگیری خود، برنامه نمونه ما را برای انجام موارد زیر تغییر دهید:
- تمام نسخههای دیگر این آزمایشگاه کد را برای اجرای محلی یا استقرار در پلتفرمهای محاسباتی بدون سرور Google Cloud تکمیل کنید (به repo README مراجعه کنید).
- این آموزش را با استفاده از یک زبان برنامه نویسی دیگر کامل کنید.
- این برنامه را برای پشتیبانی از زبان های مبدأ یا مقصد مختلف تغییر دهید.
- این برنامه را ارتقا دهید تا بتوانید متن را به بیش از یک زبان ترجمه کنید. فایل الگو را تغییر دهید تا زبانهای هدف پشتیبانی شده را به صورت کشویی داشته باشید.
بیشتر بدانید
موتور برنامه گوگل
- صفحه اصلی App Engine
- مستندات App Engine
- راه اندازی سریع موتور برنامه پایتون 3
- حسابهای سرویس پیشفرض برای App Engine
- زمان اجرا Python 2 App Engine (استاندارد).
- زمان اجرا Python 3 App Engine (استاندارد).
- تفاوت بین زمان اجرا Python 2 و 3 App Engine (استاندارد).
- راهنمای مهاجرت پایتون 2 به 3 App Engine (استاندارد).
توابع Google Cloud
- صفحه اصلی توابع ابری
- مستندات توابع ابری
- اجرای سریع پایتون Cloud Functions
- حسابهای سرویس پیشفرض برای توابع ابری
Google Cloud Run
- صفحه اصلی Cloud Run
- مستندات Cloud Run
- Python Cloud Run Quick Start
- حساب های سرویس پیش فرض برای Cloud Run
Google Cloud Buildpacks، Container Registry، Artifact Registry
- اطلاعیه Cloud Buildpacks
- مخزن Cloud Buildpacks
- صفحه اصلی Cloud Artifact Registry
- مستندات ثبت آرتفکت ابری
- صفحه اصلی Cloud Container Registry
- مستندات Cloud Container Registry
Google Cloud Translation و Google ML Kit
- صفحه اصلی ترجمه ابری
- مستندات ترجمه ابری
- صفحه قیمت گذاری API ترجمه
- همه APIهای "ساختمان بلوک" AI/ML Cloud
- Google ML Kit (زیر مجموعه Cloud AI/ML APIs برای موبایل)
- Google ML Kit Translation API
سایر محصولات/صفحات Google Cloud
- پشتیبانی Google Cloud Python
- کتابخانه های سرویس گیرنده Google Cloud
- لایه Google Cloud "همیشه رایگان".
- تمام اسناد Google Cloud
پایتون و فلاسک
مجوز
این آموزش تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد در حالی که کد منبع موجود در مخزن تحت مجوز Apache 2 است.