ปรับใช้ Google แปลภาษาพื้นฐาน" แอปใน Python 2 App Engine

1. ภาพรวม

ชุดโค้ดแล็บ (บทแนะนำแบบฝึกหัดด้วยตนเอง) นี้มีจุดประสงค์เพื่อช่วยให้นักพัฒนาซอฟต์แวร์เข้าใจตัวเลือกต่างๆ ที่มีอยู่เมื่อนำแอปพลิเคชันของตนไปใช้งาน ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีใช้ Google Cloud Translation API กับ Python และเรียกใช้แบบในเครื่องหรือทำให้ใช้งานได้บนแพลตฟอร์มการประมวลผลแบบเซิร์ฟเวอร์เสิร์ฟของ Cloud (App Engine, Cloud Functions หรือ Cloud Run) แอปตัวอย่างที่อยู่ในที่เก็บของบทแนะนํานี้สามารถทําให้การเผยแพร่ใช้งานได้ (อย่างน้อย) 8 วิธีที่แตกต่างกันด้วยการเปลี่ยนแปลงการกําหนดค่าเพียงเล็กน้อย ดังนี้

  1. เซิร์ฟเวอร์ Flask ในพื้นที่ (Python 2)
  2. เซิร์ฟเวอร์ Flask ในพื้นที่ (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. Cloud Functions (Python 3)
  6. Cloud Run (Python 2 ผ่าน Docker)
  7. Cloud Run (Python 3 ผ่าน Docker)
  8. Cloud Run (Python 3 ผ่าน Cloud Buildpack)

โค้ดแล็บนี้จะเน้นที่การนำแอปนี้ไปใช้กับแพลตฟอร์มที่ตัวหนาด้านบน

คุณจะได้เรียนรู้วิธี

สิ่งที่ต้องมี

แบบสํารวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านและทำแบบฝึกหัด อ่านอย่างเดียว

คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าไร

ผู้ฝึกหัด ระดับกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้งานบริการ Google Cloud เท่าใด

ผู้ฝึกหัด ระดับกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกําหนด

การตั้งค่าสภาพแวดล้อมด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งมักจะระบุเป็น PROJECT_ID) ดังนั้นหากไม่ชอบรหัสที่สร้างไว้ ให้สร้างรหัสอื่นแบบสุ่ม หรือจะลองสร้างรหัสของคุณเองและดูว่ารหัสนั้นใช้งานได้หรือไม่ก็ได้ จากนั้นระบบจะ "หยุด" โปรเจ็กต์ไว้หลังจากสร้างโปรเจ็กต์แล้ว
  • ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้ไม่น่าจะเสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ ให้ทําตามวิธีการ "ล้างข้อมูล" ที่แสดงอยู่ท้าย Codelab ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

3. เปิดใช้ Translation API

สําหรับแอปตัวอย่าง คุณจะเปิดใช้ Cloud Translation API และบริการ App Engine แทนโดยใช้วิธีการที่คล้ายกันซึ่งระบุไว้ด้านล่าง

การเปิดใช้ Cloud API

บทนำ

ไม่ว่าคุณจะต้องการใช้ Google API ใดก็ตามในแอปพลิเคชัน คุณต้องเปิดใช้ API นั้น ตัวอย่างต่อไปนี้แสดง 2 วิธีในการเปิดใช้ Cloud Vision API หลังจากดูวิธีเปิดใช้ Cloud API รายการหนึ่งแล้ว คุณจะเปิดใช้ API อื่นๆ ได้เนื่องจากกระบวนการคล้ายกัน

ตัวเลือกที่ 1: จาก Cloud Shell หรืออินเทอร์เฟซบรรทัดคำสั่ง

แม้ว่าการเปิดใช้ API จากคอนโซลระบบคลาวด์จะเป็นวิธีที่พบบ่อยกว่า แต่นักพัฒนาแอปบางรายก็ชอบทำทุกอย่างจากบรรทัดคำสั่ง โดยต้องค้นหา "ชื่อบริการ" ของ 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 Console

