یکپارچه سازی API های یادگیری ماشینی

یکپارچه سازی API های یادگیری ماشینی

درباره این codelab

subjectآخرین به‌روزرسانی: ژوئن ۳۰, ۲۰۲۱
account_circleنویسنده: Torry Yang

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

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

  • Cloud Vision برای درک محتوای یک تصویر
  • تبدیل گفتار به متن ابری برای رونویسی صدا به متن
  • Cloud Translation برای ترجمه یک رشته دلخواه به هر زبان پشتیبانی شده
  • Cloud Natural Language برای استخراج اطلاعات از متن

چیزی که خواهی ساخت

شما خط لوله ای ایجاد خواهید کرد که ضبط صدا را با یک تصویر مقایسه می کند و ارتباط آنها را با یکدیگر تعیین می کند. در اینجا نگاهی اجمالی از نحوه انجام آن وجود دارد:

e6a57e5def315116.jpeg

چیزی که یاد خواهید گرفت

  • نحوه استفاده از Vision، گفتار به متن، ترجمه و APIهای زبان طبیعی
  • کجا می توان نمونه کد را پیدا کرد

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

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در کنسول Cloud فعال کنید.

اجرا از طریق این کد لبه نباید هزینه زیادی داشته باشد. حتماً هر دستورالعملی را در بخش "تمیز کردن" دنبال کنید که به شما توصیه می کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

API ها را فعال کنید

می توانید روی این پیوند کلیک کنید تا همه API های لازم را فعال کنید . پس از انجام این کار، با خیال راحت دستورالعمل‌های تنظیم احراز هویت را نادیده بگیرید. ما این کار را در یک لحظه انجام خواهیم داد. از طرف دیگر، می توانید هر API را به صورت جداگانه فعال کنید. برای انجام این کار، روی نماد منو در سمت چپ بالای صفحه کلیک کنید.

2bfc27ef9ba2ec7d.png

APIs & services را از منوی کشویی انتخاب کنید و روی داشبورد کلیک کنید

a9546a22581facd5.png

روی Enable APIs and services کلیک کنید.

eae7ff043d13a35.png

سپس، "Vision" را در کادر جستجو جستجو کنید. روی Google Cloud Vision API کلیک کنید:

a47893f36372ae2f.png

برای فعال کردن Cloud Vision API روی Enable کلیک کنید:

a24fd082a22030ad.png

چند ثانیه صبر کنید تا فعال شود. پس از فعال شدن این مورد را مشاهده خواهید کرد:

633e58cbde1b74c6.png

همین فرآیند را تکرار کنید تا APIهای Cloud Speech، Cloud Translation و Cloud Natural Language را فعال کنید .

پوسته ابری

Google Cloud Shell یک محیط خط فرمان است که در Cloud اجرا می شود. این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه مورد نیاز شما ( gcloud ، bq ، git و موارد دیگر) بارگذاری شده است و یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد. ما از Cloud Shell برای ایجاد درخواست خود برای APIهای یادگیری ماشین استفاده می کنیم.

برای شروع کار با Cloud Shell، روی "فعال کردن Google Cloud Shell" کلیک کنید. اسکرین شات 08/06/2015 در ساعت 5.30.32 بعد از ظهر.png نماد در گوشه سمت راست بالای نوار هدر

24ef50000ca737a4.png

یک جلسه Cloud Shell در داخل یک فریم جدید در پایین کنسول باز می شود و یک خط فرمان را نمایش می دهد. صبر کنید تا اعلان user@project:~$ ظاهر شود.

اختیاری: ویرایشگر کد

بسته به راحتی شما با خط فرمان، ممکن است بخواهید روی "راه اندازی ویرایشگر کد" کلیک کنید. b885bf07bc1b02e5.png نماد در گوشه سمت راست بالای نوار Cloud Shell

de00be9278baf7b8.png

حساب خدمات

برای احراز هویت به یک حساب کاربری نیاز دارید. برای ایجاد یکی، نام [NAME] را با نام دلخواه حساب سرویس جایگزین کنید و دستور زیر را در Cloud Shell اجرا کنید:

gcloud iam service-accounts create [NAME]

