सामान्य "Google अनुवाद" Python 2 App Engine पर ऐप्लिकेशन

1. खास जानकारी

इस कोडलैब सीरीज़ (अपने हिसाब से सीखने और प्रैक्टिकल करने के लिए ट्यूटोरियल) का मकसद, डेवलपर को यह समझने में मदद करना है कि ऐप्लिकेशन डिप्लॉय करते समय उनके पास कौन-कौनसे विकल्प होते हैं. इस कोडलैब में, आपको Python के साथ 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. Cloud Functions (Python 3)
  6. Cloud Run (Docker के ज़रिए Python 2)
  7. Cloud Run (Docker के ज़रिए Python 3)
  8. Cloud Run (Cloud Buildpacks के ज़रिए Python 3)

इस कोडलैब में, इस ऐप्लिकेशन को ऊपर दिए गए बोल्ड किए गए प्लैटफ़ॉर्म पर डिप्लॉय करने के बारे में बताया गया है.

आपको इनके बारे में जानकारी मिलेगी

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट और चालू क्लाउड बिलिंग खाता
  • स्थानीय तौर पर चलाने के लिए Flask इंस्टॉल किया गया हो या क्लाउड पर आधारित डिप्लॉयमेंट के लिए, क्लाउड सर्वरलेस कंप्यूट प्लैटफ़ॉर्म चालू हो
  • Python की बुनियादी जानकारी
  • ऑपरेटिंग सिस्टम के बुनियादी निर्देशों के बारे में जानकारी होना

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे पढ़ें और एक्सरसाइज़ पूरी करें सिर्फ़ इसे पढ़ें

Python के साथ अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

Google Cloud की सेवाओं को इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक कैरेक्टर स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे किसी भी समय अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. इसे आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट करें. इसके अलावा, अपने हिसाब से कोई आईडी बनाकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. संसाधन बंद करने के लिए, कोडलैब के आखिर में दिए गए "बंद करें" निर्देशों का पालन करें, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

3. Translation API चालू करना

हमारे सैंपल ऐप्लिकेशन के लिए, आपको Cloud Translation API और App Engine सेवा को चालू करना होगा. इसके लिए, यहां दिए गए निर्देशों का पालन करें.

Cloud API चालू करना

शुरुआती जानकारी

आपको अपने ऐप्लिकेशन में जिस भी Google API का इस्तेमाल करना है उसे चालू करना होगा. यहां दिए गए उदाहरण में, Cloud Vision API को चालू करने के दो तरीके बताए गए हैं. किसी एक Cloud API को चालू करने का तरीका जानने के बाद, अन्य एपीआई को भी चालू किया जा सकेगा. ऐसा इसलिए, क्योंकि इन्हें चालू करने की प्रोसेस एक जैसी होती है.

पहला विकल्प: Cloud Shell या कमांड-लाइन इंटरफ़ेस से

Cloud Console से एपीआई चालू करना ज़्यादा आम है. हालांकि, कुछ डेवलपर कमांड लाइन से ही सब कुछ करना पसंद करते हैं. इसके लिए, आपको किसी एपीआई का "सेवा का नाम" देखना होगा. यह एक यूआरएल जैसा दिखता है: SERVICE_NAME.googleapis.com. इन्हें एपीआई के साथ काम करने वाले प्रॉडक्ट के चार्ट में देखा जा सकता है. इसके अलावा, Google Discovery API का इस्तेमाल करके, इनके बारे में प्रोग्राम के ज़रिए क्वेरी की जा सकती है.

इस जानकारी के साथ, Cloud Shell का इस्तेमाल करके (या gcloud कमांड-लाइन टूल इंस्टॉल किए गए अपने लोकल डेवलपमेंट एनवायरमेंट का इस्तेमाल करके), एपीआई को चालू किया जा सकता है. इसके लिए, यह तरीका अपनाएं:

gcloud services enable SERVICE_NAME.googleapis.com

उदाहरण के लिए, इस कमांड से Cloud Vision API चालू हो जाता है:

gcloud services enable vision.googleapis.com

इस निर्देश से App Engine चालू हो जाता है:

gcloud services enable appengine.googleapis.com

