Bu codelab hakkında
1. Genel bakış
Bu codelab'de birkaç makine öğrenimi API'sine hızlı bir genel bakış sağlanmıştır. Şunları kullanacaksınız:
- Bir resmin içeriğini anlamak için Cloud Vision
- Sesi metne dönüştürmek için Cloud Speech-to-Text
- İsteğe bağlı bir dizeyi desteklenen herhangi bir dile çevirmek için Cloud Translation
- Metinden bilgi çıkarmak için Cloud Natural Language
Geliştireceğiniz uygulama
Ses kaydını bir resimle karşılaştıran ve birbirleriyle ilişkisini belirleyen bir ardışık düzen oluşturursunuz. Aşağıda, bunu nasıl başarabileceğinize dair genel bir bakış bulabilirsiniz:
Neler öğreneceksiniz?
- Vision, Speech-to-Text, Translation ve Natural Language API'leri kullanma
- Kod örnekleri nerede bulunur?
Gerekenler
2. Kurulum ve Gereksinimler
Bağımsız tempolu ortam kurulumu
- Cloud Console'da oturum açın ve yeni bir proje oluşturun ya da mevcut bir projeyi yeniden kullanın. Henüz bir Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
Proje kimliğini tüm Google Cloud projeleri genelinde benzersiz bir ad olarak hatırlayın (yukarıdaki ad zaten alınmıştı ve maalesef sizin için çalışmaz). Bu, daha sonra bu codelab'de PROJECT_ID
olarak adlandırılacaktır.
- Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'den geçmenin, hiçbir maliyeti yoktur. Bu eğitimin dışında faturalandırma yapılmaması için kaynakları nasıl kapatacağınızı öneren "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki Ücretsiz Deneme programına uygundur.
API'leri etkinleştirme
Gerekli tüm API'leri etkinleştirmek için bu bağlantıyı tıklayabilirsiniz. Bunu yaptıktan sonra, kimlik doğrulama ayarlarını yapma talimatlarını yok sayabilirsiniz. Birazdan bu işlemi gerçekleştireceğiz. Alternatif olarak, her API'yi ayrı ayrı etkinleştirebilirsiniz. Bunu yapmak için ekranın sol üst kısmındaki menü simgesini tıklayın.
Açılır menüden API'ler ve hizmetler'i seçin ve Kontrol Paneli'ni tıklayın
API'leri ve hizmetleri etkinleştir'i tıklayın.
Ardından, arama kutusunda "görsel"i arayın. Google Cloud Vision API'yi tıklayın:
Cloud Vision API'yi etkinleştirmek için Etkinleştir'i tıklayın:
Etkinleştirmek için birkaç saniye bekleyin. Bu özellik etkinleştirildikten sonra bunu görürsünüz:
Cloud Speech, Cloud Translation ve Cloud Natural Language API'leri etkinleştirmek için aynı işlemi tekrarlayın.
Cloud Shell
Google Cloud Shell, Cloud'da çalışan bir komut satırı ortamıdır. Bu Debian tabanlı sanal makine, ihtiyacınız olan tüm geliştirme araçları (gcloud
, bq
, git
ve diğerleri) yüklü olarak gelir ve kalıcı 5 GB ana dizin sunar. Makine öğrenimi API'lerine yönelik isteğimizi oluşturmak için Cloud Shell'i kullanacağız.
Cloud Shell'i kullanmaya başlamak için başlık çubuğunun sağ üst köşesindeki "Google Cloud Shell'i Etkinleştir" simgesini tıklayın
Konsolun altındaki yeni bir çerçevede Cloud Shell oturumu açılır ve komut satırı istemi görüntülenir. user@project:~$ istemi görünene kadar bekleyin.
İsteğe bağlı: Kod Düzenleyici
Komut satırında ne kadar rahat olduğunuza bağlı olarak, Cloud Shell çubuğunun sağ üst köşesindeki "Kod Düzenleyiciyi Başlat" simgesini tıklayabilirsiniz
Hizmet Hesabı
Kimlik doğrulaması için bir hizmet hesabı gerekir. Bunu yapmak için [NAME] öğesini istediğiniz hizmet hesabı adıyla değiştirin ve Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud iam service-accounts create [NAME]
Şimdi bu hizmet hesabını kullanmak için bir anahtar oluşturmanız gerekir. [FILE_NAME] adlı dosyayı istediğiniz anahtar adıyla ([NAME]) yukarıdaki hizmet hesabı adıyla, [PROJECT_ID] ise projenizin kimliğiyle değiştirin. Aşağıdaki komut, anahtarı oluşturur ve [FILE_NAME].json olarak indirir:
gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
Hizmet hesabını kullanmak için GOOGLE_APPLICATION_CREDENTIALS değişkenini anahtarın yolu olarak ayarlamanız gerekir. Bunu yapmak için, [PATH_TO_FILE] ve [FILE_NAME] dosyalarını değiştirdikten sonra aşağıdaki komutu çalıştırın:
export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_FILE]/[FILE_NAME].json
3. Cloud Vision
Python istemcisi
Cloud Vision için Python istemcisine ihtiyacınız vardır. Yüklemek için Cloud Shell'e aşağıdakileri yazın:
pip install --upgrade google-cloud-vision --user
Deneyin
Cloud Vision API için kod örneklerine göz atalım. Belirli bir görselde neler olduğunu öğrenmek istiyoruz. detect.py
bu ürün için faydalı görünüyor. Bu nedenle önerilerimizi alalım. Bunun bir yolu da detect.py içeriğini kopyalamak, Cloud Shell'de vision.py
adında yeni bir dosya oluşturmak ve tüm kodu vision.py
yapıştırmaktır. Bunu Cloud Shell kod düzenleyicide manuel olarak yapabilir veya bu curl komutunu Cloud Shell'de çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/vision/cloud-client/detect/detect.py -o vision.py
Bu işlemin ardından Cloud Shell'de aşağıdaki komutu çalıştırarak API'yi kullanın:
python vision.py labels-uri gs://cloud-samples-data/ml-api-codelab/birds.jpg
Resim analiz edildiğinden kuşlar ve deve kuşları hakkında bir çıktı göreceksiniz: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/birds.jpg
Neler oluyor?
vision.py
adlı ortama 2 bağımsız değişken ilettiniz:
- labels-uri, çalıştırılacak
detect_labels_uri()
işlevini seçer - gs://cloud-samples-data/ml-api-codelab/birds.jpg, bir resmin Google Cloud Storage'daki konumudur ve
detect_labels_uri()
öğesine uri olarak iletilir
detect_labels_uri()
işletmesini yakından inceleyelim. Eklenen diğer yorumları unutmayın.
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. Cloud Speech-to-Text
Python istemcisi
Cloud Speech-to-Text için Python istemcisine ihtiyacınız olacak. Yüklemek için Cloud Shell'e aşağıdakileri yazın:
sudo pip install --upgrade google-cloud-speech
Deneyin
Cloud Speech-to-Text için kod örneklerine geçelim. Konuşma sesini metne dönüştürmek isteriz. transcribe.py
başlamak için iyi bir yer gibi görünüyor. Bu nedenle bunu kullanalım. transcribe.py içeriğini kopyalayın, Cloud Shell'de speech2text.py
adlı yeni bir dosya oluşturun ve tüm kodu speech2text.py
içine yapıştırın. Bunu Cloud Shell kod düzenleyicide manuel olarak yapabilir veya bu curl komutunu Cloud Shell'de çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/speech/cloud-client/transcribe.py -o speech2text.py
Bu işlemin ardından Cloud Shell'de aşağıdaki komutu çalıştırarak API'yi kullanın:
python speech2text.py gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav
Yanlış kodlama ve örnek hertz hızıyla ilgili şikayette bulunan hatalar olmalıdır. Merak etmeyin, koda transcribe_gcs()
gidip encoding
ve sampe_hertz_rate
ayarlarını RecognitionConfig()
uygulamasından silin. tr-ostrich.wav
bu dildeyken Türkçe konuşma kaydı olduğundan dil kodunu "tr-TR' olarak değiştirin.
config = types.RecognitionConfig(language_code='tr-TR')
Şimdi speech2text.py
komutunu tekrar çalıştırın. Sonuç, ses analizi olduğu için Türkçe bir metin olmalıdır: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/tr-ostrich.wav
Neler oluyor?
Google Cloud Storage'daki bir ses dosyasının speech2text.py
konumuna iletildiği gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav dosyasını aktardınız. Ardından bu veri, transcribe_uri()
adresine gcs_uri olarak iletildi
Değiştirilen transcribe_uri()
öğesini daha yakından inceleyelim.
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 istemcisi
Cloud Translation için Python istemcisine ihtiyacınız olacaktır. Yüklemek için Cloud Shell'e aşağıdakileri yazın:
sudo pip install --upgrade google-cloud-translate
Deneyin
Şimdi Cloud Translation için kod örneklerine göz atalım. Bu codelab'in amacı doğrultusunda metni İngilizceye çevirmek istiyoruz. snippets.py
istediğimiz gibi görünüyor. Snippet'lerin içeriğini kopyalayın, Cloud Shell'de translate.py
adlı yeni bir dosya oluşturun ve tüm kodu translate.py
'a yapıştırın. Bunu Cloud Shell kod düzenleyicide manuel olarak yapabilir veya bu curl komutunu Cloud Shell'de çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/translate/cloud-client/snippets.py -o translate.py
Bu işlemin ardından Cloud Shell'de aşağıdaki komutu çalıştırarak API'yi kullanın:
python translate.py translate-text en '你有沒有帶外套'
Çeviri, "Ceketiniz var mı?" şeklinde olmalıdır.
Neler oluyor?
translate.py
ile 3 bağımsız değişken geçirdiniz:
- translate-text, çalıştırılacak
translate_text()
işlevini seçer - en,
translate_text()
diline target olarak geçirilir ve çevrilecek dili belirtmeyi sağlar - ‘你有沒有帶外套' çevrilecek dizedir ve
translate_text()
diline metin olarak aktarılır
translate_text()
işletmesini yakından inceleyelim. Eklenen yorumları not edin.
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 Natural Language
Python istemcisi
Cloud Natural Language için Python istemcisine ihtiyacınız vardır. Yüklemek için Cloud Shell'e aşağıdakileri yazın:
sudo pip install --upgrade google-cloud-language
Deneyin
Son olarak Cloud Natural Language API için kod örneklerine bakalım. Metindeki varlıkları tespit etmek istiyoruz. snippets.py
bunu yapan kod içeriyor. Snippet'lerin içeriğini kopyalayın, Cloud Shell'de natural_language.py
adlı yeni bir dosya oluşturun ve tüm kodu natural_language.py
'a yapıştırın. Bunu Cloud Shell kod düzenleyicide manuel olarak yapabilir veya bu curl komutunu Cloud Shell'de çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/language/cloud-client/v1/snippets.py -o natural_language.py
Bu işlemin ardından Cloud Shell'de aşağıdaki komutu çalıştırarak API'yi kullanın:
python natural_language.py entities-text 'where did you leave my bike'
API "bisiklet"i bir tüzel kişi olarak tanımlamalıdır. Varlıklar adlar (herkese açık figürler, önemli noktalar vb.) veya yaygın isimler (restoran, stadyum vb.) olabilir.
Neler oluyor?
natural_language.py
adlı ortama 2 bağımsız değişken ilettiniz:
- entities-text, çalıştırılacak
entities_text()
işlevini seçer - "Bisikletimi nerede bıraktınız?", varlıklar için analiz edilecek dizedir ve
entities_text()
için metin olarak iletilir.
entities_text()
işletmesini yakından inceleyelim. Eklenen yeni yorumları not edin.
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. Entegre Etmelerini Sağlayalım
Bize geliştirdiğiniz binayı hatırlatalım.
Şimdi her şeyi bir araya getirelim. Bir solution.py
dosyası oluşturun; önceki adımlarda bulunan detect_labels_uri()
, transcribe_gcs()
, translate_text()
ve entities_text()
değerlerini kopyalayıp solution.py
içine yapıştırın.
Ekstreleri içe aktarma
Açıklamayı iptal edip içe aktarma ifadelerini en üste taşıyın. Hem speech.types
hem de language.types
içe aktarılıyor. Bu durum çakışmaya neden olacaktır. Bu yüzden, bunları kaldırıp transcribe_gcs()
ve entities_text()
içindeki her types
örneğini speech.types
ve language.types
olarak değiştirelim. Şu şekilde kalmanız gerekir:
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
Sonuçları döndür
Yazdırmak yerine işlevlerin sonuçları döndürmesini sağlayın. Aşağıdakine benzer bir şablona sahip olmalısınız:
# 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
İşlevleri kullanma
Tüm bu zorlu işin ardından bu işlevleri çağırırsınız. Gönder, bunu yap! Aşağıda bununla ilgili bir örnek verilmiştir:
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.')
Birden fazla dili destekleme
Türkçeyi transcribe_gcs()
koduna sabitlemiştik. Dili compare_audio_to_image()
dilinden ayırt edilebilir olacak şekilde değiştirelim. Gerekli değişiklikler aşağıda verilmiştir:
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)
Deneyin
Son kod, bu GitHub veri havuzunun solution.py bölümünde bulunabilir. Bu bilgiyi almak için bir curl komutu aşağıda verilmiştir:
curl https://raw.githubusercontent.com/googlecodelabs/integrating-ml-apis/master/solution.py -O
GitHub'daki sürüm, komut satırından aşağıdakilere izin veren argparse içeriyor:
python solution.py tr-TR gs://cloud-samples-data/ml-api-codelab/tr-ball.wav gs://cloud-samples-data/ml-api-codelab/football.jpg
Bulunan her öğe için, kod şunları içermelidir: Ses ve resim şunları içermelidir: & &;
Bonus: Daha fazla bilgi
Deneyebileceğiniz diğer ses ve resim dosyası konumları aşağıda verilmiştir.
8. Tebrikler!
Bir konuşma örneğinin sağlanan resimden söz edip etmediğini belirlemek için dört makine öğrenimi API'sini keşfedip entegre ettiniz. Bu daha fazla başlangıç noktası olduğu için bu yalnızca bir başlangıç.
Değindiğimiz konular
- Cloud Vision API'ye istek yapma
- Cloud Speech-to-Text API'ye istek yapma
- Cloud Translation API'ye istek yapma
- Cloud Natural Language API'ye istek yapma
- Yukarıdaki API'lerin tümünü birlikte kullanma
Sonraki Adımlar
- Kelimeleri daha iyi karşılaştırmak için word2vec konusuna göz atın
- Vision API, Speech-to-Text API, Translation API ve Natural Language API hakkında daha ayrıntılı codelab'lere göz atın.
- Cloud Vision'ı Cloud Video Intelligence ile değiştirmeyi deneyin
- Cloud Text-to-Speech API ile konuşma sesini sentezleyin
- Nesneleri Cloud Storage'a yüklemeyi öğrenin