اکنون برای استفاده از آن حساب سرویس باید یک کلید ایجاد کنید. [FILE_NAME] را با نام کلید دلخواه، [NAME] را با نام حساب سرویس از بالا و [PROJECT_ID] را با شناسه پروژه خود جایگزین کنید. دستور زیر کلید را با نام [FILE_NAME].json ایجاد و دانلود می کند:

gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com

برای استفاده از حساب سرویس، باید متغیر GOOGLE_APPLICATION_CREDENTIALS را روی مسیر کلید تنظیم کنید. برای انجام این کار، پس از جایگزینی [PATH_TO_FILE] و [FILE_NAME]، دستور زیر را اجرا کنید:

export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_FILE]/[FILE_NAME].json

3. Cloud Vision

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

برای Cloud Vision به کلاینت پایتون نیاز دارید. برای نصب، موارد زیر را در پوسته ابری تایپ کنید:

pip install --upgrade google-cloud-vision --user

بیایید آن را امتحان کنیم

بیایید نگاهی به نمونه کدهای Cloud Vision API بیندازیم. ما علاقه مندیم که بفهمیم در یک تصویر مشخص شده چه چیزی وجود دارد. به نظر می رسد detect.py برای این کار مفید باشد، پس بیایید آن را بگیریم. یک راه این است که محتویات detect.py را کپی کنید، یک فایل جدید در Cloud Shell به نام vision.py کنید و همه کدها را در vision.py قرار دهید. می توانید این کار را به صورت دستی در ویرایشگر کد Cloud Shell انجام دهید یا می توانید این دستور curl را در Cloud Shell اجرا کنید:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/vision/cloud-client/detect/detect.py -o vision.py

پس از انجام این کار، با اجرای موارد زیر در Cloud Shell از API استفاده کنید:

python vision.py labels-uri gs://cloud-samples-data/ml-api-codelab/birds.jpg

شما باید خروجی مربوط به پرندگان و شترمرغ ها را ببینید، همانطور که این تصویر تجزیه و تحلیل شده بود: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/birds.jpg

چه خبر است؟

شما 2 آرگومان را به vision.py :

  • labels-uri تابع detect_labels_uri() را برای اجرا انتخاب می کند
  • gs://cloud-samples-data/ml-api-codelab/birds.jpg محل یک تصویر در Google Cloud Storage است و به عنوان uri به detect_labels_uri()

بیایید نگاهی دقیق تر به detect_labels_uri() . به نظرات اضافی درج شده توجه کنید.

def detect_labels_uri(uri):
   
"""Detects labels in the file located in Google Cloud Storage or on the
    Web."""

   
# relevant import from above
   
# from google.cloud import vision

   
# create ImageAnnotatorClient object
    client
= vision.ImageAnnotatorClient()

   
# create Image object
    image
= vision.types.Image()

   
# specify location of image
    image
.source.image_uri = uri

   
# get label_detection response by passing image to client
    response
= client.label_detection(image=image)

   
# get label_annotations portion of response
    labels
= response.label_annotations
   
print('Labels:')

   
for label in labels:
       
# print the label descriptions
       
print(label.description)

4. گفتار به متن ابری

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

برای تبدیل گفتار به متن به کلاینت پایتون نیاز دارید. برای نصب، موارد زیر را در پوسته ابری تایپ کنید:

sudo pip install --upgrade google-cloud-speech

بیایید آن را امتحان کنیم

بیایید به سراغ نمونه کدهای Cloud Speech to Text برویم. ما علاقه مند به رونویسی صدای گفتار هستیم. به نظر می رسد transcribe.py مکان خوبی برای شروع باشد، بنابراین بیایید از آن استفاده کنیم. محتویات transcribe.py را کپی کنید، یک فایل جدید در Cloud Shell به نام speech2text.py کنید و تمام کدها را در speech2text.py قرار دهید. می توانید این کار را به صورت دستی در ویرایشگر کد Cloud Shell انجام دهید یا می توانید این دستور curl را در Cloud Shell اجرا کنید:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/speech/cloud-client/transcribe.py -o speech2text.py

پس از انجام این کار، با اجرای موارد زیر در Cloud Shell از API استفاده کنید:

python speech2text.py gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav

