Tutorial: Menganalisis tabel objek menggunakan fungsi jarak jauh
Tutorial ini menunjukkan cara membuat tabel objek berdasarkan gambar dari set data bunga, membuat fungsi jarak jauh yang melabeli gambar menggunakan Cloud Vision API, lalu menganalisis gambar di tabel objek menggunakan fungsi jarak jauh.
Izin yang diperlukan
- Untuk membuat set data, Anda memerlukan izin
bigquery.datasets.create
. Untuk membuat resource koneksi, Anda memerlukan izin berikut:
bigquery.connections.create
bigquery.connections.get
Untuk memberikan izin ke akun layanan koneksi, Anda memerlukan izin berikut:
resourcemanager.projects.setIamPolicy
Untuk membuat tabel objek, Anda memerlukan izin berikut:
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
Untuk membuat fungsi jarak jauh, Anda memerlukan izin yang terkait dengan peran Cloud Functions Developer.
Untuk memanggil fungsi jarak jauh, Anda memerlukan peran Cloud Run Invoker.
Untuk menganalisis tabel objek dengan fungsi jarak jauh, Anda memerlukan izin
bigquery.tables.getData
pada tabel objek.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- BigQuery: You incur storage costs for the object table you create in BigQuery.
- Cloud Functions: You incur costs for invoking the remote function and for any compute resources it uses, including calls to Cloud Vision API.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Untuk informasi selengkapnya tentang harga Cloud Storage, lihat halaman Harga Cloud Storage.
Untuk informasi selengkapnya tentang harga penyimpanan BigQuery, lihat Harga penyimpanan dalam dokumentasi BigQuery.
Untuk informasi selengkapnya tentang harga Cloud Functions, lihat halaman Harga Cloud Functions.
Untuk informasi selengkapnya tentang harga Vision API, lihat Harga Cloud Vision dalam dokumentasi Vision.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the BigQuery, BigQuery Connection API, and Cloud Functions APIs.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the BigQuery, BigQuery Connection API, and Cloud Functions APIs.
Membuat fungsi Cloud Functions
Untuk membuat fungsi, ikuti langkah-langkah berikut:
Buka halaman Cloud Functions.
Klik Create function.
Untuk Environment, pilih 2nd gen.
Untuk Function name, ketik
vision-ai
.Klik Next.
Untuk Runtime, pilih Python 3.9.
Untuk Entry point, ketik
label_detection
.Pilih
main.py
. Salin dan tempel kode berikut:Python
Pilih
requirements.txt
. Salin dan tempel teks berikut:Klik Deploy.
Setelah fungsi selesai di-deploy, klik tab Trigger.
Salin nilai Trigger URL dan simpan di tempat lain. Anda memerlukan informasi ini saat membuat fungsi jarak jauh.
Membuat set data
Buat set data bernama remote_function_test
:
SQL
Buka halaman BigQuery.
Di panel Editor, jalankan pernyataan SQL berikut:
CREATE SCHEMA `PROJECT_ID.remote_function_test`;
Ganti
PROJECT_ID
dengan project ID Anda.
bq
Di konsol Google Cloud, aktifkan Cloud Shell.
Jalankan perintah
bq mk
untuk membuat set data:bq mk --dataset --location=us PROJECT_ID:remote_function_test
Ganti
PROJECT_ID
dengan project ID Anda.
Buat koneksi
Buat koneksi bernama lake-connection
:
Konsol
Buka halaman BigQuery.
Klik
Add data, lalu klik External data source.Dalam daftar Connection type, pilih BigLake and remote functions (Cloud Resource).
Di kolom Connection ID, ketik
lake-connection
.Klik Create connection.
Di panel Connection info, salin nilai dari kolom Service account id dan simpan di suatu tempat. Anda memerlukan informasi ini untuk memberikan izin ke akun layanan koneksi.
bq
Di Cloud Shell, jalankan perintah
bq mk
untuk membuat koneksi:bq mk --connection --location=us --connection_type=CLOUD_RESOURCE \ lake-connection
Jalankan perintah
bq show
untuk mengambil informasi tentang koneksi:bq show --connection us.lake-connection
Dari kolom
properties
, salin nilai propertiserviceAccountId
dan simpan di suatu tempat. Anda memerlukan informasi ini untuk memberikan izin ke akun layanan koneksi.
Membuat bucket Cloud Storage
Buat bucket Cloud Storage untuk menampung set data bunga.
Memberikan izin ke akun layanan koneksi
Untuk memberikan izin ke akun layanan, ikuti langkah-langkah berikut:
Buka halaman IAM & Admin.
Klik Grant Access.
Dialog Add principals akan terbuka.
Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.
Di kolom Select a role, pilih Cloud Run, lalu pilih Cloud Run Invoker.
Klik Add another role.
Di kolom Select a role, pilih Cloud Storage, lalu pilih Storage Object Viewer.
Klik Save.
Mengupload set data ke Cloud Storage
Dapatkan file set data dan sediakan di Cloud Storage:
- Download set data bunga ke komputer lokal Anda.
- Upload set data ke bucket yang Anda buat sebelumnya.
Membuat tabel objek
Buat tabel objek bernama sample_images
berdasarkan set data bunga yang Anda
upload:
SQL
Buka halaman BigQuery.
Di panel Editor, jalankan pernyataan SQL berikut:
CREATE EXTERNAL TABLE remote_function_test.sample_images WITH CONNECTION `us.lake-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/*']);
Ganti
BUCKET_NAME
dengan nama bucket yang Anda buat sebelumnya.
bq
Di Cloud Shell, jalankan
perintah bq mk
untuk membuat koneksi:
bq mk --table \ --external_table_definition=gs:"//BUCKET_NAME/*@us.lake-connection" \ --object_metadata=SIMPLE \ remote_function_test.sample_images
Ganti BUCKET_NAME
dengan nama bucket yang Anda
buat sebelumnya.
Membuat fungsi jarak jauh BigQuery
Buat fungsi jarak jauh bernama label_detection
:
Buka halaman BigQuery.
Di panel Editor, jalankan pernyataan SQL berikut:
CREATE OR REPLACE FUNCTION `remote_function_test.label_detection` (signed_url_ STRING) RETURNS JSON REMOTE WITH CONNECTION `us.lake-connection` OPTIONS( endpoint = 'TRIGGER_URL', max_batching_rows = 1 );
Ganti
TRIGGER_URL
dengan URL pemicu yang Anda simpan sebelumnya. URL akan terlihat sepertihttps://vision-ai-1abcd2efgh-uc.a.run.app
.
Memanggil fungsi jarak jauh
Panggil fungsi jarak jauh label_detection
pada tabel objek
sample_images
:
Buka halaman BigQuery.
Di panel Editor, jalankan pernyataan SQL berikut:
SELECT uri, remote_function_test.label_detection(signed_url) FROM EXTERNAL_OBJECT_TRANSFORM( TABLE remote_function_test.sample_images, ["SIGNED_URL"] ) LIMIT 100;
Hasilnya akan terlihat seperti berikut:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | uri | f0_ | —--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | gs://bq_huron_demo/flowers/daisy/100080576_f52e8ee070_n.jpg | {"face_annotations":[],"label_annotations":[{"confidence":0.0,"description":"Flower", | | | "locale":"","locations":[],"mid":"/m/0c9ph5","properties":[],"score":0.9785631,"topicality":0.9785631}, | | | {"confidence":0.0,"description":"Plant","locale":"","locations":[],"mid":"/m/05s2s","properties":[], | | | "Score":0.9635679,"topicality":0.9635679},{"confidence":0.0,"description":"camomile","locale":"", | | | "locations":[],"mid":"/m/011bc8hg","properties":[],"score":0.9110366,"topicality":0.9110366}, | | | {"confidence":0.0,"description":"Petal","locale":"","locations":[],"mid":"/m/016q19","properties":[], | | | "score":0.8927441,"topicality":0.8927441},{"confidence":0.0,"description":"Chamaemelum nobile","locale":"", | | | "locations":[],"mid":"/m/05cmcg","properties":[],"score":0.8460995,"topicality":0.8460995}, | | | {"confidence":0.0,"description":"Flowering plant","locale":"","locations":[],"mid":"/m/04sjm", | | | "properties":[],"score":0.7642974,"topicality":0.7642974},{"confidence":0.0,"description":"Annual plant", | | | "locale":"","locations":[],"mid":"/m/0jqb","properties":[],"score":0.7478164, | | | "topicality":0.7478164},{"confidence":0.0,"description":"Close-up","locale":"","locations":[], | | | "mid":"/m/02cqfm","properties":[],"score":0.7207553,"topicality":0.7207553},{"confidence":0.0, | | | "description":"Oxeye daisy","locale":"","locations":[],"mid":"/m/02qvnf","properties":[], | | | "score":0.71786934,"topicality":0.71786934},{"confidence":0.0,"description":"Daisy family","locale":"", | | | "locations":[],"mid":"/m/0l5r","properties":[],"score":0.7164383,"topicality":0.7164383}], | | | "landmark_annotations":[],"localized_object_annotations":[],"logo_annotations":[],"text_annotations":[]} | —--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | gs://bq_huron_demo/flowers/daisy/10140303196_b88d3d6cec.jpg | {"face_annotations":[],"label_annotations":[{"confidence":0.0,"description":"Flower","locale":"", | | | "locations":[],"mid":"/m/0c9ph5","properties":[],"score":0.9770426,"topicality":0.9770426}, | | | {"confidence":0.0,"description":"Plant","locale":"","locations":[],"mid":"/m/05s2s", | | | "Properties":[],"score":0.95798975,"topicality":0.95798975},{"confidence":0.0, | | | "description":"Petal","locale":"","locations":[],"mid":"/m/016q19","properties":[], | | | "score":0.88984144,"topicality":0.88984144},{"confidence":0.0,"description":"Yellow", | | | "locale":"","locations":[],"mid":"/m/088fh","properties":[],"score":0.84456813, | | | "Topicality":0.84456813},{"confidence":0.0,"description":"camomile","locale":"", | | | "locations":[],"mid":"/m/011bc8hg","properties":[],"score":0.7926449, "topicality":0.7926449}, | | | {"confidence":0.0,"description":"Annual plant","locale":"","locations":[],"mid":"/m/0jqb", | | | "Properties":[],"score":0.75020844, "topicality":0.75020844},{"confidence":0.0, | | | "description":"Flowering plant","locale":"","locations":[],"mid":"/m/04sjm", | | | "Properties":[],"score":0.7403478,"topicality":0.7403478},{"confidence":0.0, | | | "description":"Chamaemelum nobile","locale":"","locations":[],"mid":"/m/05cmcg", | | | "Properties":[],"score":0.7264577,"topicality":0.7264577},{"confidence":0.0, | | | "description":"Close-up","locale":"","locations":[],"mid":"/m/02cqfm","properties":[], | | | "score":0.721242,"topicality":0.721242},{"confidence":0.0,"description":"Daisy family", | | | "locale":"","locations":[],"mid":"/m/0l5r","properties":[],"score":0.7012979, | | | "Topicality":0.7012979}],"landmark_annotations":[],"localized_object_annotations":[], | | | "logo_annotations":[],"text_annotations":[]} | —------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------
Pembersihan
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.