درباره این codelab
1. بررسی اجمالی
این لبه کد به شما یک تور سریع از چند API یادگیری ماشینی می دهد. شما استفاده خواهید کرد:
- Cloud Vision برای درک محتوای یک تصویر
- تبدیل گفتار به متن ابری برای رونویسی صدا به متن
- Cloud Translation برای ترجمه یک رشته دلخواه به هر زبان پشتیبانی شده
- Cloud Natural Language برای استخراج اطلاعات از متن
چیزی که خواهی ساخت
شما خط لوله ای ایجاد خواهید کرد که ضبط صدا را با یک تصویر مقایسه می کند و ارتباط آنها را با یکدیگر تعیین می کند. در اینجا نگاهی اجمالی از نحوه انجام آن وجود دارد:
چیزی که یاد خواهید گرفت
- نحوه استفاده از Vision، گفتار به متن، ترجمه و APIهای زبان طبیعی
- کجا می توان نمونه کد را پیدا کرد
آنچه شما نیاز دارید
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از پروژه موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید.
اجرا از طریق این کد لبه نباید هزینه زیادی داشته باشد. حتماً هر دستورالعملی را در بخش "تمیز کردن" دنبال کنید که به شما توصیه می کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
API ها را فعال کنید
می توانید روی این پیوند کلیک کنید تا همه API های لازم را فعال کنید . پس از انجام این کار، با خیال راحت دستورالعملهای تنظیم احراز هویت را نادیده بگیرید. ما این کار را در یک لحظه انجام خواهیم داد. از طرف دیگر، می توانید هر API را به صورت جداگانه فعال کنید. برای انجام این کار، روی نماد منو در سمت چپ بالای صفحه کلیک کنید.
APIs & services را از منوی کشویی انتخاب کنید و روی داشبورد کلیک کنید
روی Enable APIs and services کلیک کنید.
سپس، "Vision" را در کادر جستجو جستجو کنید. روی Google Cloud Vision API کلیک کنید:
برای فعال کردن Cloud Vision API روی Enable کلیک کنید:
چند ثانیه صبر کنید تا فعال شود. پس از فعال شدن این مورد را مشاهده خواهید کرد:
همین فرآیند را تکرار کنید تا APIهای Cloud Speech، Cloud Translation و Cloud Natural Language را فعال کنید .
پوسته ابری
Google Cloud Shell یک محیط خط فرمان است که در Cloud اجرا می شود. این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه مورد نیاز شما ( gcloud
، bq
، git
و موارد دیگر) بارگذاری شده است و یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد. ما از Cloud Shell برای ایجاد درخواست خود برای APIهای یادگیری ماشین استفاده می کنیم.
برای شروع کار با Cloud Shell، روی "فعال کردن Google Cloud Shell" کلیک کنید. نماد در گوشه سمت راست بالای نوار هدر
یک جلسه Cloud Shell در داخل یک فریم جدید در پایین کنسول باز می شود و یک خط فرمان را نمایش می دهد. صبر کنید تا اعلان user@project:~$ ظاهر شود.
اختیاری: ویرایشگر کد
بسته به راحتی شما با خط فرمان، ممکن است بخواهید روی "راه اندازی ویرایشگر کد" کلیک کنید. نماد در گوشه سمت راست بالای نوار Cloud Shell
حساب خدمات
برای احراز هویت به یک حساب کاربری نیاز دارید. برای ایجاد یکی، نام [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. بیایید آنها را ادغام کنیم
بیایید به خود یادآوری کنیم که چه چیزی می سازید.
حالا بیایید همه چیز را کنار هم بگذاریم. یک فایل 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های بالا با هم
مراحل بعدی
- برای مقایسه بهتر کلمات، نگاهی به word2vec بیندازید
- کد لبه های عمیق تر در Vision API ، Speech-to-Text API ، Translation API و Natural Language API را بررسی کنید.
- سعی کنید Cloud Vision را با هوش Cloud Video جایگزین کنید
- صدای گفتار را با Cloud Text-to-Speech API ترکیب کنید
- با نحوه آپلود اشیاء در فضای ذخیره سازی ابری آشنا شوید