در مورد کدگذاری اشتباه و نرخ نمونه هرتز باید خطاهایی وجود داشته باشد. نگران نباشید، به transcribe_gcs() در کد بروید و تنظیمات encoding و sampe_hertz_rate از RecognitionConfig() حذف کنید. در حالی که در آن هستید، کد زبان را به "tr-TR" تغییر دهید زیرا tr-ostrich.wav یک ضبط سخنرانی به زبان ترکی است.

config = types.RecognitionConfig(language_code='tr-TR')

اکنون، speech2text.py را دوباره اجرا کنید. خروجی باید مقداری متن ترکی باشد زیرا این فایل صوتی تجزیه و تحلیل شد: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/tr-ostrich.wav

چه خبر است؟

شما gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav ، مکان یک فایل صوتی در Google Cloud Storage را به speech2text.py ، که سپس به عنوان gcs_uri به transscribe_uri transcribe_uri()

بیایید نگاهی دقیق تر به transcribe_uri() اصلاح شده خود بیندازیم.

def transcribe_gcs(gcs_uri):
   
"""Transcribes the audio file specified by the gcs_uri."""

   
from google.cloud import speech
   
# enums no longer used
   
# from google.cloud.speech import enums
   
from google.cloud.speech import types

   
# create ImageAnnotatorClient object
    client
= speech.SpeechClient()

   
# specify location of speech
    audio
= types.RecognitionAudio(uri=gcs_uri)

   
# set language to Turkish
   
# removed encoding and sample_rate_hertz
    config
= types.RecognitionConfig(language_code='tr-TR')

   
# get response by passing config and audio settings to client
    response
= client.recognize(config, audio)

   
# Each result is for a consecutive portion of the audio. Iterate through
   
# them to get the transcripts for the entire audio file.
   
for result in response.results:
       
# The first alternative is the most likely one for this portion.
       
# get the transcript of the first alternative
       
print(u'Transcript: {}'.format(result.alternatives[0].transcript))

5. ترجمه ابری

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

برای ترجمه ابری به کلاینت پایتون نیاز دارید. برای نصب، موارد زیر را در Cloud Shell تایپ کنید:

sudo pip install --upgrade google-cloud-translate

بیایید آن را امتحان کنیم

اکنون بیایید نمونه کدهای Cloud Translation را بررسی کنیم. برای هدف این نرم افزار کد، می خواهیم متن را به انگلیسی ترجمه کنیم. snippets.py شبیه چیزی است که ما می خواهیم. محتویات snippets.py را کپی کنید، یک فایل جدید در Cloud Shell به نام translate.py ایجاد کنید و همه کدها را در translate.py قرار دهید. می توانید این کار را به صورت دستی در ویرایشگر کد Cloud Shell انجام دهید یا می توانید این دستور curl را در Cloud Shell اجرا کنید:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/translate/cloud-client/snippets.py -o translate.py

پس از انجام این کار، با اجرای موارد زیر در Cloud Shell از API استفاده کنید:

python translate.py translate-text en '你有沒有帶外套'

ترجمه باید "آیا ژاکت داری؟" باشد.

چه خبر است؟

شما 3 آرگومان را به translate.py ارسال کردید:

  • translate-text تابع translate_text() را برای اجرا انتخاب می کند
  • en به عنوان target به translate_text() ارسال می شود و برای تعیین زبانی که باید به آن ترجمه شود خدمت می کند
  • '你有沒有帶外套' رشته ای است که باید ترجمه شود و به عنوان متن به translate_text() ارسال می شود.

بیایید نگاهی دقیق تر به translate_text() بیندازیم. به نظرات اضافه شده توجه کنید.

def translate_text(target, text):
   
"""Translates text into the target language.

    Target must be an ISO 639-1 language code.
    See https://g.co/cloud/translate/v2/translate-reference#supported_languages
    """

   
# relevant imports from above
   
# from google.cloud import translate
   
# import six

   
# create Client object
    translate_client
= translate.Client()

   
# decode text if it's a binary type
   
# six is a python 2 and 3 compatibility library
   
if isinstance(text, six.binary_type):
        text
= text.decode('utf-8')

   
# get translation result by passing text and target language to client
   
# Text can also be a sequence of strings, in which case this method
   
