Mengintegrasikan API machine learning

Mengintegrasikan API machine learning

Tentang codelab ini

subjectTerakhir diperbarui Jun 30, 2021
account_circleDitulis oleh Torry Yang

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:

e6a57e5def315116.jpeg

Yang akan Anda pelajari

  • Cara menggunakan Vision, Speech-to-Text, Translation, dan Natural Language API
  • Tempat menemukan contoh kode

Yang Anda butuhkan

  • Browser, seperti Chrome atau Firefox
  • Pengetahuan dasar tentang Python

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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.

2bfc27ef9ba2ec7d.png

Pilih API & services dari drop-down, lalu klik Dashboard

a9546a22581facd5.png

Klik Aktifkan API dan layanan.

eae7ff043d13a35.png

Kemudian, telusuri "vision" di kotak penelusuran. Klik Google Cloud Vision API:

a47893f36372ae2f.png

Klik Enable untuk mengaktifkan Cloud Vision API:

a24fd082a22030ad.png

Tunggu beberapa detik hingga perangkat diaktifkan. Anda akan melihat ini setelah diaktifkan:

633e58cbde1b74c6.png

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" Tangkapan Layar 08-06-2015 pukul 17.30.32.pngdi pojok kanan atas panel header

24ef50000ca737a4.png

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 b885bf07bc1b02e5.png di pojok kanan atas panel Cloud Shell

de00be9278baf7b8.png

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.

e6a57e5def315116.jpeg

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