Tentang codelab ini
1. Ringkasan
Codelab ini akan memberi Anda tur singkat mengenai beberapa API machine learning. Anda akan menggunakan:
- Cloud Vision untuk memahami konten gambar
- Cloud Speech-to-Text untuk mentranskripsikan audio menjadi teks
- Cloud Translation untuk menerjemahkan string arbitrer ke dalam bahasa yang didukung
- Cloud Natural Language untuk mengekstrak informasi dari teks
Yang akan Anda build
Anda akan membuat pipeline yang membandingkan rekaman audio dengan gambar dan menentukan relevansinya satu sama lain. Berikut sedikit bocoran terkait cara Anda melakukannya:
Yang akan Anda pelajari
- Cara menggunakan Vision, Speech-to-Text, Translation, dan Natural Language API
- Tempat menemukan contoh kode
Yang Anda butuhkan
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis seharga $300 USD.
Mengaktifkan API
Anda dapat mengklik link ini untuk mengaktifkan semua API yang diperlukan. Setelah Anda melakukannya, abaikan petunjuk untuk menyiapkan autentikasi; kami akan melakukannya sebentar lagi. Atau, Anda dapat mengaktifkan setiap API satu per satu. Untuk melakukannya, klik ikon menu di kiri atas layar.
Pilih API & services dari drop-down, lalu klik Dashboard
Klik Aktifkan API dan layanan.
Kemudian, telusuri "vision" di kotak penelusuran. Klik Google Cloud Vision API:
Klik Enable untuk mengaktifkan Cloud Vision API:
Tunggu beberapa detik hingga perangkat diaktifkan. Anda akan melihat ini setelah diaktifkan:
Ulangi proses yang sama untuk mengaktifkan Cloud Speech, Cloud Translation, dan Cloud Natural Language API.
Cloud Shell
Google Cloud Shell adalah lingkungan command line yang berjalan di Cloud. Mesin virtual berbasis Debian ini memuat semua alat pengembangan yang akan Anda perlukan (gcloud
, bq
, git
, dan lainnya) dan menawarkan direktori home persisten sebesar 5 GB. Kami akan menggunakan Cloud Shell untuk membuat permintaan ke API machine learning.
Untuk memulai Cloud Shell, klik ikon "Aktifkan Google Cloud Shell" di pojok kanan atas panel header
Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah konsol dan menampilkan perintah command-line. Tunggu hingga permintaan user@project:~$ muncul.
Opsional: Editor Kode
Bergantung pada kenyamanan Anda dengan command line, Anda dapat mengklik "Luncurkan Editor Kode" ikon di pojok kanan atas panel Cloud Shell
Akun Layanan
Anda akan memerlukan akun layanan untuk mengautentikasi. Untuk membuatnya, ganti [NAME] dengan nama akun layanan yang diinginkan dan jalankan perintah berikut di Cloud Shell:
gcloud iam service-accounts create [NAME]
Sekarang Anda harus membuat kunci untuk menggunakan akun layanan tersebut. Ganti [FILE_NAME] dengan nama kunci yang diinginkan, [NAME] dengan nama akun layanan dari atas dan [PROJECT_ID] dengan ID project Anda. Perintah berikut akan membuat dan mendownload kunci sebagai [FILE_NAME].json:
gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
Untuk menggunakan akun layanan, Anda harus menetapkan variabel GOOGLE_APPLICATION_CREDENTIALS ke jalur kunci. Untuk melakukannya, jalankan perintah berikut setelah mengganti [PATH_TO_FILE] dan [FILE_NAME]:
export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_FILE]/[FILE_NAME].json
3. Cloud Vision
Klien Python
Anda akan memerlukan klien Python untuk Cloud Vision. Untuk menginstal, ketik perintah berikut ke dalam Cloud Shell:
pip install --upgrade google-cloud-vision --user
Mari coba
Mari kita lihat contoh kode untuk Cloud Vision API. Kami tertarik untuk mencari tahu apa yang ada dalam gambar yang ditentukan. Sepertinya detect.py
berguna untuk memahami ini, jadi mari kita ambil. Salah satu caranya adalah dengan menyalin konten detect.py, membuat file baru di Cloud Shell yang disebut vision.py
dan menempelkan semua kode ke dalam vision.py
. Anda dapat melakukannya secara manual di editor kode Cloud Shell atau menjalankan perintah curl ini di Cloud Shell:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/vision/cloud-client/detect/detect.py -o vision.py
Setelah melakukannya, gunakan API dengan menjalankan perintah berikut di Cloud Shell:
python vision.py labels-uri gs://cloud-samples-data/ml-api-codelab/birds.jpg
Anda akan melihat output tentang burung dan burung unta karena ini adalah gambar yang dianalisis: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/birds.jpg
Apa yang terjadi?
Anda meneruskan 2 argumen ke vision.py
:
- labels-uri memilih fungsi
detect_labels_uri()
untuk dijalankan - gs://cloud-samples-data/ml-api-codelab/birds.jpg adalah lokasi gambar di Google Cloud Storage dan diteruskan sebagai uri ke dalam
detect_labels_uri()
Mari kita pelajari detect_labels_uri()
lebih lanjut. Perhatikan komentar tambahan yang telah disisipkan.
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
Klien Python
Anda akan memerlukan klien Python untuk Cloud Speech-to-Text. Untuk menginstal, ketik perintah berikut ke dalam Cloud Shell:
sudo pip install --upgrade google-cloud-speech
Mari coba
Mari kita buka contoh kode untuk Cloud Speech-to-Text. Kami tertarik untuk mentranskripsikan audio ucapan. Sepertinya transcribe.py
adalah tempat yang bagus untuk memulai, jadi mari kita gunakan itu. Salin konten transcribe.py, buat file baru di Cloud Shell bernama speech2text.py
, lalu tempelkan semua kode ke dalam speech2text.py
. Anda dapat melakukannya secara manual di editor kode Cloud Shell atau menjalankan perintah curl ini di Cloud Shell:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/speech/cloud-client/transcribe.py -o speech2text.py
Setelah melakukannya, gunakan API dengan menjalankan perintah berikut di Cloud Shell:
python speech2text.py gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav
Harus ada error yang mengeluhkan encoding yang salah dan sampel rasio hertz. Jangan khawatir, buka transcribe_gcs()
pada kode dan hapus setelan encoding
dan sampe_hertz_rate
dari RecognitionConfig()
. Saat Anda melakukannya, ubah kode bahasa menjadi ‘tr-TR' karena tr-ostrich.wav
adalah rekaman ucapan dalam bahasa Turki.
config = types.RecognitionConfig(language_code='tr-TR')
Sekarang, jalankan speech2text.py
lagi. Output harus berupa teks berbahasa Turki karena ini adalah audio yang dianalisis: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/tr-ostrich.wav
Apa yang terjadi?
Anda meneruskan gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav, lokasi file audio di Google Cloud Storage ke speech2text.py
, yang kemudian diteruskan sebagai gcs_uri ke transcribe_uri()
Mari kita lihat lebih dekat transcribe_uri()
yang telah dimodifikasi.
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
Klien Python
Anda akan memerlukan klien Python untuk Cloud Translation. Untuk menginstal, ketik perintah berikut ke Cloud Shell:
sudo pip install --upgrade google-cloud-translate
Mari coba
Kini, mari kita lihat contoh kode untuk Cloud Translation. Untuk tujuan codelab ini, kita ingin menerjemahkan teks ke dalam bahasa Inggris. snippets.py
terlihat seperti yang kita inginkan. Salin kontensnippet.py, buat file baru di Cloud Shell bernama translate.py
, lalu tempelkan semua kode ke dalam translate.py
. Anda dapat melakukannya secara manual di editor kode Cloud Shell atau menjalankan perintah curl ini di Cloud Shell:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/translate/cloud-client/snippets.py -o translate.py
Setelah melakukannya, gunakan API dengan menjalankan perintah berikut di Cloud Shell:
python translate.py translate-text en '你有沒有帶外套'
Terjemahannya harus "Apakah kamu punya jaket?".
Apa yang terjadi?
Anda meneruskan 3 argumen ke translate.py
:
- translate-text memilih fungsi
translate_text()
untuk dijalankan - en diteruskan sebagai target ke
translate_text()
dan berfungsi untuk menentukan bahasa terjemahan - ‘你有沒有帶外套' adalah string yang akan diterjemahkan dan diteruskan sebagai teks ke dalam
translate_text()
Mari kita pelajari translate_text()
lebih lanjut. Perhatikan komentar yang telah ditambahkan.
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
Klien Python
Anda akan memerlukan klien Python untuk Cloud Natural Language. Untuk menginstal, ketik perintah berikut ke dalam Cloud Shell:
sudo pip install --upgrade google-cloud-language
Mari coba
Terakhir, mari kita lihat contoh kode untuk Cloud Natural Language API. Kita ingin mendeteksi entitas dalam teks. Tampaknya snippets.py
berisi kode yang berisi kode tersebut. Salin kontensnippet.py, buat file baru di Cloud Shell bernama natural_language.py
, lalu tempelkan semua kode ke dalam natural_language.py
. Anda dapat melakukannya secara manual di editor kode Cloud Shell atau menjalankan perintah curl ini di Cloud Shell:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/language/cloud-client/v1/snippets.py -o natural_language.py
Setelah melakukannya, gunakan API dengan menjalankan perintah berikut di Cloud Shell:
python natural_language.py entities-text 'where did you leave my bike'
API harus mengidentifikasi "bike" sebagai entitas. Entitas dapat berupa kata benda (kata-kata publik, bangunan terkenal, dll.) atau kata benda umum (restoran, stadion, dll.).
Apa yang terjadi?
Anda meneruskan 2 argumen ke natural_language.py
:
- entities-text memilih fungsi
entities_text()
yang akan dijalankan - ‘di mana Anda meninggalkan sepeda saya' adalah string yang akan dianalisis untuk entitas dan diteruskan sebagai teks ke dalam
entities_text()
Mari kita pelajari entities_text()
lebih lanjut. Perhatikan komentar baru yang telah disisipkan.
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. Mari Integrasikan
Mari kita ingatkan diri kita sendiri apa yang sedang Anda bangun.
Sekarang mari kita gabungkan semuanya. Buat file solution.py
; salin dan tempel detect_labels_uri()
, transcribe_gcs()
, translate_text()
, dan entities_text()
dari langkah sebelumnya ke dalam solution.py
.
Pernyataan impor
Hapus tanda komentar dan pindahkan pernyataan impor ke atas. Perhatikan bahwa speech.types
dan language.types
sedang diimpor. Hal ini akan menyebabkan konflik. Jadi, mari kita hapus dan ubah setiap kemunculan types
di transcribe_gcs()
dan entities_text()
menjadi speech.types
dan language.types
. Anda akan mendapatkan:
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
Hasil yang ditampilkan
Fungsi ini akan menampilkan hasil, bukan mencetak. Anda akan melihat yang mirip dengan:
# 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
Menggunakan fungsi
Setelah semua kerja keras tersebut, Anda dapat memanggil fungsi tersebut. Ayo lakukan! Berikut contohnya:
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.')
Mendukung beberapa bahasa
Sebelumnya kami melakukan hardcode Turki ke transcribe_gcs()
. Mari kita ubah agar bahasa dapat ditentukan dari compare_audio_to_image()
. Berikut adalah perubahan yang diperlukan:
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)
Coba
Kode akhir dapat ditemukan di solution.py repositori GitHub ini. Berikut adalah perintah curl untuk mengambilnya:
curl https://raw.githubusercontent.com/googlecodelabs/integrating-ml-apis/master/solution.py -O
Versi di GitHub berisi argparse, yang memungkinkan hal berikut dari command line:
python solution.py tr-TR gs://cloud-samples-data/ml-api-codelab/tr-ball.wav gs://cloud-samples-data/ml-api-codelab/football.jpg
Untuk setiap item yang ditemukan, kode harus berupa output "Audio dan gambar keduanya berisi: ". Pada contoh di atas, kode akan menjadi "Audio dan gambar keduanya berisi: bola".
Bonus: coba lagi
Berikut adalah lokasi file audio dan gambar lainnya yang dapat dicoba.
8. Selamat!
Anda telah mempelajari dan mengintegrasikan empat API machine learning untuk menentukan apakah sampel ucapan digunakan untuk gambar yang diberikan. Ini hanyalah permulaan karena ada banyak cara untuk menyempurnakan pipeline ini.
Yang telah kita bahas
- Membuat permintaan ke Cloud Vision API
- Membuat permintaan ke Cloud Speech-to-Text API
- Membuat permintaan ke Cloud Translation API
- Membuat permintaan ke Cloud Natural Language API
- Menggunakan semua API di atas secara bersamaan
Langkah Berikutnya
- Untuk perbandingan kata yang lebih baik, lihat word2vec
- Lihat codelab yang lebih mendalam tentang Vision API, Speech-to-Text API, Translation API dan Natural Language API
- Cobalah menggantikan Cloud Vision dengan Cloud Video intelligence
- Melakukan sintesis audio ucapan dengan Cloud Text-to-Speech API
- Pelajari cara mengupload objek ke Cloud Storage