# will return a sequence of results for each text.
    result
= translate_client.translate(text, target_language=target)

   
# print original text, translated text and detected original language
   
print(u'Text: {}'.format(result['input']))
   
print(u'Translation: {}'.format(result['translatedText']))
   
print(u'Detected source language: {}'.format(
        result
['detectedSourceLanguage']))

6. زبان طبیعی ابری

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

برای زبان طبیعی Cloud به کلاینت پایتون نیاز دارید. برای نصب، موارد زیر را در پوسته ابری تایپ کنید:

sudo pip install --upgrade google-cloud-language

بیایید آن را امتحان کنیم

در نهایت، بیایید به نمونه کدهای Cloud Natural Language API نگاه کنیم. ما می خواهیم موجودیت ها را در متن شناسایی کنیم. به نظر می رسد snippets.py حاوی کدهایی است که این کار را انجام می دهد. محتویات snippets.py را کپی کنید، یک فایل جدید در Cloud Shell به نام natural_language.py کنید و تمام کدها را در natural_language.py قرار دهید. می توانید این کار را به صورت دستی در ویرایشگر کد Cloud Shell انجام دهید یا می توانید این دستور curl را در Cloud Shell اجرا کنید:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/language/cloud-client/v1/snippets.py -o natural_language.py

پس از انجام این کار، با اجرای موارد زیر در Cloud Shell از API استفاده کنید:

python natural_language.py entities-text 'where did you leave my bike'

API باید «دوچرخه» را به عنوان یک موجودیت شناسایی کند. موجودیت ها می توانند اسم های مناسب (شخصیت های عمومی، مکان های دیدنی و غیره) یا اسم های رایج (رستوران، استادیوم و غیره) باشند.

چه خبر است؟

شما 2 آرگومان را به natural_language.py :

  • entities-text تابع entities_text() را برای اجرا انتخاب می کند
  • "whered you left my bike" رشته‌ای است که برای موجودیت‌ها تجزیه و تحلیل می‌شود و به عنوان متن به entities_text() منتقل می‌شود.

بیایید نگاهی دقیق‌تر به entities_text() بیندازیم. به نظرات جدیدی که درج شده توجه کنید.

def entities_text(text):
   
"""Detects entities in the text."""
   
# relevant imports from above
   
# from google.cloud import language
   
# from google.cloud.language import enums
   
# from google.cloud.language import types
   
# import six

   
# create LanguageServiceClient object
    client
= language.LanguageServiceClient()

   
# decode text if it's a binary type
   
# six is a python 2 and 3 compatibility library
   
if isinstance(text, six.binary_type):
        text
= text.decode('utf-8')

   
# Instantiates a plain text document.
    document
= types.Document(
        content
=text,
        type
=enums.Document.Type.PLAIN_TEXT)

   
# Detects entities in the document. You can also analyze HTML with:
   
#   document.type == enums.Document.Type.HTML
    entities
= client.analyze_entities(document).entities

   
# entity types from enums.Entity.Type
    entity_type
= ('UNKNOWN', 'PERSON', 'LOCATION', 'ORGANIZATION',
                   
'EVENT', 'WORK_OF_ART', 'CONSUMER_GOOD', 'OTHER')

   
# print information for each entity found
   
for entity in entities:
       
print('=' * 20)
       
print(u'{:<16}: {}'.format('name', entity.name))
       
print(u'{:<16}: {}'.format('type', entity_type[entity.type]))
       
print(u'{:<16}: {}'.format('metadata', entity.metadata))
       
print(u'{:<16}: {}'.format('salience', entity.salience))
       
print(u'{:<16}: {}'.format('wikipedia_url',
              entity
.metadata.get('wikipedia_url', '-')))

7. بیایید آنها را ادغام کنیم

بیایید به خود یادآوری کنیم که چه چیزی می سازید.

e6a57e5def315116.jpeg

حالا بیایید همه چیز را کنار هم بگذاریم. یک فایل solution.py ایجاد کنید. detect_labels_uri() , transcribe_gcs() , translate_text() و entities_text() را از مراحل قبلی در solution.py جایگذاری کنید.

بیانیه های وارداتی

