لمحة عن هذا الدرس التطبيقي حول الترميز
1. نظرة عامة
يتيح لك هذا الدرس التطبيقي حول الترميز شرحًا سريعًا لبعض واجهات برمجة التطبيقات لتعلُّم الآلة. ستستخدم:
- Cloud Vision لفهم محتوى صورة معيّنة
- تحويل الكلام إلى نص في Cloud لتحويل الصوت إلى نص
- Cloud Translation لترجمة سلسلة عشوائية إلى أي لغة معتمَدة
- اللغة الطبيعية في السحابة الإلكترونية لاستخراج المعلومات من النص.
العناصر التي سيتم إنشاؤها
يمكنك إنشاء مسار يقارن تسجيل صوتي بصورة ويحدّد مدى صلتها ببعضها. إليك لمحة سريعة عن كيفية تحقيق ذلك:
ما ستتعرَّف عليه
- كيفية استخدام الرؤية وتحويل الكلام إلى نص والترجمة ولغة اللغة الطبيعية
- أماكن العثور على عينات للرموز
الأشياء التي تحتاج إليها
2. الإعداد والمتطلّبات
إعداد البيئة الذاتية
- سجِّل الدخول إلى Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID
.
- بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.
من المفترض ألا يكلفك إجراء هذا الدرس التطبيقي الكثير، إن اقتضى الأمر. احرص على اتّباع أي تعليمات في قسم "التنظيف والتنظيف"، والذي يقدِّم لك نصائح حول كيفية إيقاف الموارد حتى لا تتحمل أي نفقات خارج نطاق هذا البرنامج التعليمي. إنّ المستخدمين الجدد في Google Cloud مؤهلون للاستفادة من برنامج الفترة التجريبية المجانية التي تبلغ 300 دولار أمريكي.
تفعيل واجهات برمجة التطبيقات
يمكنك النقر على هذا الرابط لتفعيل جميع واجهات برمجة التطبيقات اللازمة. بعد ذلك، لا تتردد في تجاهل إرشادات إعداد المصادقة، وسنفعل ذلك بعد قليل. بدلاً من ذلك، يمكنك تفعيل كل واجهة برمجة تطبيقات على حدة. ولإجراء ذلك، انقر على رمز القائمة أعلى يمين الشاشة.
اختَر واجهات برمجة التطبيقات والخدمات من القائمة المنسدلة وانقر على "لوحة البيانات".
انقر على تفعيل واجهات برمجة التطبيقات والخدمات.
بعد ذلك، ابحث عن "vision" في مربع البحث. انقر على Google Cloud Vision API:
انقر على تفعيل لتفعيل Cloud Identity Vision API:
انتظر لبضع ثوانٍ حتى يتم تفعيله. سترى ذلك بعد أن يتم تفعيلها:
كرِّر العملية نفسها لتفعيل Cloud Speech وCloud Translation وCloud Natural Language APIs.
Cloud Shell
Google Cloud Shell هو بيئة سطر أوامر تعمل في السحابة الإلكترونية. يتمّ تحميل هذا الجهاز الافتراضي الذي يعتمد على Debian إلى جميع أدوات التطوير التي ستحتاجها (gcloud
وbq
وgit
وغيرها) وتوفّر دليلاً رئيسيًا دائمًا بحجم 5 غيغابايت. سنستخدم Cloud Shell لإنشاء طلبنا لواجهات برمجة تطبيقات تعلُّم الآلة.
لبدء استخدام 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
برنامج Python
ستحتاج إلى برنامج Python لبرنامج Cloud Vision. لتثبيت الإضافة، اكتب ما يلي في السحابة الإلكترونية:
pip install --upgrade google-cloud-vision --user
لنجرّب ذلك
لنلقِ نظرة على نماذج التعليمات البرمجية لواجهة برمجة التطبيقات في Cloud Vision. نحن مهتمون بالتعرّف على ما هو موجود في صورة معينة. يبدو أن detect.py
مفيد في ذلك، لذلك دعنا نراجع ذلك. والطريقة الأولى هي نسخ محتوى search.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:
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
ما الأمر؟
لقد أدخلت وسيطتين إلى 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. تحويل الكلام إلى نص في السحابة الإلكترونية
برنامج Python
ستحتاج إلى برنامج Python لـ Cloud Speech-to-Text. لتثبيت الإضافة، اكتب ما يلي في السحابة الإلكترونية:
sudo pip install --upgrade google-cloud-speech
لنجرّب ذلك
لنبدأ بالاطّلاع على عيّنات التعليمات البرمجية لاستخدام ميزة "تحويل الكلام إلى نص" في السحابة الإلكترونية. نحن مهتمون بكتابة الصوت في الكلام. يبدو أن transcribe.py
مكانًا جيدًا للبدء، فلنستخدم ذلك. انسخ محتوى trancrib.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:
python speech2text.py gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav
يجب أن تتوفّر أخطاء في تقديم شكوى حول الترميز غير الصحيح وعيّنة Hertz. لا داعي للقلق، يمكنك الانتقال إلى 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 إلى 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 Translation
برنامج Python
ستحتاج إلى برنامج Python للترجمة في السحابة الإلكترونية. للتثبيت، اكتب ما يلي في Cloud Shell:
sudo pip install --upgrade google-cloud-translate
لنجرّب ذلك
لنتعرّف الآن على عيّنات التعليمات البرمجية لخدمة Cloud Translation. لأغراض هذا الدرس التطبيقي، نريد ترجمة النص إلى اللغة الإنجليزية. يبدو snippets.py
كما نريد. انسخ محتوى المقتطفات.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:
python translate.py translate-text en '你有沒有帶外套'
يجب أن تكون الترجمة &، هل لديك سترة・quot;؟
ماذا يحدث؟
لقد أدخلت 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. لغة السحابة الإلكترونية الطبيعية
برنامج Python
ستحتاج إلى برنامج Python للغة Cloud المعتادة. لتثبيت الإضافة، اكتب ما يلي في السحابة الإلكترونية:
sudo pip install --upgrade google-cloud-language
لنجرّب ذلك
أخيرًا، لنلقِ نظرة على نماذج الرموز لواجهة برمجة تطبيقات اللغات الطبيعية على السحابة الإلكترونية. نريد اكتشاف الكيانات في النص. يبدو أن snippets.py
يحتوي على رمز يُنفِّذ ذلك. انسخ محتوى المقتطفات.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:
python natural_language.py entities-text 'where did you leave my bike'
يجب أن تتعرّف واجهة برمجة التطبيقات على الكيان &&Bike". يجب أن تكون الكيانات اسمًا صحيحًا (شخصيات عامة أو معالم أو غير ذلك) أو أسماء شائعة (مطعم، ملعب، إلخ).
ماذا يحدث؟
لقد أدخلت وسيطتين إلى natural_language.py
:
- يختار entities-text دالة
entities_text()
للتشغيل. - "أين تركت دراجتي'؛ هي السلسلة التي سيتم تحليلها لكيانات ويتم تمريرها كنص إلى
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
بالنسبة إلى كل عنصر يتم العثور عليه، يجب أن يتم استخراج الرمز "&"؛ أي أن الصوت والصورة يحتويان على: &&، على سبيل المثال. في المثال أعلاه، سيحتوي كل من الصوت والصورة على: ball".
مكافأة: تجربة المزيد
إليك المزيد من الملفات الصوتية وملفات Sitemap التي يمكنك تجربتها.
8. تهانينا.
لقد استكشفت وأدمجت أربع واجهات برمجة تطبيقات لتعلم الآلة لتحديد ما إذا كان نموذج كلام يتحدث عن الصورة المقدمة. هذه ليست سوى البداية لأن هناك العديد من الطرق لتحسين هذا المسار.
المواضيع التي تناولناها
- تقديم طلبات إلى Cloud Vision API
- تقديم طلبات إلى Cloud Speech-to-Text API
- تقديم طلبات إلى Cloud Translation API
- تقديم طلبات إلى Cloud Natural Language API
- استخدام كل واجهات برمجة التطبيقات المذكورة أعلاه معًا
الخطوات التالية
- للحصول على مقارنة أفضل بين الكلمات، يمكنك الاطّلاع على word2vec.
- يمكنك الاطّلاع على مزيد من الدروس التطبيقية حول الترميز على واجهة برمجة التطبيقات Vision API وواجهة برمجة تطبيقات تحويل الكلام إلى نص وواجهة برمجة تطبيقات الترجمة وواجهة برمجة التطبيقات للغة الطبيعية.
- جرّب استبدال Cloud Vision بـ الذكاء عبر الفيديو عبر السحابة الإلكترونية
- دمج صوت الكلام مع واجهة برمجة تطبيقات تحويل النص إلى كلام في السحابة الإلكترونية
- تعرَّف على كيفية تحميل العناصر إلى Cloud Storage.