इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. खास जानकारी
यह कोडलैब आपको कुछ मशीन लर्निंग एपीआई के बारे में जानकारी देगा. आप इनका इस्तेमाल कर पाएंगे:
- किसी इमेज के कॉन्टेंट को समझने के लिए Cloud Vision
- लिखाई को ऑडियो में बदलें
- किसी भी भाषा में आर्बिट्रेरी स्ट्रिंग का अनुवाद करने के लिए, Cloud Translate का इस्तेमाल करें
- टेक्स्ट से जानकारी पाने के लिए, Cloud Natural Language
आप क्या बनाते हैं
आप एक ऑडियो रिकॉर्डिंगकी इमेज से तुलना करने वाले एक पाइपलाइन बना सकते हैं. साथ ही, तय कर सकते हैं कि वे एक-दूसरे से कितने काम के हैं. यहां एक नज़र में यह बताया गया है कि आप कैसे #39:
आप इन चीज़ों के बारे में जानेंगे
- दृष्टि, बोली से टेक्स्ट, अनुवाद और प्राकृतिक भाषा API का उपयोग कैसे करें
- कोड सैंपल कहां मिलेंगे
आपको इनकी ज़रूरत होगी
2. सेट अप और ज़रूरी शर्तें
अपनी सुविधा के हिसाब से एनवायरमेंट सेट अप करना
- Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
प्रोजेक्ट आईडी याद रखें, सभी Google क्लाउड प्रोजेक्ट में दिया गया नाम (ऊपर दिया गया नाम पहले ही लिया जा चुका है और यह आपके लिए काम नहीं करेगा!). इसे बाद में इस कोडलैब (कोड बनाना सीखना) में PROJECT_ID
के तौर पर बताया जाएगा.
- इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग को चालू करना होगा.
इस कोडलैब के साथ-साथ कुछ भी करने पर, आपको ज़्यादा खर्च नहीं करना चाहिए. "इसे साफ़ और साफ़ करना" सेक्शन में दिए गए किसी भी निर्देश का पालन ज़रूर करें. इसमें आपको संसाधनों को बंद करने का तरीका बताया गया है, ताकि आपको इस ट्यूटोरियल के अलावा कोई और बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ता, 300 डॉलर को मुफ़्त में आज़माने वाले प्रोग्राम की ज़रूरी शर्तें पूरी करते हों.
एपीआई चालू करना
सभी ज़रूरी एपीआई चालू करने के लिए, आप इस लिंक पर क्लिक कर सकते हैं. ऐसा करने के बाद, बेझिझक पुष्टि करने की सुविधा सेट अप करने के निर्देशों को अनदेखा करें; हम इसे कुछ देर में बदल देंगे. इसके अलावा, आप हर एपीआई को अलग-अलग चालू कर सकते हैं. ऐसा करने के लिए, स्क्रीन के ऊपर बाईं ओर दिए गए मेन्यू आइकॉन पर क्लिक करें.
ड्रॉप-डाउन से API और सेवाएं चुनें और डैशबोर्ड पर क्लिक करें
एपीआई और सेवाओं को चालू करें पर क्लिक करें.
इसके बाद, खोज बॉक्स में &कोटेशन;विज़न&कोटेशन खोजें; Google Cloud Vision एपीआई पर क्लिक करें:
Cloud Vision एपीआई को चालू करने के लिए, चालू करें पर क्लिक करें:
इसे चालू करने के लिए, कुछ सेकंड का इंतज़ार करें. इसे चालू करने के बाद, आपको यह दिखेगा:
Cloud Speech, Cloud Translate और Cloud Natural Language API को चालू करने के लिए भी यही प्रोसेस दोहराएं.
क्लाउड शेल
Google Cloud Shell Cloud में चलने वाला कमांड लाइन एनवायरमेंट है. 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]
अब आपको #39; उस सेवा खाते का इस्तेमाल करने के लिए एक कुंजी जनरेट करनी होगी. [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 विज़न
Python क्लाइंट
आपको क्लाउड विज़न के लिए Python क्लाइंट की ज़रूरत होगी. इंस्टॉल करने के लिए, क्लाउड शेल में इन्हें टाइप करें:
pip install --upgrade google-cloud-vision --user
चलो इसे आज़माएं
# Cloud Vision एपीआई के लिए कोड के नमूनों पर एक नज़र डालें. हम यह बताना चाहते हैं कि किसी खास इमेज में क्या शामिल होता है. detect.py
इस समस्या के हिसाब से सही है, इसलिए हमें इनकी मदद लें. एक तरीका यह है कि detectedpy?py की सामग्री को कॉपी करें, Cloud Shell में एक नई फ़ाइल बनाएं जिसे vision.py
कहते हैं.उसके बाद, पूरे कोड को vision.py
में चिपकाएं. आप Cloud Shell कोड एडिटर में मैन्युअल तरीके से ऐसा कर सकते हैं. आप चाहें, तो 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
को 2 तर्क पास किए:
- labels-uri, चलाने के लिए
detect_labels_uri()
फ़ंक्शन चुनता है - gs://cloud-samples-data/ml-api-codelab/birds.jpg Google Cloud Storage पर मौजूद किसी इमेज की जगह की जानकारी होती है. साथ ही, इसे
detect_labels_uri()
में 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 क्लाइंट
आपको Cloud Speech-Text के लिए Python क्लाइंट की ज़रूरत होगी. इंस्टॉल करने के लिए, क्लाउड शेल में इन्हें टाइप करें:
sudo pip install --upgrade google-cloud-speech
चलो इसे आज़माएं
' Cloud Speech-Text के लिए कोड के नमूनों पर जाएं. हम बोली के ऑडियो को लेख में बदलने में दिलचस्पी रखते हैं. लगता है कि शुरू करने के लिए transcribe.py
एक अच्छी जगह है, इसलिए आइए इसका इस्तेमाल करें. बोली को लेख में बदलने की सुविधा का कॉन्टेंट कॉपी करें, Cloud Shell में नई फ़ाइल बनाएं, जिसका नाम speech2text.py
है, और सभी कोड को speech2text.py
में चिपकाएं. आप Cloud Shell कोड एडिटर में मैन्युअल तरीके से ऐसा कर सकते हैं. आप चाहें, तो 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
इसमें गलत एन्कोडिंग और सैंपल हर्ट्ज़ दर के बारे में शिकायत करने वाली गड़बड़ियां होनी चाहिए. चिंता न करें, transcribe_gcs()
कोड में जाएं और RecognitionConfig()
से encoding
और sampe_hertz_rate
की सेटिंग मिटाएं. जब आप ##39 हों, तब भाषा कोड को “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
चलो इसे आज़माएं
अब # क्लाउड के लिए कोड नमूने देखें. इस कोडलैब के लिए, हम टेक्स्ट का अनुवाद अंग्रेज़ी में करना चाहते हैं. snippets.py
ऐसा लगता है कि हम क्या चाहते हैं. snippets.py का कॉन्टेंट कॉपी करें, translate.py
नाम की क्लाउड शेल में एक नई फ़ाइल बनाएं और सभी कोड को translate.py
में चिपकाएं. आप Cloud Shell कोड एडिटर में मैन्युअल तरीके से ऐसा कर सकते हैं. आप चाहें, तो 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 '你有沒有帶外套'
इसका अनुवाद &कोट होना चाहिए;क्या आपके पास जैकेट जैकेट है;.
अभी क्या हो रहा है?
आपने translate.py
को तीन तर्क पास किए हैं:
- अनुवाद करें-टेक्स्ट चलाने के लिए
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 क्लाइंट की ज़रूरत होगी. इंस्टॉल करने के लिए, क्लाउड शेल में इन्हें टाइप करें:
sudo pip install --upgrade google-cloud-language
चलो इसे आज़माएं
आखिर में, आइए Cloud Natural Language API के कोड कोड के नमूनों को देखें. हम टेक्स्ट में इकाइयों का पता लगाना चाहते हैं. ऐसा लगता है कि snippets.py
में ऐसा कोई कोड है. snippets.py का कॉन्टेंट कॉपी करें, natural_language.py
नाम की क्लाउड शेल में एक नई फ़ाइल बनाएं और सभी कोड को natural_language.py
में चिपकाएं. आप Cloud Shell कोड एडिटर में मैन्युअल तरीके से ऐसा कर सकते हैं. आप चाहें, तो 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'
एपीआई को इकाई के रूप में &कोटेशन और कोटेशन की पहचान करनी चाहिए. इकाइयां, व्यक्तिवाचक संज्ञा (सार्वजनिक आंकड़े, लैंडमार्क वगैरह) या सामान्य संज्ञा (रेस्टोरेंट, स्टेडियम वगैरह) हो सकती हैं.
अभी क्या हो रहा है?
आपने natural_language.py
को 2 तर्क पास किए:
- एंटिटी-टेक्स्ट, चलाने के लिए
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
को हटाएं और 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)
इसे आज़माएं
फ़ाइनल कोड, GitHub की इस रिपॉज़िटरी (डेटा स्टोर करने की जगह) के solution.py में पाया जा सकता है. इसके लिए यह एक कमांड है:
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. बधाई हो!
आपने चार#मशीन लर्निंग एपीआई के बारे में जाना और उन्हें इंटिग्रेट किया. इससे यह तय होता है कि बोली के नमूने में, दी गई इमेज के बारे में बात हो रही है या नहीं. यह तो बस शुरुआत है, क्योंकि इस पाइपलाइन को बेहतर बनाने के कई और तरीके हैं!
हमने क्या-क्या शामिल किया है
- Cloud Vision एपीआई को अनुरोध भेजना
- Cloud बोली को लिखाई में बदलने वाले API में अनुरोध करना
- क्लाउड अनुवाद एपीआई को अनुरोध भेजना
- Cloud Natural Language API के लिए अनुरोध करना
- ऊपर दिए गए सभी एपीआई का एक साथ इस्तेमाल करना
अगले चरण
- शब्दों की बेहतर तुलना के लिए, शब्द2vec पर जाएं
- विज़न एपीआई, स्पीच-टू-टेक्स्ट एपीआई, अनुवाद एपीआई और नैचुरल लैंग्वेज एपीआई पर, ज़्यादा जानकारी वाले कोडलैब देखें
- Cloud Video Intelligence की जगह Cloud Vision आज़माएं
- Cloud Text-to-Speech एपीआई की मदद से, बोली को सुनें
- क्लाउड स्टोरेज पर ऑब्जेक्ट अपलोड करने का तरीका जानें