นอกจากนี้ คุณยังเปิดใช้ Vision API ในเครื่องมือจัดการ API ได้ด้วย จาก Cloud Console ให้ไปที่เครื่องมือจัดการ API แล้วเลือกคลัง

fb0f1d315f122d4a.png

หากต้องการเปิดใช้ Cloud Vision API ให้เริ่มป้อน "vision" ในแถบค้นหา แล้วรายการที่ตรงกับสิ่งที่คุณป้อนจนถึงตอนนี้จะปรากฏขึ้น

2275786a24f8f204.png

เลือก API ที่ต้องการเปิดใช้ แล้วคลิกเปิดใช้

2556f923b628e31.png

ค่าใช้จ่าย

แม้ว่า Google API หลายรายการจะใช้ได้โดยไม่เสียค่าธรรมเนียม แต่การใช้ผลิตภัณฑ์และ API ของ Google Cloud นั้นไม่ฟรี เมื่อเปิดใช้ Cloud API ระบบอาจขอบัญชีการเรียกเก็บเงินที่ใช้งานอยู่ อย่างไรก็ตาม โปรดทราบว่าผลิตภัณฑ์ Google Cloud บางรายการมีระดับ "ฟรีตลอด" (รายวัน/รายเดือน) ซึ่งคุณต้องใช้งานเกินเกณฑ์จึงจะมีค่าใช้จ่ายในการเรียกเก็บเงิน มิเช่นนั้นระบบจะไม่เรียกเก็บเงินจากบัตรเครดิต (หรือเครื่องมือการเรียกเก็บเงินที่ระบุ)

ผู้ใช้ควรดูข้อมูลราคาของ API ก่อนที่จะเปิดใช้ โดยเฉพาะอย่างยิ่งต้องดูว่า API มีระดับแบบไม่มีค่าใช้จ่ายหรือไม่ และระดับแบบไม่มีค่าใช้จ่ายเป็นอย่างไร หากเปิดใช้ Cloud Vision API คุณจะต้องดูหน้าข้อมูลราคาของ API ดังกล่าว Cloud Vision มีโควต้าแบบไม่มีค่าใช้จ่าย และตราบใดที่คุณใช้ไม่เกินขีดจำกัดโดยรวม (ในแต่ละเดือน) ก็ไม่ควรจะมีการเรียกเก็บเงิน

ราคาและระดับที่ไม่มีค่าใช้จ่ายจะแตกต่างกันไปในแต่ละ Google API ตัวอย่าง

  • Google Cloud/GCP — ผลิตภัณฑ์แต่ละรายการมีการเรียกเก็บเงินแตกต่างกันและโดยทั่วไปจะชำระตามรอบ vCPU, ผู้บริโภคพื้นที่เก็บข้อมูล, การใช้หน่วยความจำ หรือแบบชําระต่อการใช้งาน ดูข้อมูลระดับไม่มีค่าใช้จ่ายด้านบน
  • Google Maps - มีชุด API และมอบเครดิต $200USD ฟรีต่อเดือนโดยรวมให้แก่ผู้ใช้
  • API ของ Google Workspace (เดิมคือ G Suite) — ให้การใช้งานฟรี (สูงสุดตามขีดจํากัดที่กำหนด) ซึ่งรวมอยู่ในค่าสมัครใช้บริการ Workspace รายเดือน จึงไม่มีการเรียกเก็บเงินโดยตรงสําหรับการใช้ Gmail, Google ไดรฟ์, ปฏิทิน, เอกสาร, ชีต และสไลด์ API

ผลิตภัณฑ์ต่างๆ ของ Google มีการเรียกเก็บเงินแตกต่างกัน ดังนั้นโปรดดูข้อมูลดังกล่าวในเอกสารประกอบของ API

สรุป

เมื่อทราบวิธีเปิดใช้ Google API โดยทั่วไปแล้ว โปรดไปที่ API Manager และเปิดใช้ทั้ง Cloud Translation API และบริการ App Engine (หากยังไม่ได้ดำเนินการ) โดยเปิดใช้ API แรกเนื่องจากแอปพลิเคชันของเราจะใช้ API ดังกล่าว และเปิดใช้บริการ App Engine เนื่องจากคุณกำลังติดตั้งใช้งานแอป App Engine หากต้องการดำเนินการจากบรรทัดคำสั่ง ให้ใช้คำสั่งนี้แทน

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

