1. Genel Bakış
Bu codelab'de, birkaç makine öğrenimi API'si hakkında kısa bir tur yapacaksınız. Kullanacağınız araçlar:
- Resim içeriğini anlamak için Cloud Vision
- Sesi metne dönüştürmek için Cloud Speech-to-Text
- Rastgele bir dizeyi desteklenen herhangi bir dile çevirmek için Cloud Translation
- Metinden bilgi ayıklamak için Cloud Natural Language
Ne oluşturacaksınız?
Ses kaydını görüntüyle karşılaştırıp birbirleriyle alaka düzeylerini belirleyen bir işlem hattı oluşturacaksınız. Bu işlemi nasıl yapacağınızla ilgili kısa bir önizleme:
Neler öğreneceksiniz?
- Vision, Speech-to-Text, Translation ve Natural Language API'lerini kullanma
- Kod örneklerini bulma
İhtiyacınız olanlar
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Henüz bir Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.
Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında 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'i tamamlamak neredeyse hiç maliyetli değildir. "Temizleme" bölümündeki, kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan talimatları uyguladığınızdan emin olun. Böylece bu eğitimin ötesinde faturalandırma yapılması önlenir. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
API'leri etkinleştirme
Gerekli tüm API'leri etkinleştirmek için bu bağlantıyı tıklayabilirsiniz. Bu işlemi yaptıktan sonra kimlik doğrulamayı ayarlama talimatlarını göz ardı edebilirsiniz. Bu işlemi birazdan yapacağız. 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çip Kontrol Paneli'ni tıklayın.
API'leri ve hizmetleri etkinleştir'i tıklayın.
Ardından, arama kutusunda "görüş"ü 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şmesi için birkaç saniye bekleyin. Etkinleştirildikten sonra şunları görürsünüz:
Cloud Speech, Cloud Translation ve Cloud Natural Language API'lerini 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, ihtiyaç duyacağınız tüm geliştirme araçları (gcloud
, bq
, git
ve diğerleri) yüklü olarak gelir ve 5 GB kalıcı 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ını kullanma konusunda kendinizi ne kadar rahat hissettiğinize bağlı olarak Cloud Shell çubuğunun sağ üst köşesindeki "Launch Code Editor" (Kod Düzenleyiciyi Başlat) simgesini tıklayabilirsiniz.
Hizmet Hesabı
Kimlik doğrulaması yapmak için hizmet hesabına ihtiyacınız vardır. Bir tane oluşturmak için [NAME] yerine hizmet hesabının istediğiniz adını girin 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] değerini anahtarın istediğiniz adıyla, [NAME] değerini yukarıdaki hizmet hesabı adıyla ve [PROJECT_ID] değerini projenizin kimliğiyle değiştirin. Aşağıdaki komut, anahtarı [FILE_NAME].json olarak oluşturup 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] değerlerini 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
Deneyelim
Cloud Vision API'nin kod örneklerine göz atalım. Belirtilen bir resimde ne olduğunu öğrenmek istiyoruz. detect.py
bu konuda faydalı olabilir. Bir yöntem, detect.py dosyasının içeriğini kopyalamak, Cloud Shell'de vision.py
adlı yeni bir dosya oluşturmak ve tüm kodu vision.py
dosyasına yapıştırmaktır. Bu işlemi Cloud Shell kod düzenleyicide manuel olarak yapabilir veya Cloud Shell'de şu curl komutunu çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/vision/cloud-client/detect/detect.py -o vision.py
Bu işlemi yaptıktan sonra Cloud Shell'de aşağıdakileri çalıştırarak API'yi kullanın:
python vision.py labels-uri gs://cloud-samples-data/ml-api-codelab/birds.jpg
Analiz edilen resim şu olduğundan kuşlar ve deve kuşları hakkında bir çıktı görmeniz gerekir: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/birds.jpg
Neler oluyor?
vision.py
işlevine 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, Google Cloud Storage'daki bir resmin konumudur ve
detect_labels_uri()
içine uri olarak iletilir.
detect_labels_uri()
daha yakından inceleyelim. Eklenen ek yorumları inceleyin.
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 vardır. Yüklemek için Cloud Shell'e aşağıdakileri yazın:
sudo pip install --upgrade google-cloud-speech
Deneyelim
Cloud Speech-to-Text kod örneklerine gidelim. Konuşma sesini metne dönüştürmek istiyoruz. transcribe.py
, başlamak için iyi bir yer gibi görünüyor. O yüzden bunu kullanalım. transcribe.py dosyasının içeriğini kopyalayın, Cloud Shell'de speech2text.py
adlı yeni bir dosya oluşturun ve tüm kodu speech2text.py
dosyasına yapıştırın. Bu işlemi Cloud Shell kod düzenleyicide manuel olarak yapabilir veya Cloud Shell'de şu curl komutunu çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/speech/cloud-client/transcribe.py -o speech2text.py
Bu işlemi yaptıktan sonra Cloud Shell'de aşağıdakileri ç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 hatalar olmalıdır. Endişelenmeyin, kodda transcribe_gcs()
bölümüne gidin ve encoding
ile sampe_hertz_rate
ayarlarını RecognitionConfig()
bölümünden silin. Ayrıca, tr-ostrich.wav
Türkçe bir 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. Analiz edilen ses https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/tr-ostrich.wav olduğundan çıkış, Türkçe bir metin olmalıdır.
Neler değişiyor?
Google Cloud Storage'daki bir ses dosyasının konumu olan gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav dosyasını speech2text.py
'ye ilettiniz. Bu dosya daha sonra transcribe_uri()
'ye gcs_uri olarak iletildi.
Değiştirilmiş transcribe_uri()
öğemize daha yakından bakalım.
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 vardır. Yüklemek için Cloud Shell'e aşağıdakileri yazın:
sudo pip install --upgrade google-cloud-translate
Deneyelim
Şimdi de 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. snippets.py dosyasının içeriğini kopyalayın, Cloud Shell'de translate.py
adlı yeni bir dosya oluşturun ve tüm kodu translate.py
dosyasına yapıştırın. Bu işlemi Cloud Shell kod düzenleyicide manuel olarak yapabilir veya Cloud Shell'de şu curl komutunu çalıştırabilirsiniz:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/translate/cloud-client/snippets.py -o translate.py
Bu işlemi yaptıktan sonra Cloud Shell'de aşağıdakileri çalıştırarak API'yi kullanın:
python translate.py translate-text en '你有沒有帶外套'
Çeviri "Ceketiniz var mı?" olmalıdır.
Neler değişiyor?
translate.py
işlevine 3 bağımsız değişken ilettiniz:
- translate-text, çalıştırılacak
translate_text()
işlevini seçer. - en,
translate_text()
'e target olarak iletilir ve çevrilecek dili belirtmek için kullanılır. - ‘你有沒有帶外套' çevrilecek dizedir ve
translate_text()
'e metin olarak iletilir.
translate_text()
daha yakından inceleyelim. Eklenen yorumları inceleyin.
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
Deneyelim
Son olarak, Cloud Natural Language API'nin kod örneklerine bakalım. Metindeki varlıkları tespit etmek istiyoruz. snippets.py
, bunu yapan bir kod içeriyor gibi görünüyor. snippets.py dosyasının içeriğini kopyalayın, Cloud Shell'de natural_language.py
adlı yeni bir dosya oluşturun ve tüm kodu natural_language.py
dosyasına yapıştırın. Bu işlemi Cloud Shell kod düzenleyicide manuel olarak yapabilir veya Cloud Shell'de şu curl komutunu ç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şlemi yaptıktan sonra Cloud Shell'de aşağıdakileri çalıştırarak API'yi kullanın:
python natural_language.py entities-text 'where did you leave my bike'
API, "bisiklet"i bir öğe olarak tanımlamalıdır. Varlıklar özel isimler (kamuya mal olmuş kişiler, önemli noktalar vb.) veya genel isimler (restoran, stadyum vb.) olabilir.
Neler değişiyor?
natural_language.py
işlevine 2 bağımsız değişken ilettiniz:
- entities-text, çalıştırılacak
entities_text()
işlevini seçer. - "Bisikletimi nereye bıraktın?", varlıklar için analiz edilecek dizedir ve
entities_text()
içine text olarak iletilir.
entities_text()
daha yakından inceleyelim. Eklenen yeni yorumları inceleyin.
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 Edelim
Ne geliştirdiğinizi hatırlayalım.
Şimdi her şeyi bir araya getirelim. solution.py
dosyası oluşturun; önceki adımlarda detect_labels_uri()
, transcribe_gcs()
, translate_text()
ve entities_text()
değerlerini kopyalayıp solution.py
dosyasına yapıştırın.
Ekstreleri içe aktarma
İçe aktarma ifadelerinin yorumunu kaldırın ve bunları en üste taşıyın. Hem speech.types
hem de language.types
öğesinin içe aktarıldığını unutmayın. Bu durum çakışmaya neden olacağından bunları kaldırıp types
, transcribe_gcs()
ve entities_text()
karakterlerinin her birini sırasıyla speech.types
ve language.types
olarak değiştirelim. Şunlar kalır:
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
İade sonuçları
Yazdırmak yerine işlevlerin sonuçları döndürmesini sağlayın. Aşağıdakine benzer bir ifade görmeniz gerekir:
# 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 çalışmanın ardından bu işlevleri çağırabilirsiniz. Haydi, yapın! 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
Daha önce transcribe_gcs()
içine Türkçe'yi sabit kodlamıştık. Bunu, dilin compare_audio_to_image()
üzerinden belirtilebileceği şekilde değiştirelim. Gerekli değişiklikler şunlardır:
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 kodu bu GitHub deposunun solution.py dosyasında bulabilirsiniz. Bunu almak için curl komutu:
curl https://raw.githubusercontent.com/googlecodelabs/integrating-ml-apis/master/solution.py -O
GitHub'daki sürümde, komut satırından aşağıdakilerin yapılmasına olanak tanıyan argparse bulunur:
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, "Ses ve görüntüde şunlar var: " ifadesini vermelidir. Yukarıdaki örnekte bu ifade "Ses ve görüntüde şunlar var: top" olur.
Bonus: Daha fazla deneme
Deneyebileceğiniz diğer ses ve resim dosyası konumlarını aşağıda bulabilirsiniz.
8. Tebrikler!
Bir konuşma örneğinin, sağlanan resim hakkında konuşup konuşmadığını belirlemek için dört makine öğrenimi API'sini inceleyip entegre ettiniz. Bu, yalnızca başlangıç. Bu işlem hattının iyileştirilebileceği daha birçok yol var.
İşlediğimiz konular
- Cloud Vision API'ye istek gönderme
- Cloud Speech-to-Text API'ye istek gönderme
- Cloud Translation API'ye istek gönderme
- Cloud Natural Language API'ye istek gönderme
- Yukarıdaki tüm API'leri birlikte kullanma
Sonraki Adımlar
- Kelimeleri daha iyi karşılaştırmak için word2vec'e göz atın.
- Vision API, Speech-to-Text API, Translation API ve Natural Language API ile ilgili daha ayrıntılı codelab'lere göz atın.
- Cloud Vision yerine Cloud Video Intelligence'ı kullanmayı deneyin.
- Cloud Text-to-Speech API ile konuşma sesi sentezleme
- Nesneleri Cloud Storage'a nasıl yükleyeceğinizi öğrenin.