एक ही अनुरोध में कई एपीआई चालू किए जा सकते हैं. उदाहरण के लिए, इस कमांड लाइन से Cloud Run, Cloud Artifact Registry, और Cloud Translation API चालू हो जाते हैं:

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

दूसरा विकल्प: Cloud Console से

एपीआई मैनेजर में जाकर भी Vision API को चालू किया जा सकता है. Cloud Console में जाकर, एपीआई मैनेजर पर जाएं. इसके बाद, लाइब्रेरी चुनें.

fb0f1d315f122d4a.png

अगर आपको Cloud Vision API चालू करना है, तो खोज बार में "vision" टाइप करना शुरू करें. इसके बाद, आपके टाइप किए गए शब्दों से मिलते-जुलते सभी विकल्प दिखने लगेंगे:

2275786a24f8f204.png

वह एपीआई चुनें जिसे आपको चालू करना है. इसके बाद, चालू करें पर क्लिक करें:

2556f923b628e31.png

लागत

Google के कई एपीआई का इस्तेमाल बिना किसी शुल्क के किया जा सकता है. हालांकि, Google Cloud के प्रॉडक्ट और एपीआई का इस्तेमाल मुफ़्त में नहीं किया जा सकता. Cloud API चालू करते समय, आपसे चालू बिलिंग खाते के बारे में पूछा जा सकता है. हालांकि, यह ध्यान रखना ज़रूरी है कि Google Cloud के कुछ प्रॉडक्ट में "हमेशा के लिए बिना शुल्क" टियर (रोज़ाना/महीने के हिसाब से) की सुविधा होती है. बिलिंग के शुल्क चुकाने के लिए, आपको इस टियर की सीमा से ज़्यादा इस्तेमाल करना होगा. ऐसा न करने पर, आपके क्रेडिट कार्ड (या बिलिंग के लिए तय किए गए इंस्ट्रुमेंट) से शुल्क नहीं लिया जाएगा.

किसी भी एपीआई को चालू करने से पहले, उपयोगकर्ताओं को उसकी कीमत की जानकारी देखनी चाहिए. खास तौर पर, यह देखना चाहिए कि क्या एपीआई का इस्तेमाल बिना किसी शुल्क के किया जा सकता है. अगर हां, तो यह भी देखना चाहिए कि बिना किसी शुल्क के एपीआई का इस्तेमाल करने की क्या शर्तें हैं. अगर आपको Cloud Vision API चालू करना है, तो आपको उसकी कीमत की जानकारी वाले पेज पर जाना होगा. Cloud Vision के लिए मुफ़्त कोटा उपलब्ध है. जब तक आप हर महीने इसकी तय सीमा के अंदर रहते हैं, तब तक आपसे कोई शुल्क नहीं लिया जाएगा.

Google के अलग-अलग एपीआई के लिए, कीमत और मुफ़्त टियर अलग-अलग होते हैं. उदाहरण:

  • Google Cloud/GCP — हर प्रॉडक्ट के लिए अलग-अलग तरीके से बिलिंग की जाती है. आम तौर पर, vCPU साइकल, स्टोरेज कंज्यूमर, मेमोरी के इस्तेमाल या इस्तेमाल के हिसाब से शुल्क लिया जाता है. बिना किसी शुल्क के इस्तेमाल की जा सकने वाली सुविधाओं के बारे में ऊपर देखें.
  • Google Maps — इसमें एपीआई का एक सुइट शामिल है. साथ ही, यह उपयोगकर्ताओं को हर महीने 200 डॉलर का मुफ़्त क्रेडिट देता है.
  • Google Workspace (पहले इसे G Suite कहा जाता था) के एपीआई — इनका इस्तेमाल मुफ़्त में किया जा सकता है. हालांकि, इसके लिए कुछ सीमाएं तय की गई हैं. इन सीमाओं के तहत, Workspace की हर महीने की सदस्यता के शुल्क में ही इन एपीआई का इस्तेमाल करने की सुविधा शामिल होती है. इसलिए, Gmail, Google Drive, Calendar, Docs, Sheets, और Slides के एपीआई इस्तेमाल करने के लिए, अलग से बिलिंग नहीं की जाती है.