แม้ว่าโควต้ารายเดือนของฟีเจอร์นี้จะไม่แสดงอยู่ในหน้าสรุประดับ "ฟรีตลอด" โดยรวม แต่หน้าราคาของ Translation API ระบุว่าผู้ใช้ทุกคนจะได้รับจำนวนอักขระที่แปลแล้วคงที่ทุกเดือน คุณไม่ควรถูกเรียกเก็บเงินจาก API หากการใช้งานอยู่ต่ำกว่าเกณฑ์ดังกล่าว หากมีการเรียกเก็บเงินอื่นๆ ที่เกี่ยวข้องกับ Google Cloud เราจะพูดถึงเรื่องนี้ในตอนท้ายในส่วน "ล้างข้อมูล"

4. รับโค้ดแอปตัวอย่าง

โคลนโค้ดในที่เก็บในเครื่องหรือใน Cloud Shell (โดยใช้คำสั่ง git clone) หรือดาวน์โหลดไฟล์ ZIP จากปุ่มโค้ดสีเขียวตามที่แสดงในภาพหน้าจอต่อไปนี้

5cd6110c4414cf65.png

เมื่อเตรียมทุกอย่างแล้ว ให้สร้างสำเนาโฟลเดอร์ทั้งหมดเพื่อทำตามบทแนะนำนี้ เนื่องจากมีแนวโน้มว่าจะต้องลบหรือเปลี่ยนแปลงไฟล์ หากต้องการทำให้เป็นแบบอื่น คุณสามารถเริ่มใหม่ได้โดยคัดลอกต้นฉบับเพื่อไม่ต้องโคลนหรือดาวน์โหลดอีกครั้ง

5. ทัวร์ชมแอปตัวอย่าง