برداشتن نظر و انتقال عبارات واردات به بالا. توجه داشته باشید که هم speech.types و هم language.types وارد می شوند. این باعث ایجاد تضاد می شود، بنابراین اجازه دهید آنها را حذف کنیم و هر رخداد جداگانه از types در transcribe_gcs() و entities_text() را به ترتیب به speech.types و language.types تغییر دهیم. شما باید با:

from google.cloud import vision
from google.cloud import speech
from google.cloud import translate
from google.cloud import language
from google.cloud.language import enums
import six

نتایج را برگردانید

به جای چاپ، از توابع بخواهید نتایج را برگردانند. شما باید چیزی شبیه به این داشته باشید:

# import statements

def detect_labels_uri(uri):
   
# code

   
# we only need the label descriptions
    label_descriptions
= []
   
for label in labels:
        label_descriptions
.append(label.description)

   
return label_descriptions

def transcribe_gcs(gcs_uri):
   
# code

   
# naive assumption that audio file is short
   
return response.results[0].alternatives[0].transcript

def translate_text(target, text):
   
# code

   
# only interested in translated text
   
return result['translatedText']

def entities_text(text):
   
# code

   
# we only need the entity names
    entity_names
= []
   
for entity in entities:
        entity_names
.append(entity.name)

   
return entity_names

از توابع استفاده کنید

بعد از این همه کار سخت، می توانید آن توابع را فراخوانی کنید. برو جلو، انجامش بده! در اینجا یک مثال است:

def compare_audio_to_image(audio, image):
   
"""Checks whether a speech audio is relevant to an image."""

   
# speech audio -> text
    transcription
= transcribe_gcs(audio)

   
# text of any language -> english text
    translation
= translate_text('en', transcription)

   
# text -> entities
    entities
= entities_text(translation)

   
# image -> labels
    labels
= detect_labels_uri(image)

   
# naive check for whether entities intersect with labels
    has_match
= False
   
for entity in entities:
       
if entity in labels:
           
# print result for each match
           
print('The audio and image both contain: {}'.format(entity))
            has_match
= True

   
# print if there are no matches
   
if not has_match:
       
print('The audio and image do not appear to be related.')

پشتیبانی از چندین زبان

ما قبلاً ترکی را به transcribe_gcs() کدگذاری کردیم. اجازه دهید آن را تغییر دهیم تا زبان از compare_audio_to_image() مشخص شود. در اینجا تغییرات مورد نیاز است:

def transcribe_gcs(language, gcs_uri):
   
...
    config
= speech.types.RecognitionConfig(language_code=language)
def compare_audio_to_image(language, audio, image):
    transcription
= transcribe_gcs(language, audio)

آن را امتحان کنید

کد نهایی را می توان در solution.py این مخزن GitHub یافت. در اینجا یک دستور curl برای گرفتن آن وجود دارد:

curl https://raw.githubusercontent.com/googlecodelabs/integrating-ml-apis/master/solution.py -O

نسخه موجود در GitHub حاوی argparse است که موارد زیر را از خط فرمان اجازه می دهد:

python solution.py tr-TR gs://cloud-samples-data/ml-api-codelab/tr-ball.wav gs://cloud-samples-data/ml-api-codelab/football.jpg

برای هر مورد یافت شده، کد باید خروجی "صوت و تصویر هر دو حاوی: " باشند. در مثال بالا، "صوت و تصویر هر دو حاوی: توپ هستند" خواهد بود.

امتیاز: بیشتر تلاش کنید

در اینجا مکان های فایل های صوتی و تصویری بیشتری برای امتحان وجود دارد.

8. تبریک می گویم!

شما چهار API یادگیری ماشینی را کاوش و ادغام کرده‌اید تا مشخص کنید که آیا نمونه گفتاری درباره تصویر ارائه‌شده صحبت می‌کند یا خیر. این تازه شروع است زیرا راه های بسیار بیشتری برای بهبود این خط لوله وجود دارد!

آنچه را پوشش داده ایم

  • درخواست به Cloud Vision API
  • درخواست به Cloud Speech-to-Text API
  • درخواست به Cloud Translation API
  • درخواست برای Cloud Natural Language API
  • استفاده از همه APIهای بالا با هم

مراحل بعدی