Google के अलग-अलग प्रॉडक्ट के लिए बिलिंग अलग-अलग तरीके से की जाती है. इसलिए, इस बारे में जानकारी पाने के लिए, अपने एपीआई के दस्तावेज़ देखें.

खास जानकारी

अब आपको Google API को चालू करने का तरीका पता चल गया है. इसलिए, कृपया API मैनेजर पर जाएं और Cloud Translation API और App Engine सेवा, दोनों को चालू करें. अगर आपने पहले से ही ऐसा नहीं किया है, तो ऐसा करें. पहले वाले को इसलिए चालू करें, क्योंकि हमारा ऐप्लिकेशन इसका इस्तेमाल करेगा. दूसरे वाले को इसलिए चालू करें, क्योंकि आपको App Engine ऐप्लिकेशन डिप्लॉय करना है. अगर आपको इसे कमांड-लाइन से चालू करना है, तो इसके बजाय यह कमांड जारी करें:

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

"हमेशा के लिए बिना शुल्क" टियर के खास जानकारी वाले पेज पर, इसके हर महीने के कोटे की जानकारी नहीं दी गई है. हालांकि, Translation API के कीमत वाले पेज पर बताया गया है कि सभी उपयोगकर्ताओं को हर महीने, अनुवाद किए गए वर्णों की तय संख्या मिलती है. अगर आपका इस्तेमाल, थ्रेशोल्ड से कम है, तो आपसे एपीआई का कोई शुल्क नहीं लिया जाएगा. अगर Google Cloud से जुड़े कोई अन्य शुल्क हैं, तो उनके बारे में "सफ़ाई करना" सेक्शन में आखिर में बताया जाएगा.

4. सैंपल ऐप्लिकेशन का कोड पाना

रिपो में मौजूद कोड को स्थानीय तौर पर या Cloud Shell में क्लोन करें. इसके लिए, git clone कमांड का इस्तेमाल करें. इसके अलावा, ZIP फ़ाइल को हरे रंग के Code बटन से डाउनलोड करें. यह बटन, नीचे दिए गए स्क्रीनशॉट में दिखाया गया है:

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 प्रोजेक्ट आईडी, Translation API क्लाइंट, Translation API कॉल के लिए पैरंट "location path", और सोर्स और टारगेट भाषाओं को दिखाते हैं. इस मामले में, यह अंग्रेज़ी (en) और स्पैनिश (es) है. हालांकि, इन वैल्यू को Cloud Translation API के साथ काम करने वाले अन्य भाषा कोड में बदला जा सकता है.
  3. ट्यूटोरियल में सबसे नीचे मौजूद बड़े if ब्लॉक का इस्तेमाल, इस ऐप्लिकेशन को स्थानीय तौर पर चलाने के लिए किया जाता है. यह हमारे ऐप्लिकेशन को चलाने के लिए, Flask डेवलपमेंट सर्वर का इस्तेमाल करता है. अगर वेब सर्वर को कंटेनर में बंडल नहीं किया जाता है, तो यह सेक्शन Cloud Run डिप्लॉयमेंट ट्यूटोरियल के लिए भी यहां मौजूद है. आपको कंटेनर में सर्वर को बंडल करने के लिए कहा जाता है. हालांकि, अगर आपने इस पर ध्यान नहीं दिया, तो ऐप्लिकेशन कोड, Flask डेवलपमेंट सर्वर का इस्तेमाल करने लगता है. (यह App Engine या Cloud Functions से जुड़ी समस्या नहीं है, क्योंकि ये सोर्स पर आधारित प्लैटफ़ॉर्म हैं. इसका मतलब है कि 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)