แอปตัวอย่างเป็นแอปที่ดัดแปลงจาก Google แปลภาษาอย่างง่าย ซึ่งจะแจ้งให้ผู้ใช้ป้อนข้อความเป็นภาษาอังกฤษและรับการแปลข้อความนั้นเทียบเท่าเป็นภาษาสเปน ตอนนี้เปิดไฟล์ 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 และภาษาต้นทางและภาษาเป้าหมาย ในกรณีนี้ จะเป็นภาษาอังกฤษ (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. ตรวจสอบว่าคําขอมาจาก Cloud Functions โดยใช้ตัวแปร 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. ติดตั้งแพ็กเกจ/ทรัพยากร Dependency ในเครื่อง (ลงใน lib)

ดังที่ได้กล่าวไว้ก่อนหน้านี้ แอปตัวอย่างใช้เฟรมเวิร์กเว็บขนาดเล็ก Flask และไลบรารีของไคลเอ็นต์ Google Cloud Translation API สําหรับ Python ติดตั้งและอัปเดต 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. ติดตั้งใช้งานบริการ

หากต้องการทำให้บริการแปลภาษาใช้งานได้ใน App Engine ที่ใช้ Python 2 ให้เรียกใช้คําสั่งนี้

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

8. บทสรุป

ยินดีด้วย คุณได้เรียนรู้วิธีเปิดใช้ Cloud Translation API, รับข้อมูลเข้าสู่ระบบที่จําเป็น และทําให้เว็บแอปง่ายๆ ใช้งานได้กับ App Engine เวอร์ชัน Python 2 แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับการทําให้การเผยแพร่นี้ใช้งานได้ได้จากตารางนี้ในรีโป

ล้างข้อมูล

Cloud Translation API ช่วยให้คุณแปลอักขระที่แปลแล้วในจำนวนคงที่ต่อเดือนได้ฟรี App Engine ยังมีโควต้าแบบไม่มีค่าใช้จ่ายด้วย เช่นเดียวกับ Cloud Functions และ Cloud Run ระบบจะเรียกเก็บเงินจากคุณหากมีการใช้งานเกินขีดจำกัดดังกล่าว หากวางแผนที่จะไปยังโค้ดแล็บถัดไป คุณไม่จำเป็นต้องปิดแอป

อย่างไรก็ตาม หากคุณยังไม่พร้อมที่จะดูบทแนะนำถัดไปหรือกังวลว่าอินเทอร์เน็ตจะค้นพบแอปที่คุณเพิ่งทำให้ใช้งานได้ ให้ปิดใช้แอป App Engine, ลบ Cloud Function หรือปิดใช้บริการ Cloud Run เพื่อหลีกเลี่ยงการเรียกเก็บเงิน เมื่อพร้อมที่จะไปยังโค้ดแล็บถัดไป คุณจะเปิดใช้โค้ดแล็บอีกครั้งได้ ในทางกลับกัน หากคุณจะไม่ใช้แอปพลิเคชันนี้หรือโค้ดแล็บอื่นๆ ต่อและต้องการลบทุกอย่างออกอย่างสมบูรณ์ คุณสามารถปิดโปรเจ็กต์ได้

นอกจากนี้ การใช้งานแพลตฟอร์มการประมวลผลแบบ Serverless ของ Google Cloud จะมีค่าใช้จ่ายเล็กน้อยในการสร้างและพื้นที่เก็บข้อมูล Cloud Build มีโควต้าแบบไม่มีค่าใช้จ่ายเป็นของตัวเองเช่นเดียวกับ Cloud Storage Cloud Build จะสร้างอิมเมจแอปพลิเคชันของคุณเพื่อเพิ่มความโปร่งใส จากนั้นจะจัดเก็บไว้ใน Cloud Container Registry หรือ Artifact Registry ซึ่งเป็นผลิตภัณฑ์ที่รับช่วงมา พื้นที่เก็บข้อมูลของรูปภาพนั้นจะใช้โควต้าบางส่วนเช่นเดียวกับการส่งออกของเครือข่ายเมื่อโอนรูปภาพนั้นไปยังบริการ อย่างไรก็ตาม คุณอาจอาศัยอยู่ในภูมิภาคที่ไม่มีระดับการใช้งานฟรีดังกล่าว ดังนั้นโปรดคำนึงถึงการใช้พื้นที่เก็บข้อมูลเพื่อลดค่าใช้จ่ายที่อาจเกิดขึ้น

9. แหล่งข้อมูลเพิ่มเติม

ในส่วนต่อไปนี้ คุณจะเห็นเนื้อหาการอ่านเพิ่มเติม รวมถึงแบบฝึกหัดที่แนะนําเพื่อเสริมความรู้ที่ได้รับจากการทำบทแนะนำนี้จนเสร็จสมบูรณ์

การศึกษาเพิ่มเติม

ตอนนี้คุณมีประสบการณ์เกี่ยวกับ Translation API บ้างแล้ว มาลองทำแบบฝึกหัดเพิ่มเติมเพื่อพัฒนาทักษะของคุณกัน หากต้องการดูเส้นทางการเรียนรู้ต่อ ให้แก้ไขแอปตัวอย่างเพื่อทำสิ่งต่อไปนี้

  1. ทำตามโค้ดแล็บรุ่นอื่นๆ ทั้งหมดของโค้ดแล็บนี้เพื่อเรียกใช้แบบในเครื่องหรือเพื่อนำไปใช้งานในแพลตฟอร์มการประมวลผลแบบเซิร์ฟเวอร์เลสของ Google Cloud (ดู repo README)
  2. ทําตามบทแนะนํานี้โดยใช้ภาษาโปรแกรมอื่น
  3. เปลี่ยนแอปพลิเคชันนี้ให้รองรับภาษาต้นฉบับหรือภาษาเป้าหมายอื่น
  4. อัปเกรดแอปพลิเคชันนี้เพื่อให้แปลข้อความเป็นภาษาได้มากกว่า 1 ภาษา โดยเปลี่ยนไฟล์เทมเพลตให้มีเมนูแบบเลื่อนลงของภาษาเป้าหมายที่รองรับ

ดูข้อมูลเพิ่มเติม

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 Attribution License) 2.0 ทั่วไป ส่วนซอร์สโค้ดในรีโปได้รับอนุญาตภายใต้ Apache 2