प्राइमरी फ़ंक्शन, उपयोगकर्ता से इनपुट लेता है और Translation API को कॉल करता है, ताकि वह मुश्किल काम कर सके. चलिए, इनके बारे में एक-एक करके जानते हैं:

  1. देखें कि local_request वैरिएबल का इस्तेमाल करके, Cloud Functions से अनुरोध किए जा रहे हैं या नहीं. Cloud Functions, अपना Flask Request ऑब्जेक्ट भेजता है. वहीं, अन्य सभी (स्थानीय तौर पर चल रहे या App Engine या Cloud Run पर डिप्लॉय किए जा रहे) को Flask से सीधे तौर पर अनुरोध ऑब्जेक्ट मिलेगा.
  2. फ़ॉर्म के लिए बुनियादी वैरिएबल रीसेट करें. यह मुख्य रूप से GET अनुरोधों के लिए है, क्योंकि POST अनुरोधों में ऐसा डेटा होगा जो इन्हें बदल देगा.
  3. अगर यह POST है, तो अनुवाद करने के लिए टेक्स्ट को कॉपी करें. इसके बाद, एपीआई के मेटाडेटा की ज़रूरी शर्तों को पूरा करने वाला JSON स्ट्रक्चर बनाएं. इसके बाद, एपीआई को कॉल करें. अगर उपयोगकर्ता पुरानी लाइब्रेरी का इस्तेमाल कर रहा है, तो एपीआई के पिछले वर्शन पर वापस जाएं.
  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. स्थानीय पैकेज/डिपेंडेंसी (lib में) इंस्टॉल करें

जैसा कि पहले बताया गया है, सैंपल ऐप्लिकेशन, Flask माइक्रो वेब फ़्रेमवर्क और Python के लिए Google Cloud Translation API क्लाइंट लाइब्रेरी का इस्तेमाल करता है. pip और पैकेज के इस पेयर को pip (या pip3) कमांड का इस्तेमाल करके इंस्टॉल और अपडेट करें:

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

7. सेवा को डिप्लॉय करना

अपनी अनुवाद सेवा को Python 2 App Engine पर डिप्लॉय करने के लिए, यह निर्देश चलाएं:

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

अब आपका ऐप्लिकेशन दुनिया भर में उपलब्ध है. इसलिए, आपको इसे डिप्लॉयमेंट आउटपुट में दिए गए यूआरएल पर ऐक्सेस करना चाहिए. इस यूआरएल में आपका प्रोजेक्ट आईडी शामिल होता है:

da28f951c33a2c3d.png

इसे आज़माने के लिए, किसी टेक्स्ट का अनुवाद करें!

d911984d15dd5ef9.png

8. नतीजा

बधाई हो! आपने Cloud Translation API को चालू करने, ज़रूरी क्रेडेंशियल पाने, और Python 2 App Engine पर एक सामान्य वेब ऐप्लिकेशन डिप्लॉय करने का तरीका जान लिया है! रिपो में मौजूद इस टेबल से, इस डिप्लॉयमेंट के बारे में ज़्यादा जानें.

व्यवस्थित करें

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 के बारे में कुछ जानकारी मिल गई है. इसलिए, आइए अपनी स्किल्स को और बेहतर बनाने के लिए कुछ और एक्सरसाइज़ करें. अपने लर्निंग पाथ को जारी रखने के लिए, हमारे सैंपल ऐप्लिकेशन में बदलाव करके ये काम करें:

  1. इस कोडलैब के अन्य सभी वर्शन पूरे करें, ताकि इन्हें स्थानीय तौर पर चलाया जा सके या Google Cloud के सर्वरलेस कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय किया जा सके. इसके बारे में ज़्यादा जानने के लिए, repo README देखें.
  2. किसी दूसरी प्रोग्रामिंग भाषा का इस्तेमाल करके, इस ट्यूटोरियल को पूरा करें.
  3. इस ऐप्लिकेशन को अलग-अलग सोर्स या टारगेट भाषाओं के साथ काम करने के लिए बदलें.
  4. इस ऐप्लिकेशन को अपग्रेड करें, ताकि टेक्स्ट का अनुवाद एक से ज़्यादा भाषाओं में किया जा सके. साथ ही, टेंप्लेट फ़ाइल में बदलाव करें, ताकि टारगेट की जा सकने वाली भाषाओं का पुलडाउन मेन्यू उपलब्ध हो.

ज़्यादा जानें

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation और Google ML Kit

Google Cloud के अन्य प्रॉडक्ट/पेज

Python और Flask

लाइसेंस

इस ट्यूटोरियल को Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है. वहीं, रिपॉज़िटरी में मौजूद सोर्स कोड को Apache 2 के तहत लाइसेंस मिला है.